I am motivated to dig into 3D engine programming, but coming from embedded software development its a real struggle to get started. Most projects I worked on the software architecture was quite manageable for a single person. My ultimate goal would be to see a racing simulation which a custom physics simulation and BeamNG collision physics synchronizing over network. (don’t laugh, I know its a dream) Racing simulations are a passion for me and to understand the core mechanics behind a real-time engine would be awesome.
My focus is on getting started in how the different modules of the UE interact with each other. Especially graphics, physics and network for multiplayer.
I know of this brief overview, but its not that helpful imho: Unreal Architecture
Do you have any hint on which tutorials, books or other sources I could read?
Well I’m a beginner too, but I think you’ll want to learn C++ to properly understand how all these interact with each other. I just started reading a C++ e-book called ‘C++ Primer’ that was recommended.
Have you ever worked within a large OOP framework before? UE4 is “event driven”, “events” are how different modules interact, in theory not much unlike Win32, GTK, QT or MFC.
I started working in large event driven frameworks with Win32 (same theory, but in C not C++) and then CryEngine3, and coming to UE4 it appears to be much the same (to CE3). The whole framework relies heavily on Polymorphism, and Generic Programming (templates). Quite a bit different than low level systems programming i’m sure. Although some parts of the framework are low level, the focus for game development is more on high level logic and design instead of low level binary and pointer math. To learn, I would suggest just working on implementing some basic derived types to get yourself in the trenches, and moving forward from there. A custom GameMode wouldn’t be a bad place to start.
My Hello Slate tutorial could be taken as a basic UE4 Polymorphism tutorail, I implament a derived HUD class but all other types follow the same workflow. The workflow itself is pretty basic.
derive from some type
register your type with game so it game uses your derived type instead of it’s base, how this is done depends on your base type.
override base type with your implementation, implement anything expected, rely on base type for basic functionality.
In other words, Polymorphism. Not that it’s super-easy, the devil is in the details.
The lack of documentation for the C++ side is kind of disappointing. However, I’ve been watching the Blueprint videos on youtue and have learned a lot about how things work together. For example, this miniseries on networking taught me a lot about how UE4 handles networking, even with the minimum mention of C++.