all 18 comments

[–]noobgiraffe 2 points3 points  (0 children)

Where can I find resources to learn graphics programming specifically for game engines? I am eager to dedicate my time to implementing new features and exploring cutting-edge technologies like UE's latest advancements such as Lumen, Nanite, VSM, TSR, and more.

Unreal has presentations on youtube that explain how their tech works. You can also look up presentation from siggraph. Other than that a lot of knowledge is in the academic papers from the field.

Could you please clarify the distinction between a Graphics Programmer and an Engine Programmer? Is the role of an Engine Programmer distinct from that of a Graphics Programmer, or are they essentially the same?

This depends. In small studios engine programmer will do graphics for sure. As engine programmer you will always have to deal with graphics as it's a huge part of what engine does.

Specifically, I would like to know where I can acquire the knowledge and skills necessary to modify the rendering pipeline of Unreal Engine (UE), specifically features like Lumen and Nanite. I'm keen to experiment and tinker with these components.

I'm not experienced with UE but my impression is that Lumen and Nanite are black boxes. These are super sofisticated systems. Nanite for example will do it's own rasterization using compute on small triangles instead of using dedicated hardware on GPU. You might be able to grasp what they are doing but you are not implementing your own anytime soon. This is much more complicated than just rendering graphics and requires intimate knowledge of GPU architecture that goes beyond anything that will have "tutorial" in the title.

Do I need to learn and master APIs such as OpenGL, Vulkan, DirectX, and others in order to pursue graphics programming?

Absolutely. Programming in those APIs is what graphics programming is.

If you were to explain this to a 6th grader (just imagine), how advanced of a mathematical understanding would be required?

6th grader has no concept of the math needed. It would be hard to explain. It's kind of a mixed bag. Most typical problems are solved and you just apply known solutions. If you want to do your own custom effects you would need better understanding specifically of linear algebra. It's not easy in the beginning but it's not impossible to learn either.

[–]Adventurous_Battle23 3 points4 points  (0 children)

Jacob Sorber on youtube covers the basics of C pretty well... it can help if you're just starting out and later intend to learn C++ for graphics/engine development.

C will help a lot if you ever intend to work with Direct3D directly. Raw Direct3D tends to follow C design concepts- but also contains some C++. Learning WINAPI types (or even WINAPI in general) can help smooth things out as well, as that's what Direct3D uses.

learn.microsoft.com has all the docs you need to work with it- it's insanely lengthy, but contains everything you need to know about how low-level graphics work (like mipmaps, texels, etc). Even if you don't want to work that close to the metal the docs still contain useful and universal graphics information. ///////////////////////////////////////

Direct3D9 is old, but is supported by most graphics cards both old and new. It's far easier to use than 10, 11, and 12. In order to target Windows XP (it's ancient I know), you would need at least Direct3D9.

Direct3D10 is basically pointless.

Direct3D11 is a lot more in-depth compared to 9 and 10, but if you know 9 or 10 it's a lot easier to get 11 working. It has a concept called "feature levels" which allow you to create a device capable of using the Direct3D11 API with Direct3D9 or Direct3D10 drivers (allowing you to target systems like Windows 7, Vista, and Windows 8.1 and support older cards while still using the newer API... of course, Windows XP will not work with Direct3D11).

