In the future I'll probably do something similar to what you mentioned and have the cascades use the LODs selected for the main view.
212 karma · joined March 29, 2023
In the future I'll probably do something similar to what you mentioned and have the cascades use the LODs selected for the main view.
The other was breaks. I didn't do this all in one stretch and instead did it in small chunks over time. I wasn't trying to ship a final game or finish as quickly as possible so the time scale was very relaxed.
Then the last was to make sure the process stayed as enjoyable as possible. If I was getting stuck on a problem or if a particular path really didn't seem to be working, I preferred to either take a break from the problem and come back later or find new sources that helped me see if in a different way (or both).
"Even if that’s the case, is there a huge amount of work to integrate existing models/scenes into your engine?"
It uses the Assimp library which allows it to support things like .obj, .fbx and .gltf. Usually what I do is export from Blender to gltf and ask it to export the textures separately rather than pack them into the binary. Most assets that were designed with metallic-roughness in mind either work immediately or with minimal changes. In my own testing the most frequent things I had to change were if normal maps were inverted (fix by flipping the green channel in photoshop) or if the model exporter set all the metallic values to maximum due to missing data (fix by loading the metallic or metallic-roughness maps in photoshop and flipping metallic channel from max to 0).
And yes! The video was captured in real time on an Nvidia GTX 1060.
I don't know much about WebGL2 - do you happen to know if dropping the requirement to GL 4.3 would be enough to make it compatible with WebGL2?
Right now it's using fast-approximate anti aliasing for its AA method but overall even though it's better than nothing it's definitely not good enough especially in motion. I'm going to keep FXAA as a togglable option but I want to add in TAA/TSSAA which look like they handle AA in motion much better.
Then for the performance on weaker hardware... yeah this is something I've mostly neglected for now. All my testing has been on a desktop Nvidia GTX 1060 where performance is currently pretty good there.
One option would be for me to add fallbacks that remove reliance on certain realtime features (such as realtime GI) and allow for baked solutions. My initial goal was to avoid all baked solutions and only target realtime everything, but now I feel I need to cycle back and add in other options on top of what's there.
For this project I felt like weak copyleft MPL 2.0 was a nice balance sitting in between strong copyleft GPLv3 and no restriction MIT.
Its backend only supports OpenGL right now. I think for a long term goal migrating to Vulkan would be a great option since it would unlock MacOS while still allowing Windows and Linux to run it.
It's been fun but slow and also very difficult. Global illumination was especially hard and had a few false starts.
It is built using C++17 and OpenGL 4.6. You can find a feature reel here:
https://ktstephano.github.io/rendering/stratusgfx/feature_re...
Here are some of its current graphics and engine features:
-> Physically based metallic-roughness pipeline
-> Realtime global illumination
-> Raymarched volumetric lighting and shadowing
-> Cascaded shadow mapping
-> Deferred lighting
-> Mesh LOD generation and selection
-> GPU Frustum Culling
-> Screen Space Ambient Occlusion (SSAO)
-> Filmic tonemapping
-> Fog
-> Bloom
-> Fast Approximate Anti-Aliasing (FXAA)
-> Pool allocators
-> Multi threaded utilities
-> Concurrent hash map
-> Entity-Component System (ECS)
-> Logging