Graphics Programming weekly - Issue 61 — November 4, 2018

An Adaptive Parameterization for Efficient Material Acquisition and Rendering

  • 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

halcyon + vulkan

  • 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

2d graphics in Rust discussion - A look at GPU memory management

  • 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


  • open source path tracer implemented using the DirectX Ray Tracing API

16xAA font rendering using coverage masks, part I

  • 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

PIX 1810.24 – Support for final DirectX Raytracing API

  • new PIX version that supports the final DirectX Raytracing API version

NVIDIA Announces Nsight Graphics 2018.6

  • 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

Existing BC7 codecs don't handle textures with decorrelated alpha channels well

  • 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

profiling: the case of the missing milliseconds

  • 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

Effectively Integrating RTX Ray Tracing into a Real-Time Rendering Engine

  • 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

large scale ambient occlusion: eliminating light leaks

  • 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

SPIR-V Compression: SMOL vs MARK

  • 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

Custom Shaders HLSL and Core Library

  • 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

Introducing Zink, an OpenGL implementation on top of Vulkan

  • 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

Graveyard Keeper: How the graphics effects are made

  • 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

niagara: Tuning mesh shaders

  • optimizing mesh shading pipeline, can now reach >20B triangles/second (input triangles, before cone culling)

niagara: Multi draw indirect

  • adding per object transformation and depth buffer support
  • switched to using multi-draw indirect for classical and mesh shader based pipeline

If you are enjoying the series and getting value from it, please consider supporting this blog.

Support this blog