How much time will it take me to learn 3d game programming ?

Hi, I can program 2d games with ease in java and html5, but I now wanna get my hands on making 3d games but it looks scary. According to you, how much time will it take an average guy with just knowledge of programming and high school mathematics to learn 3d game programming?
p.s. - >I don’t know anything about 3d.
>All translations, rotations, scaling etc I have ever done is in 2d (canvas), which is very easy.
> I don’t know what mathematics I need to make a 3d game.
I am a self-learner. In which direction should I go and what should be my first step ?

3d graphics is one of the most challenging fields in computer science, because of some reasons: You need lots of math, you need knowledge about programming, about rendering architectures and engine architectures and you need knowledge about graphics pipelines and available APIs.

But 3d games aren’t always about graphics programming - do you want to do 3d games? Or do you want to understand how 3d games work and program your own engine, for learning purpouses? Making games and programming a game engine are two completely different tasks…

First, I would advise you to experiment with developing 3d games on an existing engine. If you take a look at Unity, I’m sure you will get some results pretty soon, as the engine is well documented. Once you got the basic structure of a game engine, with all its components and transformations, scriptings and stuff, you can dive into the topic more deeply, if that’s what you want then.

I wouldn’t recommend programming your own game or game engine from scratch, until you did a first prototype with an existing engine. Why? Because it will probably frustrate you so much, that you doubt everything concerning computer science and game programming :smiley:

Your never finished learning anything. Seriously. I am now 41 and i look back on my former younger 39 year old self, so young and full of piss and vinegar and so lacking in wisdom! I don’t expect that to end anytime soon.

But i do disagree the the previous post. 3d graphics one of the most challenging fields in CS? What? Not even close. 3d graphics and 99.9% of the math behind it is pretty simple and not all that advanced. I would expect most people who really want to learn to be quite capable of doing so. It is mostly last year equivalent high school to first year uni level. Many of us taught ourselves this stuff for demo scene back in the old days when there wasn’t even internet. Basically vectors and matrices and understand the idea of a coordinate system and your more or less done. Even advanced shaders are not that difficult from a math perspective.

Have no idea why people would say 3d grfx is hard advanced math. It really isn’t. Navigation math with non euclidean geometry is harder and something every old navigator had to learn. Or calculating the orbits of the planets accurately enough for space probes is a bit harder. Fluid dynamics is much more difficult. 3d grfx math is piss easy.

However i do agree that it is stupid to write an engine. There are a bunch of good engines that have done a lot of the boiler plate code for you. Golden rule as a coder. Don’t write code some other sucker has written for you. Every man and his dog writes a new “engine”. Guess what! they never finish and 99.9% of the ones that do have a far poorer product than stuff that was around for free when they started.

If java is your thing i recommend Java Monkey Engine. Otherwise you can’t go wrong with Unity and c# is not bad either. I wouldn’t recommend anything with C++ or C.

RKJ, it sounds like you are just like me. I started learning about 3D graphics on my own time a two years ago when I was still a junior in high school. (about to start college now)

If you love the material and have a desire to learn more and persevere through the struggles of creating 3D graphics from scratch, it won’t be that hard for you to learn them. Add me on skype if you want to talk, I can help you out :slight_smile: m.limits.

Also, you shouldn’t be setting your eyes on creating a 3D game right now because that won’t happen (frankly, i learned that the hard way). It’s not like 2D graphics where it takes a small amount of time to become adept at, and you should expect multiple engine rewrites because 3D graphics are not a trivial concept.

3D graphics can be the most satisfying and the most aggravating programming you ever do, but in my opinion, the knowledge you gain from it will help you in all other fields of game programming and will change your perspective on video game development. (add me on skype tho i love helping)

JavaFX 3D is pretty easy to learn and get started. I made the following program in about two weeks after starting JavaFX. I had been using Java 2D for many years, but wanted a 3D working world as a way to test out some 3D audio code algorithms. Give it a minute or so and these rumble-producing purple cylinders will start to rise up. You can tool around the chess-board with the arrow keys and the sounds will shift in location (best with headphones).

