Graphics Programming weekly - Issue 55 — September 23, 2018


Introduction to Turing Mesh Shaders

  • new shader stages on Turing that allows the generation of primitives for direct consumption by the rasterizer
  • task shader: emits mesh shader workgroups
    • allows work on larger clusters, the selection of mesh resolution, …
  • mesh shader: generates primitives (index + vertex buffers)
  • OpenGL shader implementation that uses the new shader stages to allow culling on a per-cluster basis and generation of efficient mesh data
  • video recording


Challenges of Rendering an Open World in Far Cry 5

  • talks about the challenges of developing for open world games
  • covers water rendering, physically based time of day model, nighttime rendering
  • lighting, exposure, emissive effects, and tone mapping
  • material blending


A Ray-Box Intersection Algorithm and Efficient Dynamic Voxel Rendering

  • a new algorithm to compute the intersection point and surface normal of an oriented 3D box without precomputations or spatial data structures
  • uses rasterizer pipeline to generate screen-space AABB to limit tests to only potentially visible pixels
  • provides GLSL shader implementation

Breaking down barriers – part 5: back to the real world

  • explains the evolution of the windows graphics driver model from win7 to win10
  • how WDDM 2.0 enables the features of D3D12
  • differences between D3D12 and Vulkan regarding queue submission design
  • D3D12 fences are designed to enable the OS to control command buffer scheduling
  • look at Nvidia and AMD hardware details


hybrid raytraced shadows part 2: performance improvements

  • explains optimizations done to the hybrid shadow raytracer
  • change to the way the BVH layout is constructed (Surface Area Heuristic) and memory layout changes enable huge speedups (16ms to 0.8ms on the GTX970)


NVIDIA Turing Architecture In-Depth

  • overview of the new Turing hardware architecture
  • description of new hardware features, exposed shader features, and improvements to existing technologies

NVIDIA Turing Vulkan/OpenGL extensions

  • an extensive list of OpenGL and Vulkan extensions that expose the new Turing hardware features
  • with short descriptions of each feature

Vulkan conditional rendering

  • Vulkan extension that makes it possible to skip parts of command buffers based on the content of a GPU buffer
  • the example uses this to pre-generate a single command buffer and controls visibility of mesh parts from the CPU

Shader Showcase Saturday #9: Interior Mapping

  • overview of the interior mapping technique
  • showcase of different implementations and links to further information

roughness mip maps based on normal maps?

  • discussing of a technique that tries to preserve normal map variation by generation MIPs that preserve the variance in the roughness map
  • the comments contain links to further reading about this topic

Running Microsoft FXC in Docker

  • comparison of DXC (DirectX Shader Compiler) and FXC shader compiler in regards to performance and functional regressions
  • provides a docker file that allows FXC to run successfully

Running Microsoft DXC in Docker

  • provides a configuration that allows the DXC compiler to run within docker

Signing DXIL Post-Compile

  • explains the process that enables DXIL shaders to be signed after they have been compiled
  • provides code for detecting if a shader has already been signed and how to call the necessary libraries to sign the shader
  • provides a command line utility that can be used to sign DXIL shaders

Metal ray-tracer

  • start of a series of posts that will describe the development of a ray tracer using Metal Performance Shaders

Vulkan has just become the world’s first graphics API with a formal memory model. So, what is a memory model and why should I care?

  • Khronos released provisional material on the memory model for Vulkan
  • including the specification, extensions for SPIR-V, GLSL and conformance tests


Debugging D3D12 driver crash

  • presents a small cross-vendor library for D3D12 that allows collection of information to narrow down GPU hangs to specific draw call ranges


The state of Window System Integration (WSI) in Vulkan for retro emulators

  • looks at the state of integration of the Vulkan swap chain with different OS and GPU vendors
  • explains the expected API, what is required for a good experience and how the implementations differ between platforms

Smooth Geometry in Real-Time Rendering

  • discusses challenges and possible solutions to undersampling artifacts on curved geometry

SIGGRAPH 2018 Course: Machine Learning and Rendering

  • links to the presentations from the machine learning and rendering course from Siggraph

DLSS: What Does It Mean for Game Developers?

  • an interview that explains what Nvidias DLSS is (Deep Learning Super Sampling)
  • a trained neural network that is able to infer a 64 sample per pixel supersampled image from a 1 sample per pixel source
  • the model is trained on Nvidia GPU clusters before the release of the game

Value Noise

  • explains how to generate value noise in a shader

Perlin Noise

  • explains how to generate Perlin noise in a shader

Layered Noise

  • extends the Perlin noise implementation from the previous tutorial to support mixing of multiple layers of Perlin noise
  • uses this to generate a dynamic terrain in a vertex shader

Using Command Buffers in Unity: Selective Bloom

  • explains how Unity command buffers enable the extension of the Unity graphics pipeline
  • uses this to implement selective bloom on objects

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

Support this blog