3D engine design
I’m reading API docs of one “really advanced” modern 3D engine (found them publicly available on their site, don’t know if that’s an error or not :)) and… it’s a strange feeling. Basically, everything’s hardcoded!
By ’everything’ I mean that, for example, possible shadow algorithms are hardcoded in the very base classes of the engine. Same for physics, lights, scene management, culling etc. Similar like you’d have a class VeryBaseEngineObject
and that would have information “what shadows are on me?”, “am I physics body”, “cull me against the camera” and “render me for the water reflection”.
Huh? Is that how all engines are designed? You have functionality like “shadow map”, “a physics crate”, “a fancy reflective water” and “a fullscreen glow with light streaks Masaki Kawase style” in the core of the engine? I’d understand if that would be as helpers or some “premade” stuff on top of the core engine… but having that in the core? Why?
Is that what constitutes a “flexible” engine?