Graphics Programming weekly - Issue 33 — April 8, 2018

Breaking down barriers – part 2: Synchronizing GPU threads [wayback-archive]

  • explanations of barrier behaviour on a simplified GPU model
  • how split barriers help to increase GPU utilization

Color: From Hexcodes to Eyeballs [wayback-archive]

  • in-depth introduction into light theory, human perception, color spaces and gamma correction

One Mesh To Rule Them All [wayback-archive]

  • same assets used on PC/mobile/consoles
  • limits the LODs based on the target platform
  • creates clusters of nearby objects, generate proxy geometry from these clusters

Improved Lerp Smoothing [wayback-archive]

  • classical lerp is frame rate dependent, hard to tweak
  • improved version that solves these problems: value = lerp(target, value, exp2(-rate*deltaTime))
  • how to convert from classical lerp

Normals and the Inverse Transpose, Part 1: Grassmann Algebra [wayback-archive]

  • introduction into grassmann algebra
  • explanation of vector, bivector, trivector and wedge product
  • derivation of a more geometric understanding about the behaviour under transformation

Combining Analytic Direct Illumination and Stochastic Shadows [wayback-archive]

  • split into unshadowed illumination and illumination-weighted shadow
    • unshadowed areas are noise free, only shadowed areas use stochastic ray tracing and need denoising
  • discussions of denoising techniques

Memory Mapping on Windows (including Benchmark) [wayback-archive]

  • overview of memory mapping on windows
  • benchmark of different techniques
  • using MEM_RESET allows the OS to lazily unmap pages

Rendering in the DirectX Shader Compiler Editor [wayback-archive]

  • tool to allow compilation of shaders, inspection of AST and disassembly
  • renderView allows execution of draw/dispatch, could be useful for prototyping

Viewing Optimization Passes in the DirectX Shader Compiler Editor [wayback-archive]

  • allows display of optimisation passes
  • change setup of used passes, ordering and parameters

Barycentrics [wayback-archive]

  • demo application that shows 5 ways to get Barycentric coordinates
  • large variation in performance between the different approaches

Ray Tracing with the DirectX Ray Tracing API (DXR) [wayback-archive]

  • concerns about a blackbox raytracing API and the quality of drivers

Vulkan bindless extensions [wayback-archive]

  • descriptors can be updated after they are bound to a command buffer
  • relax requirement so that descriptors that are not accessed can be invalid
  • allow variable size bindings in descriptor set layout
  • GL_EXT_nonuniform_qualifier allows indexing into resource arrays which differ within the same draw call

GDC Retrospective and Additional Thoughts on Real-Time Raytracing [wayback-archive]

  • quick overview about the content of the SEED raytracing presentation at GDC
  • sees the future to be about trade-offs between noise, ghosting and performance
  • allows comparison against ground truth
  • allows researchers to implement techniques using a common API


  • library that provides a C reflection API for SPIR-V shader bytecode

Why every gfx/CV/robotics programmer should love SymPy (Part 1) [wayback-archive]

  • 2 case studies of how to use SymPy

Daily Pathtracer Part 5: Metal GPU! [wayback-archive]

  • experience of porting the pathtracer to metal with performance numbers and problems encountered

(Demoscene) Revision 2018 [wayback-archive]

  • videos of the demos shown at revision 2018