I wrote a short tutorial to help get past some gotchas that might make it hard to get started with JavaFX. This will get you going with the basics for a game loop and logic of graphics display. For some reason it is kind of hard to find good beginning tutorials for JavaFX game graphics. (Part of it: Java 8’s version of JavaFX is vastly different than the first go at JavaFX a few years back.)

The 3D stuff I used in the 3D-sound-test mostly came from reading the 3D chapter in “JavaFX for Dummies” and common sense. The “for Dummies” series is not known for straining brain cells.

I think it is a reasonable way to get going quickly and still learn a lot of basic 3D concepts. However, there seem to be larger and more active communities for JMonkeyEngine, LibGDX and of course some non-Java engines mentioned above.

Honestly dive into a unity tut. Or a blender one. You can be up and running very quickly. A day or so.

I didn’t say 3d graphics is the hardest math. I said it’s one of the most diffucult fields in CS, thats a difference. And I can tell you it is, because you rarely have to handle so many different resorts when developing something. You can learn math by reading, theoretically. But you can’t learn software development in the same way, because you need practice in many different areas to really “get it”. And that’s what I wanted to say: Someone who is new to all this, will be overwhelmed by the shaders and buffer layouts and extractor patterns and gpu pipelines and memory management and stuff. I have a lot of experience with people new to this topic as I lead several lectures and courses in graphics programming and game development - and when someone is struggling with undebuggable projections, how should he at the same time learn what value types are or why the layout of his buffer seems to be strange? Even with guidance, this is hard for beginners - you yourself are either an exception or you have forgotten how it was as a beginner. I saw courses of twenties of students in this situation - it just takes a lot of a lot of time, that’s for sure.

And since the thread author mentioned that he’s a self-learner - I already saw a dozen of OpenGL self-learners personally…without exception they are all repeating the same mistakes and it takes the same insane amount of time for each one to program a small engine…with all the “I spent a day figuring out why my uniform value is -1”-mistakes and so on.

delt0r is much more cleverer than wot I am. I find it to be extraordinarily difficult and it gives me major headaches. Admittedly a lot of the headaches are just caused by the fact that Java makes it rather difficult to do 3D graphics thanks to missing language features and so you spend half your time just scratching your head over pointless coding bugs which are incredibly difficult to track down (because usually the result is “black screen”).

Cas :slight_smile:

If you want to make 3D games, use an engine. If you want to learn how engines are made, learn OpenGL/DirectX/Vulkan/any low-level graphics API.

If you want to make amazing 3D games with realistic graphics and physics, but you want to use OpenGL…just don’t. It’s not worth the time and effort.

I fit into this category, except for me it’s more like “I spent a day trying to figure out what a uniform value is, and still don’t know”, but if time isn’t an issue there’s nothing you can’t work through eventually. I can’t say how long it would take, with just high-school math, but just getting to the point where you can draw a cube and have user-input rotate the camera might take a couple weeks if you don’t use an engine.

And it really isn’t. Not even close. And not by any CS i know and I know a lot since it is my day job. In fact my friend on the other side of the room laughed when i told him your quote, with a plain “what? seriously?” follow up.

Fine 3d may be harder than 2d, and bugs are difficult because as cas says you get just black. But come on. It is 3d euclidean geometry in a well established field and industry with a massive set of tools available in just about any licence you want. Most senior high school students should be fine. As long as they are not majoring in something stupid like rock climbing.

I really agree with this, however I think most of the difficulty comes from the desire (or lack thereof) to learn and improve.

It’s the second most complex* and difficult field I’ve encountered in my 37 years of programming. I think you may be being dismissive of the effort and knowledge and belittling the sheer brainpower that has gone into it… it ain’t remotely easy. Not by even the most fanciful imagination.

Cas :slight_smile:

  • The most complex field I’ve been involved in is marine seismic exploration, where I am now

Please tell me the job doesn’t involve blowing cetacean’s ears out with loud sonic blasts.

Actually that’s exactly what it involves. And in a funny coincidence, why I was hired, which was to help design a system that doesn’t kill every whale within 5 miles.

Cas :slight_smile:

Wait what? I worked on some oceanography stuff in the Physics department in NZ we were sending sonar signals from the US right across the pacific to NZ and Antarctica! It sounds “loud” in dB but that is because the scale is different for underwater sound. So we were not having any problems as in Whale song is louder.

Small world.

I wish you every success!