Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Fuzzy Avatars Solved! Please re-upload your avatar if it was fuzzy!

Is the custom engine an unnecessary risk for a problem that does not yet exist?

13»

Comments

  • EunuchmakerEunuchmaker Harlingen, TXPosts: 204Member
    Originally posted by thubub
    Originally posted by Quizzical

    There are really only three good reasons to license a game engine rather than building your own.

    1)  You want to make a fairly generic clone game, so existing game engines will have nearly all of the capabilities that you need.

    2)  You don't have anyone on staff capable of making a game engine.

    3)  You need to have an early pre-alpha build that you can show quickly, to make it look like you're making progress.

    Of course, #1 is a good reason to cancel the project outright rather than licensing the game engine, and #2 will greatly restrict what you can do with your game.

    Every game engine is built to do particular things that the engine designers think that a lot of games will need.  If you want to go off the beaten path and do something unique, then no game engine will have the capabilities that you need built in.  At that point, you basically have three options.

    1)  Abandon most of the cool things that you wanted to do with your game and settle for what off-the-shelf game engines can do.

    2)  Write your own game engine.

    3)  License a game engine, buy access to the full source code, and heavily modify it to do what you want.

    I hope you're not advocating #1.  Because you should never advocate #1 as a gamer hoping someone will make cool games for you to play.  #1 is really only acceptable as a first project for an aspiring game designer to get his feet wet before moving on to something more ambitious.

    That leaves us with making your own game engine or heavily modifying an existing one.  The latter option is expensive, however, and can easily cost more than making your own.

    Remember that if you make your own game engine, then you just happen to have someone on staff who understands exactly how everything in it works:  the person who wrote the game engine in the first place.  If you license an existing game engine, you have to put so much work into figuring out exactly what it's doing so that you can optimize it for your particular game and change it to do what you need that it's far from clear that this will be less work than just making your own game engine.  Licensing a game engine certainly lets you get started faster, but it will slow you down later when you create bugs by modifying one part of a game engine while misunderstanding how it interacted with another.

    -----

    Making your own game engine isn't that expensive.  I read somewhere that Hero Engine has 60 shaders built in.  I haven't seen those 60 shaders, but a typical shader may be about 20 lines of code.  Of those 20 lines, maybe half will amount to declaring variables.  (More technically, declaring which uniforms the shader needs access to, which inputs it will read in from vertex data or a previous stage, and which outputs it will pass on to the next stage.)  So you've only got maybe 10 or so real functional lines of code.  Multiply that by 60 shaders and you have, well, not really all that much code.

    And that's intrinsic to the way shaders are done.  You have to execute shaders hundreds of millions of times per second.  Now, that could be 10 million shader invocations per second for this shader, 50 million for that one, 100k for this other, and so forth.  But in total, you're easily looking at hundreds of millions of shader invocations per second.  If your shaders are 200 lines long, you have a problem.  You can have some longer shaders that don't get run that many times, so there isn't some fixed cap.  But most of your shaders are going to need to be short.

    Now, that's not to say that writing shaders is easy.  While you might have 10 or so functional lines where the real computations are done, they're very dense lines.  For some purposes, you might have more comments than code.  And figuring out how to do the code is very mathematically intensive.  An excellent understanding of linear algebra and multivariable calculus is basically the entry level, you can't do anything without this for 3D graphics.  That's not "passed a class in it once".  That's "would have a good chance of acing a final that would be unreasonably difficult to give to normal students" worth of excellent understanding.  Well, you don't actually need everything from linear algebra and multivariable calculus, but you do need a good chunk of each.  And quite a bit of higher mathematics is useful to know, too.

    Here, let me give you a quick example with the comments removed:

    #version 420

    layout(triangles, equal_spacing, ccw) in;
    uniform vec3 moveVector;
    uniform mat3 camMatrix;
    uniform mat3 objMatrix;
    uniform mat2x4 axes;
    uniform vec4 persVector;
    in mat3 tePosition[];
    out vec3 gPosition;
    out vec3 gNormal;
    out vec2 gTexCoord;
    out bool gFront;
    void main() {
     vec4 faxes = axes[0];
     vec4 maxes = axes[1];
     vec3 pos = tePosition[0] * gl_TessCoord;
     pos.xy = normalize(pos.xy);
     gTexCoord = vec2(fma(pos.z, 0.5f, 0.5f), atan(-pos.x, pos.y) * 0.159154943f);
     float curveX = fma(fma(fma(fma(fma(faxes.z, pos.z, faxes.w), pos.z, maxes.x), pos.z, maxes.y), pos.z, maxes.z), pos.z, maxes.w);
     vec2 curveN = normalize(vec2(1.0f, -fma(fma(fma(fma(5.0f * faxes.z, pos.z, 4.0f * faxes.w), pos.z, 3.0f * maxes.x), pos.z, 2.0f  maxes.y), pos.z, maxes.z) / faxes.x));
     gNormal = camMatrix * (objMatrix * vec3(curveN.x * pos.x, pos.y, curveN.y * pos.x));
     gPosition = camMatrix * (objMatrix * vec3(fma(faxes.y * pos.x, curveN.x, curveX), faxes.y * pos.y, fma(faxes.x, pos.z, curveN.y * faxes.y * pos.x)) + moveVector);
     gl_Position = vec4(gPosition.xy * persVector.xy, fma(persVector.z, gPosition.z, persVector.w), -gPosition.z);
     gFront = (dot(gPosition, gNormal) < 0.0f);
    }

    If you can parse that, then good for you.  And if you can't, well, I probably wouldn't, either, if I hadn't written it.  Video cards have no clue what a shader is trying to do at a high level.  They just run the desired instructions as quickly as possible and let the programmer worry about whether it's what he wants.

    Shaders are also very performance sensitive, so it's critical that you heavily optimize them to do exactly what you need and nothing more, and to do it as efficiently as possible.  Some chunks of code will only run once in a while, or even once per frame.  If those run a little slower than they could, oh well.  But when you need something to run many millions of times per second, taking a microsecond longer than necessary is a problem.

    Now, you might say, why am I focusing on "shaders"?  What about the rest of the game engine?  You know what the technical name for the portion of a game engine that runs on the video card is?  Shaders.  Everything else runs on the CPU.

    Now, there is a good chunk of work in setting up data on the CPU to pass to shaders, and in the rendering thread that directly passes that data to the video card.  For the latter, think thousands of lines of source code--as opposed to tens of thousands.  Most of what the rendering thread has to do isn't nearly as dense as shaders, though, and there is a lot of copy and paste.  Much of it is just passing through data set up by other threads.

    So while writing a graphics engine isn't necessarily easy, neither do you need 10 employees working on it.  All you need is one good one.  For that matter, if you try having 10 people work on the DirectX/OpenGL and HLSL/GLSL portions of the game engine at once, they'll probably trip over each other so much that you just get a huge mess.  It's easy to have a bunch of people working in parallel on creating art assets.  The graphics engine part of a game, not so much.

    There is the problem that artists can't really do much until a good chunk of the game engine is already done.  But that's easy enough to handle:  if you're going to make your own game engine for a game, you don't hire 50 artists the day you start work on the game.  That's as wasteful as hiring a bunch of customer service representatives a year before the beta starts.  You get the game engine in place with a handful of employees, and then you hire the artists later.  If you only have 3 or 5 employees for the first year, that's not outlandishly expensive, even on a $5 million budget with a game that will have dozens of employees by launch day.

    -----

    You might think, but wouldn't licensing a game engine get you a better quality engine, because you can license one from the people who are the very best at it, not just who you have on your staff?  But it's often the other way around.  The engine that they create for Camelot Unchained won't be nearly as good as, say, the Unity Engine, for the games that Unity is used for.  Other games will need lots of things in a game engine that your particular game doesn't.  If you're making an engine for one particular game, you include the features that your game needs, and not the features that you don't.  That lets you completely skip tons of stuff--and thereby avoid a bunch of unnecessary bloat.  Making an engine for a particular game is vastly less work than trying to make a general-purpose game engine.

    Furthermore, there's a general principle that a given amount of effort to create a tool to do one particular thing will often get you something much better at that one particular thing than putting the same amount of effort into a general-purpose tool and using it for that one purpose.  If you compare some random tool to a Swiss Army Knife, the latter can do a bunch of things that the former can't.  But the Swiss Army Knife won't be as good of a screwdriver as a dedicated screwdriver that can't do anything else besides turn screws.  It won't be as good of a pair of scissors as a dedicated pair of scissors that can't do anything else besides cut flat surfaces between its blades.  It won't be as good at any particular purpose as a single-purpose tool built for that particular purpose.

    Or to take another example, a CPU is a general purpose tool, and a GPU is more special purpose to handle specific types of computations.  A CPU can do all of the computations that a GPU can do.  You can write a software renderer that is fully OpenGL 4.3 compliant without even having the video card do any work other than pass through the completed image.  But you don't because it will kill your performance.  Even if you've got an extremely high end, $1000 CPU and a $70 budget gaming card, offloading work to the GPU properly might increase your frame rates by an order of magnitude.

    In order for a game engine that you make from scratch to be better for your particular game than a game engine you could license, you don't need to have someone in-house who is just as good as the people who make off-the-shelf game engines.  You only need someone in-house who isn't really all that much worse than they are.  You'll get a ton of mileage out of being able to optimize for your particular game, rather than trying to create a bunch of general-purpose capabilities without knowing how games can use them.

     

    So here is what will happen tomorow morning at the Camelot Unchained office.  Some poor sap will grab a cup of coffee, head over to the work station, pull up the mmorpg.com forum to see what is happening and read this thread.  That person will spit coffee all over their monitor as they read this and call an "emergency" meeting.  The jist of that meeting will be, "Why the hell would anyone want to make a game for these nerds!  SERIOUSLY!!  Your wall of text includes CODE!?!?!?  Let's go back to making ipod games where the customers say things like 'Look!  A shiny!'"

    You know, I've often thought the same myself reading these forums.  Half of the people on here think they know what makes a good mmo, the other half think they're wrong, and neither side can even agree on what the common ground is, e.g., What is a sandbox?  LULZ

     

    Yeah, I'd push out crappy, money-grabbing, make-a-quick-buck games too . . . less effort, more reward.

     

    Man I love this site.

  • waynejr2waynejr2 West Toluca Lake, CAPosts: 4,469Member Uncommon
    Originally posted by Hokibukisa
    Originally posted by skyexile

     


    Originally posted by Hokibukisa

     


     

    With a proposed budget of $5mil, why the fuck is a tiny assed game studio making it's own graphics engine?


     

    Mr Kokibukisa, do you know how much money it costs to buy a AAA commercial graphics engine? I give you a figure range, it has 7 digits.

    That would be possible cost depending on the studio and liscense but this simply isn't true for a small studio. Every engine I've seen have very reasonable liscenses. Most get paid through royalties on earnings. While looking at costs you need ot keep in mind the cost of building your own, which believe it or not almost always costs more.

     Please list these engines, and provide all the costing details for licensing them in the context of what CU is trying to do.  Tell us how each can provide the level of pvp numbers they are hoping for.

  • QuizzicalQuizzical Posts: 14,765Member Uncommon
    Originally posted by Heartspark

    Last I checked Unity is a a free engine they are using (well they can pay $1800 for "expanded" version).   What Andrew was saying is he is making his own tools for it, not actually making a whole new engine.

    Could be wrong here, but that is what I got out of the videos. 

    Making game engines from scratch is very  time/cost consuming.

    Game engines sometimes have what effectively amounts to a trial version, where you can use the engine for a small fee, but can't modify it yourself.  That's fine for a dinky little project where you're not trying to do anything remotely innovative, but not a serious option if you're trying to make a real commercial game.

    The idea is to let you get started cheaply, so that you're a ways into the project when you discover something that you need the game engine to do but it can't.  At that point, vendor lock-in kicks in, and your choices are to pay what it costs to get access to the full source code or start over with a different game engine.  The former is expensive, and if you try the latter, you'll soon hit the same problem with the other engine you try.

    If you want to make a serious commerical game and you want to license a game engine for it, then you need full access to the source code so that you can modify it however you like.  You need to plan on that right up front, and not assume that you can actually launch a game on a trial version of a game engine.  Getting the full source code that tends to be expensive.  I don't know what Unity charges for it, but it's presumably where they make their money.

  • ThaneThane berlinPosts: 2,230Member Uncommon
    Originally posted by Hokibukisa

    I have to say that what andrew meggs found as cool, making his own graphics engine, I think its solving a problem that doesn't exist and is an unnecessary risk.

     

    There are entire companies that devote their whole existance to making videogame engines and fine tuning them. If you use their engines, you get to upgrade your videogame to the next big improvements they make with future hardware. Nvidia/Ati might invent some new great technologies and those engine developing companies will jump on the ball and take advantage of them.

     

    Whereas when andrew meggs "finishes" his little engine experiment will he continue to fine tune it? To keep it updated with the times? Easy to work with so that content designers and artists can easily and joyfully work with it?

    And in years down the road when the creme hardware is now considered old, will CSE be the ones to constantly be tuning and updating this custom engine?

     

    And remind me again why one of the rocksolid engines aren't good enough? Because they don't handles thousands of players on the screen at the same time? This isn't eve online is it? The game will have servers with character limits will it not? People will expect a degraded experience when hundreds of characters are on the screen at the same time. This happens in PS2 at a much lower threshold than what we saw on megg's screen during his demo. Players are ok with it. It is expected.

     

    Most of all for why I don't like this idea is, I see it as wasting valuable resources on a problem that doesn't exist, compromising on engine quality/support for a problem that doesn't exist, and where an established and fine-tuned  liscensed engine is relatively future-proof and forward thinking, making your own engine is not.

     

    With a proposed budget of $5mil, why the fuck is a tiny assed game studio making it's own graphics engine?

    if you are about to make a propper game, you use your own engine. quite simple.

    "I'll never grow up, never grow up, never grow up! Not me!"

  • SBE1SBE1 New York, NYPosts: 335Member

    Not sure what the heck the original poster is talking about.  I have yet to see an MMO game not completely drop FPS when there are like 50-100 players on the screen.  Most games become a slide-show at that point.  The reason is that almost every game engine is designed to render very good graphics with about 25-50 people.  There simply isn't a game engine that is designed to handle large scale battles.  So, if the vision of the game is large scale battles, why would you buy an engine (like say, the Hero Engine) that would make it impossible to do such a thing?  That's extremely dumb.   Ever try playin in Ilum on SWTOR with that Hero Engine?  Just terribad, which is why all the PvP now is instanced.

     

  • KuppaKuppa Boulder, COPosts: 3,292Member Uncommon
    Originally posted by redcapp
    Originally posted by Kuppa
    And to all the folks talking about the gw2 culling issue, it wasn't a graphical problem it was netcode.

    GW2 is exactly what I don't want to see, regardless of the culling.  All of your enemies are clones of one another.  You're not actually seeing the other player's avatar.  Totally ridiculous and a huge step backwards.

    Where the heck did you get that idea?? It's not how it works.

    image


    image

  • HokibukisaHokibukisa Midland, GAPosts: 185Member
    Originally posted by waynejr2
    Originally posted by Hokibukisa
    Originally posted by skyexile

     


    Originally posted by Hokibukisa

     


     

    With a proposed budget of $5mil, why the fuck is a tiny assed game studio making it's own graphics engine?


     

    Mr Kokibukisa, do you know how much money it costs to buy a AAA commercial graphics engine? I give you a figure range, it has 7 digits.

    That would be possible cost depending on the studio and liscense but this simply isn't true for a small studio. Every engine I've seen have very reasonable liscenses. Most get paid through royalties on earnings. While looking at costs you need ot keep in mind the cost of building your own, which believe it or not almost always costs more.

     Please list these engines, and provide all the costing details for licensing them in the context of what CU is trying to do.  Tell us how each can provide the level of pvp numbers they are hoping for.

    The burden of proof / effort calling up each provider and finding out how much it would cost CSE, in order to say that it would be too expensive, goes on you, not me. Their websites (hero engine, unreal) say to call them for pricing. Having liscensed plenty of software and addons, my experience is they work with you to negotiate a reasonable price.

     

    Of all the software that I have liscensed, making our own in-house solution for something you can get off the shelf is an order of magnitude (or several) more expensive.

    CSE will have $5 million if funded.

    $5 million is not a lot of money. A startup will burn through that i notime.

    image

  • tleartlear Toronto, ONPosts: 142Member
    The only candidate that comes to mind is Lineage 2 engine you could/can have fight on order of 1k people in that game. I have no idea if it is licensable and what the cost would be.
  • QuizzicalQuizzical Posts: 14,765Member Uncommon
    Originally posted by tlear
    The only candidate that comes to mind is Lineage 2 engine you could/can have fight on order of 1k people in that game. I have no idea if it is licensable and what the cost would be.

    The question isn't how many people can loosely be in the same battle.  The question is how many people can be fighting that are close enough that you need to draw them on your screen and the server needs to tell you what they're doing.  If game mechanics force players to spread out enough that even in a 1000 player battle, a given client never needs to be aware of more than 20 players, then for most purposes, the engine only needs to handle 20 players in a "battle".

13»
Sign In or Register to comment.