Graphics Programming weekly - Issue 90 — June 23, 2019


Using AMD FreeSync 2 HDR: Gamut Mapping

  • explains gamut mapping techniques
  • difference perceptual and clipping techniques
  • shows how gamut mappings are derived

Reverse engineering the rendering of The Witcher 3, part 15 - fog

  • shows how the fog in The Witcher 3 has been implemented
  • combines aerial fog and an artist-controlled fog coloring based on a gradient from 3 colors (front to back)
  • uses AO information to darken the fog in occluded areas


SIGGRAPH 2019 Ray Tracing Roundup

  • list of sessions from SIGGRAPH 2019 that are related to ray tracing techniques


New Vulkan® Extensions in Driver 19.6.2

  • new extensions in AMD driver
  • VK_EXT_full_screen_exclusive, allows application to enter fullscreen mode such as IDXGISwapChain::SetFullscreenState
  • VK_EXT_separate_stencil_usage allows separate depth and stencil states
  • VK_AMD_display_native_hdr, better HDR support for FreeSync 2 monitors without requiring AMD libraries


PIX 1906.14 – GPU Timing in New Timing Captures

  • support for GPU timing data in the new timing capture view
  • a lot of GPU capture improvements


Glint Rendering based on a Multiple-Scattering Patch BRDF

  • new glint integrator for specular surfaces using multiple-scattering patch-based BRDF
  • addresses energy loss introduced from classical normal mapping
  • uses normal maps and second moments of slopes as in LEADR mapping


Announcing HighOmega v3.0 with RTX and Voxel-based Hybrid Path-tracing Support!

  • shows a new version of voxel-based path-tracing based graphics engine
  • provides an overview of the implementation


A Low-Discrepancy Sampler that Distributes Monte Carlo Errors as a Blue Noise in Screen Space

  • new path tracing sampler techniques
  • distributed per-pixel samples so that errors are distributed as blue noise in screen space
  • provides C++ source code
  • comparison against other methods at various sample counts


Distributing Monte Carlo Errors as a Blue Noise in Screen Space by Permuting Pixel Seeds Between Frames

  • the paper builds on the techniques described in the previous article
  • introduces a temporal algorithm that locally permutes the pixel sequences
  • improves error distribution for a series of frames


Vulkan Textures Unbound

  • describes how to support unbounded arrays of textures in Vulkan
  • presents two techniques to solve validation errors
  • first fills unused slots with a know valid texture descriptor
  • second shows the required extensions to enable partially filled descriptor sets


Spheretracing Basics

  • shows how to implement raytracing against a Signed Distance Field (SDF)
  • extends this to use sphere tracing


Interactive Generation of Path-Traced Lightmaps

  • a master thesis that describes a progressively path-traced solution for indirect illumination lightmaps on the GPU
  • covers parameterizing geometry into lightmaps, improving coherence in a path tracer, reducing variance and spherical basis functions
  • presents a new way to store diffuse and specular irradiance using an Ambient Dice encoding scheme (additional post below)


Spherical Radial Basis Functions for Lighting

  • explains how to extend the Ambient Dice basis function to store and evaluate both diffuse and specular irradiance


What's up with my branch on GPU?

  • explains how branching on GPUs is commonly implemented
  • explains what divergence is, impact on performance and how to reduce it
  • GPUs use an execution mask to hide results from inactive threads
  • shows how this looks in GCN ISA and AVX512


Normal Mapping Using the Surface Gradient

  • describes the surface gradient framework
  • a framework for robust processing of height maps, height volumes, and normal maps
  • explains the Preliminaries (Tangent Frame, Height Maps, and Volumes, Wrinkled Surfaces)


Thanks to Jon Greenberg for support of this series.


Would you like to see your name here too? Become a Patreon of this series.