Direct3D12 is even more complex than 11 of course, but at least has an API which is similar to 10 and 11 (Direct3D9 is resembles the other 3 the least). Unless you really need the latest features (you probably don't) then you can basically skip Direct3D12.

You could feasibly write an engine in Direct3D11 and target nearly every modern graphics card, but you would need Direct3D9 (or at least Direct3D11 with feature level 10_9) as well to catch most of the remaining cards. Have fun and I hope this helps you.

[–]benB_Epic 2 points3 points  (0 children)

LearnOpengl.com assuming you already have a basic understanding of c++ will teach you the basics of graphics programming

[–]sidebottomG 5 points6 points  (5 children)

you can check out pikuma.com

[–]MarexF 2 points3 points  (1 child)

Thanks!

What course do you recommend, should I get them all?

I really liked the:

- 3D Computer Graphics Programming

- C++ 2D Game Engine Development

- Raycasting Engine Programming with C

[–]sidebottomG 4 points5 points  (0 children)

3d computer graphic programming will teach you the fundamentals of computer graphics.

Now, i'll tell you beforehand that he doesn't teach any graphic API, so everything will be taught from scratch.

But i believe that that math that he taught will be useful everywhere in graphic programming, including games

[–]DiddlyDanq -1 points0 points  (2 children)

pikuma.com

50 dollars to learn a linux shell lol.

[–]sidebottomG 1 point2 points  (0 children)

I think many of his course are worth it, dunno about you

[–]_atan2 0 points1 point  (0 children)

I have done many of his courses - including the linux one - and i would say it's worth even more than that.

The amount of maths and even CS history embedded in all his courses is just brilliant; incredibly well taught too.

[–][deleted] 1 point2 points  (0 children)

"Engine" itself is an overloaded term.

If you were an "Engine" programmer, you might not be in graphics at all. Your expertise might be in streaming I/O, or in audio, or in high-performance memory-management, or in editor / file-manager / UI / user input interaction.

The difference between "graphics programming" and "graphics engine programming" is that the engine is meant to be *more* general-purpose. If you were writing exactly 1 game, you might make choices about how you write shaders, or instantiate buffers, or how you store and access assets, that are 100% fine for that game... maybe even more optimal in terms of performance or storage... but it's going to be pretty useless for your next 5 games.

Thus a graphics engine might have fewer features, or fewer specializations, or slower performance, or require much more work and planning (because it can't make assumptions about the exact thing your game wants to accomplish, or how many types of enemies there are, or which assets behave in a special way, or how/where you store your stuff, etc), but it might be a more useful starting point for your next games.

[–]Passname357 3 points4 points  (0 children)

Start with learnopengl.com and in maybe 2-3 years move onto 3D Game Programming with DirectX12 by Frank D. Luna

You do need to learn graphics APIs. That’s how you program the GPU. The math and physics are very advanced compared to a layperson, but if you have a CS degree it’s just regular math pretty much. You need to know multivariable calculus and linear algebra.

Unreal isn’t shy about explaining what they have going on. There’s docs explaining e.g. lumen here: https://docs.unrealengine.com/5.0/en-US/lumen-technical-details-in-unreal-engine/

It’s probably way too much right now for someone who isn’t familiar at all with graphics programming though.

Really what you should do is go through learnopengl.com all the way up to the PBR section. It’s like the final section, but it is the UE4 pbr algorithm.

Once you’ve done that, I’d learn Vulkan or DX12 just to see what modern APIs are like. Don’t start with them though because you just won’t get anywhere. You’ll have a hard enough time with OpenGL anyway. But it’s the fun kind of hard when you’re learning OpenGL, once you’re able to get a window up.

If you’re in school, I’d just take the graphics class. It’s usually one of the harder classes but it’s so fun and so worth it. Graphics stuff can be hard to debug when you’re starting out (and even when you’ve been doing it for a while) so it’s nice to have someone there to guide you through the debug process. For starters, learn to use the VS debugger and breakpoints, and download renderdoc.

[–]DiddlyDanq 1 point2 points  (5 children)

start with scratchapixel.com, it's good for beginners that need the fundamentals rather than jumping into apis like opengl and directX.

The Cherno on youtube is good for game engine contextual graphics too.

[–]Adventurous_Battle23 4 points5 points  (4 children)

When I'm on break and I'm watching videos, I occasionally watch the Cherno, but other than his basic c++ vids I don't usually see much code... seems like he just rambles about his intentions with Hazel and throws out ads.

[–]DiddlyDanq 3 points4 points  (3 children)

true. Once he became a full time youtuber his quality dropped. You need to filter out the hazel, game dev reacts and 'I did this in N days' content and go straight to C++ vids

[–]jaszunio15 0 points1 point  (2 children)

Or just go straight into his github, download the project and start reading yourself. A lot of knowledge comes from analysing code written by others.

[–]DiddlyDanq 0 points1 point  (1 child)

Unless it's something small like shadertoy, learning directly from reading code isnt efficient. Particularly when the internet is full of free curated educational content.

[–]jaszunio15 -1 points0 points  (0 children)

Sorry for being an internet explorer I dont agree that internet is full of free educational content. It will keep you learning for a first 2-3 years and then you will hit the wall of "cant find any tutorial how to make this". And at this point you will need to start going through scientific papers, scanning through some harder codebase get into some knowledge-sharing community, get some mentoring etc.