Shadows
- Shadows are implemented in the classic shadowmap way using poisson sampling for noisy style.
- Static and dynamic geometry have their own separate shadowmap in order to improve performance.
Stylized art
- To compensate for the lack of artists in our team I implemented two effects aiming at solving our asset-like look of our game.
- Pixelization:
- Using the depth buffer in order to determine different pixel levels across different distances, hence compensating for detail loss that other more common pixelization implementations may have.
- Quantized color palette:
- Snapping the colors towards the closest ones in a color palette, adding a bit of dither and mixing between the original and the new color using the exposed settings.
SSAO and FXAA
- SSAO is implemented in a standard fashion using hemispheres to check against geometry.

- FXAA is implemented as the industry standard in order to fix some of the aliasing problems.

Volumetric dynamic fog
- Implemented using screen space ray marching
- Volume density is computed using 3D noise with a simple hash function in the shader at runtime
- The effect is fully dynamic using SDF functions to control the density that we sample
- The player affects the density as he dashes trough it
- Shooting through the fog will create bullet holes
- The rendered fog is fully reactive to all of the point lights in the scene
- Highly optimized running at under 1ms on my laptop (RTX 3060 GPU)

Procedural skybox
- The dynamic skybox is generated as a screen space effect.
- 3D perception is calculated using rays projected into the world using the screen's UVs and the camera data
- Sky is rendered when the rays are higher than 0 on the Y axis and water is rendered when the rays are less than 0 on the Y
- Using the depth buffer I make sure to render the effect only when depth doesn't exist to avoid rendering on geometry
- A foggy interpolation is applied near the horizon line to blend between the sky and the water to achieve a seamless transition
- Sky implementation based on: https://www.shadertoy.com/view/wslyWs
- Water implementation based on: https://www.shadertoy.com/view/MdXyzX
Screen door transparency
- Worked on screen door transparency implementation
- Used it as enemy death effects
Debug renderer
- Created a vulkan debug line rendering pipeline.
- We can push 3D lines positions towards this pipeline to render them.
- Jolt Physics pushes its debug lines in our debug renderer too, allowing for collision visualizations, ray casts etc.