Advertisement

Confused about 3D game dev

Started by August 11, 2016 01:52 PM
4 comments, last by BBeck 8 years, 3 months ago

Many times ago before i start Gamedev ask people and told me to better to start with 2D games and then after gaining some experience in gamedev and programming is better to go for 3D gamedev.
ok ... i learned many things until now, i feel im ready for 3D gamedev but i have many confusion.( i just tell you these to see how is my situation is)

Right now i found that there some game engines like UDK , CryEgnine , Unity3D etc...
but also found that there also somethings they call redering engines that their purpose is not just to make Games , they are like ogre3D( heard alot about it) , irrlicht , panda3D etc....
and found some physics engine like bullet

Now the questions:

now im just confused to start which one?
which is better for ultimate beginner in 3D gamedev ? Game engines? or use other engines together (i mean for example use ogre3D and bullet together)?
also don't know basics of 3D gamedev if you know any resources i would be grateful to tell.( just dont tell me about books i cant use them because of some BIG REASONS :( i can use only free resources on internet)
AND one thing i almost forgot i use C++ for game dev, do you think i need more languages in future or i should start to learn more languages right now like c# or java?
Thanks

Physics Engines do just that: calculate physics. You can use them in your own DIY made games, or use them in Engines/Frameworks coming without integrated physics engine to calculate your physics and collision.

Game Engines often include Physics Engines. Actually the term "game engine" is used for a framework that gives you pretty much everything you need to start, in one neat package.

What you call "Rendering Engines" there I would still call game engine. Some of them just leave out important things the more complete game engines come with, and mainly are just a renderer, that is maybe why someone would call them rendering engines.

Ogre3D for example AFAIK does not come with tools out of the box (tools => level editor, model importer, ...), though a quick google search shows there are tools available for this engine. Likewise, it will most probably not come with a physics engine integrated out of the box, though again I guess there are existing solutions you can just plug in.

Really, easiest 3D engine to pick up for a total beginner, IF you don't want to faff around yourself with assembling stuff and searching the internet for tutorials is Unity3D. Big community, lots of tutorials, good documentation, and everything you need in one big neat package.

Advertisement

I agree with Gian-Reto, Unity3D is a very good choice for a beginner (and even for experienced people). You can use c# with Unity which your experience with c++ should help with a lot. I've tried a few things over the years from doing my own engine (my own physics and directly using OpenGL) to using Ogre3D+PhysX to just dabbling in Unity. The lower you go will massively increase the amount of time it takes to do anything, not just twice as long but probably over 10x as long.

Doing your own physics and rendering is a crazy, crazy amount of work and chances are you will never be able to do something as good as what already exists. I dread to think how much time and resources have been put into developing something like Unity. You should capitalise on that.

If you just want to make a game then the higher level options will be the best. You should only go lower if you need to or if you want to (learning, interest etc).

Interested in Fractals? Check out my App, Fractal Scout, free on the Google Play store.

now im just confused to start which one?

Any of them will work.

also don't know basics of 3D gamedev ... can use only free resources on internet

In my view, the biggest thing you need is the math of 3D worlds.

When you are in the 2D world you need 2D points (x,y), you need 2D vectors of (dx,dy), you need orientation which is typically an angle from a top-down view. The mathematics to work in the world are elementary algebra, discrete trigonometry, and geometry. That is, the math of elementary algebra to manipulate formulas and equations, enough trigonometry to handle the basic trig functions to manipulate the world, and enough geometry to handle things like circle/circle intersection, circle/line intersection, etc.

When you are in the 3D world you need 3D points (x,y,z), you need 3D vectors (dx, dy, dz), you need orientation which is typically a 3x3 or 4x4 matrix from the world's origin. The mathematics to work in the 3D world are linear algebra, algebraic trigonometry, and topology, in addition to the math of 2D worlds. That is, in addition to the math of 2D worlds above you need linear algebra to manipulate matrix and vector equations and higher dimension coordinate systems, enough algebraic trigonometry to manipulate polynomials as they operate in 3D, and enough topology to understand how to work with polygonal meshes in 3D space.

If you're looking for a good, free, online textbook consider this one. If you're looking for tutorials and videos, Khan Acadamy covers many of those topics.

When you are starting out, many people are able to hobble along without actually knowing that math. They will try to find math functions that give them their forward vector and up vector and similar without actually knowing the math involved, they will try to figure out what is forward-facing or backward-facing and with some luck stumble upon a web site that explains it. They will look at the programs that show them model meshes and try to figure out the names and words and manipulations through trial and error. Some people are able to get started that way, but ultimately you will need a solid understanding of the math to succeed.

i use C++ for game dev, do you think i need more languages in future or i should start to learn more languages right now like c# or java?

Any of those will work. C++ is adequate, and Unreal Engine uses it. C# is adequate, and Unity uses it. If you only know C++ then Unreal Engine may be a better fit for you right now.

One thing I would like to throw in is "that it is a myth that you should learn 2D game development in order to learn 3D game development". I've been guilty of perpetuating this myth in the past. When I first started 3D game development I believed this to be true even though I didn't want to learn 2D. I suppose I had the very basics of 2D down. I knew what a sprite was. I had passed a trigonometry class. I programmed in C++ (and a slew of other languages as well). But for the most part I skipped right over 2D. Never really learned it. People ask 2D questions and I have no idea. My typical answer is "I don't know. I've never really done 2D other than a few simple projects."

3D on the other hand I've been doing for years in XNA, DX11, and now OpenGL 4.5 with GLSL and HLSL. And the DX stuff I did without any libraries except standard C++, DX, and the Windows SDK. (I use libraries a fair amount for OGL now.)

2D and 3D are just completely different skill sets. There's a little overlap. But then again, there's a little overlap with business programming or any other type of programming you do as well. In general, I think it's a waste of time to really spend a lot of time learning 2D if all you really care about is 3D game programming. It takes forever to learn 3D game programming in the first place; so there's not a lot of time to waste.

There's a lot of advantages to doing 2D instead of 3D. But the more experienced I get at 3D, having very little to no 2D experience, the more I think it would have been a waste of time to learn 2D. You would get "some" value out of it, no doubt. But not much compared to just spending that time learning 3D. The one advantage I can see to doing 2D first is that 2D is generally a lot faster to see results, a much faster progression, and faster to get projects completed. Any experience is good experience though. It wouldn't be completely wasted; it would merely be no more helpful than spending that time learning 3D. There's also the issue of your 3D GUI needing to be in 2D and so you end up mixing a little 2D with 3D. But even that I don't think is a justification for learning 2D first.

Just my humble opinion.

This topic is closed to new replies.

Advertisement