Game Engine design - Beginner's question.

Started by
9 comments, last by Wan 15 years, 10 months ago
Hello All! This is a general question regarding the design of a 3D Game Engine. First of all, What are the pros and cons of designing your own engine vs purchasing a premade engine? are there any more options or is this a black/white situation? Secondly, what exactly does the term Game Engine cover nowadays? I mean from checking the avil of engines today, i see many other "modules" that are being used in games, but i dont think fit to a "Game Engine" category - such as physics engines, Havok Destruction and so on other compononets. What would u say are the pros and cons of developing a FULL PACKAGE (including phyisics, ai, 3d , audio , etc) compared to maybe just building a basic engine and combining it with other existing modules? is it at all possible? What are the approaches to these issues? or your opinions ? Thanks Lior
Lior Tal
Game Developer/Software Engineer
Advertisement
Really, the only advantages of making your own game engine (which encompasses rendering, physics, sound, collision detection, ect..) is for a learning experience. Your game engine probably won't be any better (most likely worse) than existing ones. There's an article called "Make Games, Not Engines" that seems to be posted about every other thread. I suggest you read it =)
Quote:Original post by Liort
Hello All!

This is a general question regarding the design of a 3D Game Engine.

First of all, What are the pros and cons of designing your own engine vs purchasing a premade engine? are there any more options or is this a black/white situation?

Secondly, what exactly does the term Game Engine cover nowadays?

I mean from checking the avil of engines today, i see many other "modules" that are being used in games, but i dont think fit to a "Game Engine" category - such as physics engines, Havok Destruction and so on other compononets.

What would u say are the pros and cons of developing a FULL PACKAGE (including phyisics, ai, 3d , audio , etc) compared to maybe just building a basic engine and combining it with other existing modules? is it at all possible?

What are the approaches to these issues? or your opinions ?

Thanks
Lior


What are you trying to do exactly? Usually people write an engine so they can sell it. If you just want to make games, find some tutorials and go with what works. Don't spend all your time engineering the perfect engine when you could be making games instead. Once you've made a few games you'll realize the things you keep rewriting and maybe then you can construct a general purpose engine. But I wouldn't start with it.
Keep in mind that this opinion is coming from someone who has never developed a full blown engine for all of that before. My only experience was building a 3D fish tank where fish would only swim within the boundaries of the tank, and for that i used glut.

Developing your own engine has the obvious disadvantage that you need to do everything yourself, but at the same time, the advantage is you get to do everything yourself.

Overall Advantages
You can specilize the engine completely to your own needs, focus on certain features or implement features that are otherwise unavailable
Since you code it all, you know the internal workings well, it can be easier to troubleshoot.
You will probably learn a LOT about the language, APIs, 3D math, physics, etc.

Overall Disadvantages
You have to code it all from scratch, you can't just call methods that are already prepared, thus it will take you longer
You have to have an understanding of all forms of 3D math, physics etc, to make it work correctly

A Game Engine is really built from multiple parts, a physics engine, graphics engine, sound engine etc. the engine itself is a specialised component that does one thing but does it very well. A physics engine will do all your physics calculations, it will know how to treat the data you send it and what to do with it. All you need to know is what to call and what to feed it.
A good graphics engine will just take all of your 3D information, perform any culling, and any functions like antialiasing, and it will do it from just a few calls, generally in a very efficient manner.

As far as building something basic and incorporating external modules, it does allow you to pick and choose, so i would say that is also a good plan.

Everything i work on personally is very basic, so i'm sure you'll get better and more informed opinions from some of the others here.

Hope this helps.


-------------------------------------All i know is i don't know anything
I should also point out that not all engines require you to purchase them, and in some cases, there are engines that handle specific areas of your game (like Ogre 3D for rendering and Bullet for handling collision, etc).
It really depends on what you plan to do this for and what you want to get out of it. A game engine generally encompasses the Rendering, Sound, Physics, Music, Input into a (sometimes) easy to use package. Its goal is to alleviate some of the more mundane programming (or even eliminate programming) from the user.

A custom engine will allow you to know how to use it inside and out from the *start. It would allow you to use your own programming style and what you feel comfortable doing (no complicated multiple inheritance, silly callbacks, etc). However, with the multitude of engines currently available, I would be VERY surprised if there is not already a free/cheap one that would fit your needs.

I personally enjoy making rendering engines for my pet projects. I enjoy the interfacing with the API and doing everything myself. However, if you are not a masochist like myself, you may wish to use any of hundreds of thousands of pre-made engines that are out there.

When it comes down to it, at some point you will be using someone elses code, be it a graphics API, Rendering engine, Gamemaker, device drivers, etc. It's your call what level of coding you want to do and what you are comfortable using under that.




* Granted that "start" will after months of creating the engine...
Sean Henley [C++ Tutor]Rensselaer Polytechnic Institute
Quote:Original post by nightech
Overall Advantages
You can specilize the engine completely to your own needs, focus on certain features or implement features that are otherwise unavailable
Since you code it all, you know the internal workings well, it can be easier to troubleshoot.
You will probably learn a LOT about the language, APIs, 3D math, physics, etc.


You forgot to add that building your own engine has a big impact on employers that are looking for specific skill sets. If you get as fas as building something that is robust and has a purpose, the employer will see determination, talent, and knowledge. ALWAYS put it on a demo CD to give to the employer (Worked for me, TWICE!). They wont care if its finished, broken, etc, they will flip through it to see your skill, programming style, etc. And that is always a HUGE advantage when trying to get into this unbelievable industry.
------------Anything prior to 9am should be illegal.
Thanks for all the replies,

After reading the "Make games, not engines" article, and after reading some of the (kind) discouragements from building an engine yourself here, one asks himself why oh why then people choose to do it ?

I was asking the question only from a theoretical point of view, since i am not in a place even near (in terms of graphics, physics, programming, or anywhere else) to begin engineering such a project, but still interested in knowing what people are doing..

My logical stand on this is that building an engine is a necessity prior to building your game, in terms of building a so to say "suite of tools" that makes handling everything else more clearly. (like building a level editor, character editor, audio system, etc, and then using it to create your game).

I cannot see any other way of designing a game without building these set of tools for it (call it engine or whatever else you'd like).

lior.
Lior Tal
Game Developer/Software Engineer
Tools are seperate from engines, although they might share common parts.

The mistake people make is they go "I want to make a game, so lets spend X amount of time developing an engine to make that game!"

At which point you are no longer making a game and are instead making a mess.

If you've never written a game before how do you expect to be able to design an engine for one?

"Engines" don't just appear, they grow. Take the Unreal Engine or whatever iD are working on right now; both of these originally started life as a game. Once the game was done they extracted bits of it (or rewrote bits of it) for the next game. This process is then repeated over and over as the now engine evolves.

So, in short, unless you have experiance forget about an engine. Write a game. Write what you need when you need it. Don't be afriad to refactor/rewrite old code or even remove code as you work.

Once you have a game written then you can sit back, look at what you did right, what you did wrong, take what useful code and experiance you can from it and move on to the next one.

Trying to write an engine in isolation will just land you with a large, over engineered, untested and quite possibly useless lump of code you'll have to rework as you hit real world problems.
And what would u say about the option of getting some open source 3d engine project, and modifying it according to my needs? (adding whats needed)

Anyone had any positive experiences with this method ?

Lior Tal
Game Developer/Software Engineer

This topic is closed to new replies.

Advertisement