- many optimization lessons learned for mobile
- how to deal with shader preloading
- discussion of error detection in automated image comparison tests
- increased game brightness to reduce the use of display backlights to save battery and reduce heat
- using raytracing to remove aliasing in special cases
- improvements to blue noise algorithm
![inside.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-40/inside.png&key=b1800ea114a7d653c450d591464dc0a8a7cf89ccf5e0a2cb99241e133b0cf633)
- discussions of problems with old occlusion culling systems
- renders occluders in a pre-pass, uses the depth information to cull instances
- how to implement culling against the depth buffer, remove culled instance from the stream
- stream compaction implementation
- extend the system to handle LOD, materials and manual vertex fetching
- performance results on Nvidia and Intel
![culling.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-40/culling.png&key=7aed7d70d676d44da8801fe82bd3eeb84774901e4c2c8fef834d59a22923d059)
- overview of how to generate a SDF in unity
- per object SDF at build time
- global SDF aggregation at runtime
![sdf.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-40/sdf.png&key=83efee4e86c389ff41c6b934377c9c7d1a34984ba6f4e8499b4cf9800cf57889)
- introduction to shaders workshop in Montreal
- focused on the node-based shader pipeline of Unreal
![shaders.jpg](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-40/shaders.jpg&key=2aaaa952b9a0928eecf8fec5dae215c1756c48a2f7b02d0472033ea4a1a80523)
- discussion of characteristics of different ways to pass CPU generated data to the GPU using OpenGL
- persistent memory (GL_ARB_buffer_storage)
- client arrays
- vertex buffer object (VBO)
- overview of SPH (Smooth Particle Hydrodynamics)
- how it’s implemented in a compute shader
- explanation of a sorted grid acceleration structure
![fluid.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-40/fluid.png&key=4a122dafed4999fd3df439ebf7a0b3e4278fa5ecd080ac9be28f8b723a7373e4)
- how the fractal raytracer was implemented on the GPU
- evaluating the fractal, ray marching and photon simulation
![rail.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-40/rail.png&key=7493b5311926f632a112ccca4cb416dd40d5d88c567b298fd77fb664d1b2f4f8)
- discussion of a unique art style rendering technique
- the character is represented from axis aligned voxels
- voxels are created/destroyed on a quantized world space grid as the character moves through the world
![character.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-40/character.png&key=62e8f2a4e9c1aaacb8861a248cefa54082b52f102bcd1fc5a5e38d8064c700bf)
- adds supports for a basic material system with lambert diffuse + phong specular
- explanation of importance sampling
![emissive.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-40/emissive.png&key=7734d05e34ba02ec2a26a4b68c6e2b1ee0b47d719306e3df6cb5bbdc1f476500)
- list of resource for beginners into graphics programming
![tweet.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-40/tweet.png&key=4534f855ad3c9e03bfae3a7ac92e3767e2cb25bcf7fa8adc20f7e6f304d970d8)
- implementation details for reflections, translucency, transparency, shadows
- global illumination uses surfels with world space accumulation
![pica.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-40/pica.png&key=e18603ba1644a678b7dd3ad943b5b3d7490fe72db40bdad200e2301685b9d3d2)
- explanations of how to get started with shader programming with unity
- takes the unity toon shader as the starting point to explain concepts and provide a gentle introduction into making modifications to it
![shader.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-40/shader.png&key=1312de66b9e9962acdfa5972dcf636b887b98814bd4acbb24a4cfbbef3e025b3)
- adds support for GPU tracking system that allows to enable/disable features based on the GPU used
![TheForge.jpg](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-40/TheForge.jpg&key=303ecab99be241a29516401f905d0a948824beb278c7a1f59070f3a6a4648241)
- now includes present events in the system activity view
- explanations for why the driver had to insert barriers
![gpu_profile.jpg](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-40/gpu_profile.jpg&key=26ae327e44b14aaca4dc12f9b9b7c204b30bb6d3dca78e42e783418c5922ac89)