Graphics Programming weekly - Issue 18 — November 26, 2017


Decima engine: visibility in horizon zero dawn [wayback-archive]

  • seperate system for statics and dynamics
  • world broken into tiles
  • sort key is used to define clusters
    • lod ranges, filter masks
    • morton numbers for spatial partioning
  • tile/cluster culling on the CPU
    • launch one GPU culling job for each visible tile/cluster
  • gpu tasks use aggregated atomics to write wavefront results
    • one atomic operation per wavefront instead of per thread
  • description of batching strategies

Vulkan: Command Buffer Management [wayback-archive]

  • CommandBuffer used to record GPU work
  • each worker thread has one CommandPool which owns the CommandBuffer allocations
  • engine CommandBuffer
    • packs completed fence, target queue
    • Primary + secondary command buffers
    • resource descriptors
    • deleteted resources
  • once the fence is reached
    • resources are deleted
    • descriptors and command buffers are marked for reuse

Maximizing Unified Memory Performance in CUDA [wayback-archive]

  • on-demand page migration from CPU to GPU memory
  • linear arrays nearly 2x slower then manual pre-fetching of gpu data
  • number of page faults influences performance significantly
    • less page faults, better performance
  • how to structure code to achieve better asynchronous memory copy overlap

Stabel 1 pixel dithering [wayback-archive]

  • image rendered in greyscale
  • fullscreen pass applied to convert to 1-bit dithered image
  • discussion of different experiments
  • ended up using a dithering pattern mapped with 2x oversampling onto a sphere

Demystifying Floating Point Precision [wayback-archive]

  • how to calculate precision of floats
  • table listing the precision for half/float/double in different ranges
  • show precision loss problem with storing time as float

Neural 3D Mesh Renderer [wayback-archive]

  • 3D mesh reconstruction from a single image
  • applying 2D stylization from image to the 3D Mesh

Universal GPU texture format: DXT5 support [wayback-archive]

  • ETC1 to DXT5A conversion using a lookup table
  • discussion of results

Voxel Space [wayback-archive]

  • description and WebGL demo of the terrain system used in the game Comanche released in 1992

A better depth buffer for raymarching [wayback-archive]

  • single depth buffer value is not enough
  • need to know the depth of objects for correct effects
  • stores front and backface depth of objects in R and G channel and uses that to determine the thickness

Horizon: The Frozen Wilds PS4 Pro - Tech Breakdown and Engine Analysis

  • snow deformation, snow particles, animation adjustment
  • in-engine visualtions for AI
  • wireframe of character models
  • breakdown of light passes

Dissecting “Tiny Clouds” [wayback-archive]

  • breakdown and explanation of the Tiny Cloud shadertoy

Simple Curve Fitting with the Gauss-Newton Algorithm [wayback-archive]

  • explanation of how to use the Gauss-Newton Algorithm to derive an approximation to the Schlick fresnel formula

cr.h: A Simple C Hot Reload Header-only Library [wayback-archive]

  • open source system for hot reloading c code (written in C++)
  • supports rollback to old version if an error is detected
  • rewrites the .exe to point to the copied .pdb
  • uses a custom data segment to mark statics for copying
  • code is on github