This engine originally followed the tutorial series: Vulkan (c++) Game Engine Tutorials This engine has since surpassed it's scope.
Intending to create a differed renderer with a universal ray marcher. The pipeline will be defined as follows: Objects -> Volumetrics -> Lighting -> Post-Proccessing -> UI I'm thinking UI should actually be first, no?
Sources:
- https://vulkan-tutorial.com/Texture_mapping/Images
- https://vkguide.dev/docs/chapter-5/drawing_images/
- https://www.youtube.com/watch?v=lbaHrocxQdM
Textures were originally binded as a global array, but are now binded per object.
I am looking into a more involved material system with multiple masks for things like:
- Albedo
- AO
- Bump
- Cavity
- Displacement
- gloss
- Normal
- Roughness
- Specular
- Transmission
Sources:
Sources:
- https://github.com/SaschaWillems/Vulkan/blob/master/examples/screenshot/screenshot.cpp
- https://reference.torque3d.org/coding/file/swizzle_8h/
Not a very useful or optimized system, but I learned something. Also, If the image seems very blue, It's because it BGR instead of RGB and I cant be bothered to fix it.
Sources:
-
I discovered Nvidia Physx, but I dont think I can implement it without completely transitioning to visual studio and I dont want to do that. However I think I can use it's documentation to help me out:
-
https://www.saschawillems.de/blog/2018/09/05/vulkan-conditional-rendering/
-
https://jose-villegas.github.io/post/deferred_voxel_shading/
TO DO:
- shadows
- skybox
Going for volumetric atmosphere, turns out that is very hard. - ECS
- UI Going to use imgui for tooling UI to make the traisition for hardcoded objects to loaded files easier.
- Sound
- Physics
I'm taking a break from physics to do clouds - Asset System
- CVAR System
Sources:
- https://www.youtube.com/watch?v=8OrvIQUFptA
- horizon: zero dawn has a lot of info
wtf is 'dithering' wtf is a kilometer
- https://sebh.github.io/publications/egsr2020.pdf
- http://evasion.imag.fr/~Antoine.Bouthors/research/phd/
- https://github.com/sebh/UnrealEngineSkyAtmosphere
- https://advances.realtimerendering.com/s2019/index.htm
Turns out, I could/should set up an arbitrary-ish amount of discriptor sets based on how frequently they change. eg. per camera, per object, per frame.
-
https://www.reddit.com/r/vulkan/comments/4gvmus/best_way_for_textures_in_shaders/
first comment knows whats up ^ -
https://stackoverflow.com/questions/42214710/vkallocatedescriptorsets-returns-vk-out-of-host-memory
These types are apparently very useful, but lacks proper hardware support so it would only make things more difficult in the end.
- Descriptor indexing
- Push descriptors
- bindless descriptors
- dynamic UBO's
This is becoming more and more useful: https://vulkan.gpuinfo.org/displayreport.php?id=25342#formats_optimal built in variables for frag shaders: https://www.khronos.org/opengl/wiki/Fragment_Shader
- Vulkan SDK
- stb - https://github.com/nothings/stb
- glfw - https://github.com/glfw/glfw
- glm - https://github.com/g-truc/glm
- tinyobjloader - https://github.com/tinyobjloader/tinyobjloader
- imgui - https://github.com/ocornut/imgui.git