- new shader stages on Turing that allows the generation of primitives for direct consumption by the rasterizer
- task shader: emits mesh shader workgroups
- allows work on larger clusters, the selection of mesh resolution, …
- mesh shader: generates primitives (index + vertex buffers)
- OpenGL shader implementation that uses the new shader stages to allow culling on a per-cluster basis and generation of efficient mesh data
- video recording
![turing_mesh_shader.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/turing_mesh_shader.png&key=0e9f758d96f47c1f62f39a08bc22565e3f71a458dd9321a4f981fbf88364187c)
- talks about the challenges of developing for open world games
- covers water rendering, physically based time of day model, nighttime rendering
- lighting, exposure, emissive effects, and tone mapping
- material blending
![fc5_open_world.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/fc5_open_world.png&key=70a64eb64981ab866b6e422db8393db45685fdda0eacc36412b82ee55b96f973)
- a new algorithm to compute the intersection point and surface normal of an oriented 3D box without precomputations or spatial data structures
- uses rasterizer pipeline to generate screen-space AABB to limit tests to only potentially visible pixels
- provides GLSL shader implementation
![ray_box_intersection.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/ray_box_intersection.png&key=f9fc23c020fc636b05256aa53b0659da87b2758fdc212eb06446444365fb74f3)
- explains the evolution of the windows graphics driver model from win7 to win10
- how WDDM 2.0 enables the features of D3D12
- differences between D3D12 and Vulkan regarding queue submission design
- D3D12 fences are designed to enable the OS to control command buffer scheduling
- look at Nvidia and AMD hardware details
![amd_command_processors.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/amd_command_processors.png&key=c113694a6c657b3772fa039fcecf87249305cffa96bbda193aa663f4ae7f0324)
- explains optimizations done to the hybrid shadow raytracer
- change to the way the BVH layout is constructed (Surface Area Heuristic) and memory layout changes enable huge speedups (16ms to 0.8ms on the GTX970)
![bvh-with-sah-heatmap.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/bvh-with-sah-heatmap.png&key=75a65c601762c2f2a0d4205841176f00bf16ce95c290a2c2fb86bf5140729e1a)
- overview of the new Turing hardware architecture
- description of new hardware features, exposed shader features, and improvements to existing technologies
![turing.jpg](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/turing.jpg&key=cfce9d04401bc17fc9734edb1003b40c3c2ddbf96194bb16c4eeff69edb9271b)
- an extensive list of OpenGL and Vulkan extensions that expose the new Turing hardware features
- with short descriptions of each feature
![variable_rate_shading.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/variable_rate_shading.png&key=d31f045bb927b814da4f9a322e470d1d8b01a46053cbcc34cb681b4b5ec9d6b8)
- Vulkan extension that makes it possible to skip parts of command buffers based on the content of a GPU buffer
- the example uses this to pre-generate a single command buffer and controls visibility of mesh parts from the CPU
![vulkan_conditional_rendering.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/vulkan_conditional_rendering.png&key=6036c2625f491b91e652c92716a0c1d7d99d4e56499d0b7930e4ccab038f3c5e)
- overview of the interior mapping technique
- showcase of different implementations and links to further information
![Interior_Mapping.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/Interior_Mapping.png&key=ef21ced638006a4c623b433eaf3a4948b94ac9b2e363acefbc7a2eda6cba48a3)
- discussing of a technique that tries to preserve normal map variation by generation MIPs that preserve the variance in the roughness map
- the comments contain links to further reading about this topic
![roughness_normal_map.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/roughness_normal_map.png&key=d121a8619748eb87dde89a851e103a096507fd1c9e882f7a8dea6d37123dde31)
- comparison of DXC (DirectX Shader Compiler) and FXC shader compiler in regards to performance and functional regressions
- provides a docker file that allows FXC to run successfully
![fxc_docker.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/fxc_docker.png&key=ec7ff317596d838dc0d951398ddd3ef7bb7db651be7ab04d4d8386d5628a7c69)
- provides a configuration that allows the DXC compiler to run within docker
- explains the process that enables DXIL shaders to be signed after they have been compiled
- provides code for detecting if a shader has already been signed and how to call the necessary libraries to sign the shader
- provides a command line utility that can be used to sign DXIL shaders
![dxil_signing.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/dxil_signing.png&key=a8bb58ba41274d3c11e095c76e87f6cd935aa465788ece5f4a3a7abb6b7c515c)
- start of a series of posts that will describe the development of a ray tracer using Metal Performance Shaders
![metal_ray_tracer.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/metal_ray_tracer.png&key=833330313a4eb5fb6acfd7e16ef4614e64e52644a2edf8ec45c0fe006c71169b)
- Khronos released provisional material on the memory model for Vulkan
- including the specification, extensions for SPIR-V, GLSL and conformance tests
![vulkan.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/vulkan.png&key=321651968fe5dd73339ce17379826a4157056d9d468b1ff49bb26b3249d00dc4)
- presents a small cross-vendor library for D3D12 that allows collection of information to narrow down GPU hangs to specific draw call ranges
- looks at the state of integration of the Vulkan swap chain with different OS and GPU vendors
- explains the expected API, what is required for a good experience and how the implementations differ between platforms
- discusses challenges and possible solutions to undersampling artifacts on curved geometry
![cup_tesselation.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/cup_tesselation.png&key=869daa1f9fba659365d8a74822836a2a447851bf77e9b0038f8a75c83034fbcf)
- links to the presentations from the machine learning and rendering course from Siggraph
- an interview that explains what Nvidias DLSS is (Deep Learning Super Sampling)
- a trained neural network that is able to infer a 64 sample per pixel supersampled image from a 1 sample per pixel source
- the model is trained on Nvidia GPU clusters before the release of the game
![DLSS1.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/DLSS1.png&key=2f5c8eade67f77abeb9b470e75124f0c60d95bac1e0e691fb82d259997337acb)
- extends the Perlin noise implementation from the previous tutorial to support mixing of multiple layers of Perlin noise
- uses this to generate a dynamic terrain in a vertex shader
![layered_noise.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/layered_noise.png&key=89bc091e3d6a140e7f918e5ecb898267cafea6c6d1027b4ee58ae79591fe7da0)
- explains how Unity command buffers enable the extension of the Unity graphics pipeline
- uses this to implement selective bloom on objects
![selective_bloom.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-55/selective_bloom.png&key=9cfa24ebc2d28f4d7f7edad6bd10d37c824f284c73e0274bc95df3c1f65f12a3)
If you are enjoying the series and getting value from it, please consider supporting this blog.
Support this blog