Graphics Programming weekly - Issue 22 โ€” January 14, 2018


The Rendering of Middle Earth: Shadow of Mordor [wayback-archive]

  • gbuffer breakdown
  • blood rendering as gbuffer modifier
  • tessellation
    • uses a point cloud as input and a tessellation shader calculates the polygons
  • SSAO has two distinct channels that get applied to specular and diffuse separately
  • top-down projection texture used to add extra information to sun lighting
  • static lighting uses a light volume texture
  • Rayleigh + Mie scattering system for atmospheric fog
  • alpha blended objects are rendered directly to the Low Dynamic Range (after tone mapping)
  • gpu based rain system
  • two bloom systems, one applied to everything and a radian blur that is only applied to the sky
  • UI is rendered into a separate render target and blended with the 3D scene

Reverse Z Cheat Sheet [wayback-archive]

  • reverse depth buffer from [near=0 to far=1] to use [near=1 to far=0]
  • how to adjust the projection matrix
  • what changes are required in addition to this
  • how to linearize depth buffer values without a matrix multiplication

Optimizing tile-based light culling [wayback-archive]

  • problems of frustum-sphere culling
    • refine with AABB culling
  • improve depth discontinuity with bitmasks to detect lights not hitting any geometry
  • spot light culling
  • decal probe box
  • other performance considerations

Optimization with Radeon GPU Profiler - A Vulkan Case Study

  • overview of different views
  • high level view of GCN hardware
    • wavefronts, latency hiding, occupancy
  • detect pipeline stalls
  • read the pipeline state view to get details about pipeline statistics
  • detect opportunities for async compute

Fixing Camera Shake on Single Precision GPUs [wayback-archive]

  • 100x100 km chunks with 1 cm precision in 32 bits
  • problem once 1 cm of world space > 1 pixel on screen
  • using doubles on the CPU for transforms
  • change order of operation to apply an offset (single subtract) to bring the mesh close to the camera before rotation is applied
    • this offset updated infrequently

Study Notes: Improved Ambient Occlusion

  • computes error introduced by approximations vs results from path tracer
  • fits a curve to this error, and uses this curve to compensate for the error in the original approximation

Perceptually uniform color space for image signals including high dynamic range and wide gamut [wayback-archive]

  • overview of existing color spaces
  • comparison against new proposed color space

Indirect illumination using cubemaps [wayback-archive]

  • explanation of how indirect illumination is stored in cube maps
  • including interactive diagrams to explain the principles

Next power of two in HLSL [wayback-archive]

  • how to calculate the next larger power of two with bit level instructions

Cloth Shading [wayback-archive]

  • comparison of the Ashikhmin sheen and Imageworks Charlie sheen
  • including shader toy implementation

Screen Space Path Tracing โ€“ Diffuse [wayback-archive]

  • ray marching against depth buffer
  • on hit fetch light re-projected from previous frame
  • denoising with temporal re-projected filter + smoothing groups + temporal AA

Alternative definition of Spherical Harmonics for Lighting [wayback-archive]

  • explanation of the math for Spherical Harmonics
  • simplified definition by specializing for the use case required for lighting (but not limited to it)

Converting SH Radiance to Irradiance [wayback-archive]

  • use definition from part 1 to convert radiance (incoming light) to irradiance (outgoing bounced light)
  • improving the conversion with a non-linear reconstruction

Moment-Based Methods for Real-Time Shadows and Fast Transient Imaging [wayback-archive]

  • summary of the theory of moments from mathematics
  • replacement for inverse Fourier transforms of positive functions with many benefits
  • techniques for opaque and translucent occludes, soft shadows and single scattering
  • filterable shadow maps using 64 bits per texel compared to other filterable techniques
  • more efficient at high resolutions compared to classical shadow maps

meshoptimizer v0.7 released

  • index buffer compression added
  • index buffer to a triangle strip conversion added
  • quantize float option added
  • improvements to exisiting analyzers

Making floating point numbers smaller [wayback-archive]

  • how to reduce the precisions of floats (so that they can be compressed better)