- paper on BRDF measurement which proposes a new parameterization that adapts to the behavior of the material
- able to significantly reduce the number of samples required
- published a new large database of measured BRDFs that have been captured using this technique
![Dupuy2018Adaptive_teaser.jpg](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-61/Dupuy2018Adaptive_teaser.jpg&key=dfc00768d603722d55d8dce3a17eff202d5ba30f574645f6408d67b8fe24d6d2)
- presents an architecture overview of the engine
- render backends are implemented as DLLs that can be reloaded at runtime
- multiple backends can be loaded at the same time
- resource handle system that allows the same resource to point to physical instances on multiple GPUs
- GPU work is recorded into an abstract command stream that is later compiled into API specific format
- render graph system that manages resource transitions, lifetimes, and execution order
- showcase of shader binding model
- using HLSL spaces concept to separate between update frequencies
- explanation how the HLSL resource binding model was emulated with SPIR-V using shader patching
![halycon_vulkan.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-61/halycon_vulkan.png&key=9f0e8aa414a315826c0e069f27ddf1590fc05aa82fdd157c96a98bdc3ff63f4c)
- discusses considerations when designing memory components for use with gfx-hal (rust graphics API abstraction)
- proposes not to use a general purpose allocator but instead to implement simple allocator components and combine them into context-aware allocators on a higher level
![gpu_memory_rust.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-61/gpu_memory_rust.png&key=1811ce21e0f2b637cf20f1289d1cdc6ac9bf4396c7e685763adbdda321ff8ea2)
- presents a technique for font rendering that operates on coverage instead of visibility
- this allows fonts to remain sharp when moving on the screen and at varying font sizes
- for each pixel in a glyph, a 4x4 sub-sample grid of visibility samples is calculated ahead of time
- explains how to use this coverage mask to implement font rendering
- covering how to sample the coverage mark correctly for axis-aligned font rendering
![art_regular_grid_vert_mask.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-61/art_regular_grid_vert_mask.png&key=0885d19c235c7befa14310f7c9ee5b2306066796e4ea016a2e4c7b4ae56daaa1)
- new PIX version that supports the final DirectX Raytracing API version
![pix_accel_view.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-61/pix_accel_view.png&key=6c3b8ec6ecd887c9f384b38bf8b572a75d3d248e63e23022a8429118b9c7c4f2)
- full Linux support for Vulkan and OpenGL 4.5
- support for final DirectX Raytracing API and new supports Vulkan extensions such as VK_NV_shading_rate_image, VK_NVX_raytracing
![nsight_vulkan.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-61/nsight_vulkan.png&key=46d826ed5d8a38ab0c1233120a59602ac4ebc8386bfd73a1c06188568211e047)
- shows that BC7 encoders produce compression artifacts when the alpha channel is unrelated to the RGB channels
- presents a heuristic to decide what BC7 mode to use on a per-block basis to improve the compression
![bc7_compression_problems.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-61/bc7_compression_problems.png&key=07618a8bd3838484afa52e29ee2e371874b0bff215e7539232601679ec338c78)
- case study of a performance regression in League of legends
- presents what performance data they collected
- shows what problems they had with the existing data and how a better aggregation of performance data into distinct buckets allows better detection of performance regressions
![missingmilliseconds_10.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-61/missingmilliseconds_10.png&key=69566e9c2e1b4775baa962de3311f17af6b5c5cc12987e3dfaa846062443bbf9)
- provides best practices for applications that use the RTX API
- talks about acceleration structure creation and updating
- how to improve memory usage, improve performance and best practices for shader authoring and compiling
![ray_tracing_intro.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-61/ray_tracing_intro.png&key=8de4d686496586811d06d721a9d852ccb4da7664acb82fed8857a0c0096de43b)
- presents how to reduce light leaks in a large scale global illumination system
- each geometry is associated with markup information about visibility zones
- GI light data is only applied if two pieces of geometry are in the same visibility zone or are visible through connected portals
![room_volumes_portals.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-61/room_volumes_portals.png&key=a7b185e24d2d0eb818251dc913c18692673db548226c1134f6f386157a34bb19)
- comparison of two libraries to compress SPIR-V shaders SMOL-V MARK-V
- compares for compression ration, decompression speed, and library size
- MARK-V achieve great compression results, but the library has a large memory footprint and is slow at decompressing the data
![SMOL_vs_MARK.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-61/SMOL_vs_MARK.png&key=9e4b3fbc2a517f53d47013ec85adaf33360f0fef8e52b3290ff3c7c9c0adf562)
- a tutorial that explains how to create a custom shader for use with the scriptable render pipeline in Unity
- teaches how to interact with constant buffers
- presents what is required for GPU instancing to be supported by a shader and how to pass custom per-material data to the instanced meshes
![cubes-spheres.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-61/cubes-spheres.png&key=746cb923c6b0e73a6be9fb210aac3a53b9a1514b8626e5e7ae267412976dae39)
- mesa gallium driver that implements partial support for OpenGL 2.1, and OpenGL ES 1.1 and 2.0 on top of Vulkan
- talks about why this project was started, and what is and is not supported at this point
![zink-architecture.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-61/zink-architecture.png&key=a73c7d2e2248fef649e26853554f76d7ff686aa2f258d48f3686c3cc1ec87a8c)
- shows how the lighting system in the 2D game was implemented
- making heavy use of color remapping LUTs
- sprites have normal maps, lights move in 3D space with custom light falloffs for lights moving behind sprites
- discusses how shadows and fog are applied
- presents how a deformation shader is used to simulate wind
![Graveyard_tod.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-61/Graveyard_tod.png&key=62434549307164104dfb2f7f2f759d63fb3b6df38dc2d672c2a7c1666b5aaaeb)
- optimizing mesh shading pipeline, can now reach >20B triangles/second (input triangles, before cone culling)
![niagara_mesh_shader_kittens.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-61/niagara_mesh_shader_kittens.png&key=4048f0fd6fa8a84e3865ef1dc11fb93c43f563973de339eccbcadbac0c7ec12f)
- adding per object transformation and depth buffer support
- switched to using multi-draw indirect for classical and mesh shader based pipeline
![niagara_multi_draw_indirect.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-61/niagara_multi_draw_indirect.png&key=b460d083cc95b7cf0d6acd943b38c9cc41d1562b3dc57db2503fb1b1da3eb009)
If you are enjoying the series and getting value from it, please consider supporting this blog.
Support this blog