- 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
![](/img/posts/graphics-programming-weekly-61/Dupuy2018Adaptive_teaser.jpg)
- 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
![](/img/posts/graphics-programming-weekly-61/halycon_vulkan.png)
- 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
![](/img/posts/graphics-programming-weekly-61/gpu_memory_rust.png)
- 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
![](/img/posts/graphics-programming-weekly-61/art_regular_grid_vert_mask.png)
- new PIX version that supports the final DirectX Raytracing API version
![](/img/posts/graphics-programming-weekly-61/pix_accel_view.png)
- 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
![](/img/posts/graphics-programming-weekly-61/nsight_vulkan.png)
- 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
![](/img/posts/graphics-programming-weekly-61/bc7_compression_problems.png)
- 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
![](/img/posts/graphics-programming-weekly-61/missingmilliseconds_10.png)
- 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
![](/img/posts/graphics-programming-weekly-61/ray_tracing_intro.png)
- 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
![](/img/posts/graphics-programming-weekly-61/room_volumes_portals.png)
- 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
![](/img/posts/graphics-programming-weekly-61/SMOL_vs_MARK.png)
- 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
![](/img/posts/graphics-programming-weekly-61/cubes-spheres.png)
- 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
![](/img/posts/graphics-programming-weekly-61/zink-architecture.png)
- 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
![](/img/posts/graphics-programming-weekly-61/Graveyard_tod.png)
- optimizing mesh shading pipeline, can now reach >20B triangles/second (input triangles, before cone culling)
![](/img/posts/graphics-programming-weekly-61/niagara_mesh_shader_kittens.png)
- adding per object transformation and depth buffer support
- switched to using multi-draw indirect for classical and mesh shader based pipeline
![](/img/posts/graphics-programming-weekly-61/niagara_multi_draw_indirect.png)
If you are enjoying the series and getting value from it, please consider supporting this blog.
Support this blog