Graphics Programming weekly - Issue 46 — July 8, 2018

Progressive Sampling Strategies for Disk Light Sources

  • comparison of combinations of six different sampling strategies for disk area light sources and 9 sample sequences
  • testing is done for wholly and partially illuminated regions
  • the best result could be achieved with the polar4 strategy introduced in this paper with well-stratified samples

Progressive Multi-Jittered Sample Sequences

  • introduction of new strategies to generate progressive(hierarchical) 2D sample point sequences
    • can be stopped at any point in the sequence and samples will still be well distributed
  • comparison against existing techniques, using many different distribution functions and shapes

HSV and HSL (colorpsaces XI)

  • explanation and derivation of the HSV and HSL color spaces
  • how to convert the color spaces to and from RGB colors

Hybrid raytraced shadows and reflections

  • implementation of a hybrid approach that mixes rasterization for first hit and raytracing for secondary rays
  • tracing against polygons using compute shaders directly (no raytracing API)
  • how to create a BVH structure and traverse it
  • details about how to raytrace for shadows and reflections
  • look at the performance, mainly memory bound

Breaking down barriers – part 4: gpu preemption

  • provides an overview of GPU preemption strategies and how these affect application responsiveness and latency

Pathtraced Depth of Field & Bokeh

  • explains the physical properties of cameras, starting with a pinhole camera model
  • shows the effect of changing focal length, aperture radius and how to implement this into a raytracer
  • extending the concepts into a lens based camera system

Rules of optimization

  • explanation of performance culture, a working culture that treats performance as a core feature
  • designed from the beginning and it’s everyone responsibility to uphold it

Porting your engine to Vulkan or DX12

  • video and slides from a talk that explains lessons learned from porting an AAA engine to Vulkan
  • recommendations for memory, descriptors, command buffers and barrier management
  • a short overview of frame graph architecture to achieve better barrier usage

DD2018: Tomasz Stachowiak - Stochastic all the things: raytracing in hybrid real-time rendering

  • overview of the hybrid real-time rendering pipeline developed for PICA PICA demo
    • layered material model
    • transparency
    • translucency
    • shadows
  • an in-depth look at the reflection system and global illumination system

Introduction to compute shaders

  • how GPUs evolved from fixed function hardware to the uniform architecture used today
  • overview of concepts required to understand the programming model
  • how GPUs are able to hide memory latency to achieve higher throughput

TL;DR of the paper 'High-Performance Procedural Noise using a Histogram-Preserving Blending Operator'

summary of the paper “High-Performance Procedural Noise using a Histogram-Preserving Blending Operator” that was discussed in issue 45

How to start learning graphics programming?

  • steps that the author recommends programmers follow that are interested in getting started in graphics programming
  • from shadertoy (for instant visual feedback) to game engines to more low-level aspects of the implementation

DD2018: Sebastian Aaltonen - GPU based clay simulation and ray tracing tech in Claybook

  • overview of the SDF storage system
  • how the world space SDF is generated from a list of brushes and how it is modified at runtime
  • how to raytrace against the distance field efficiently
  • soft shadows and ambient occlusion improvements
  • SDF → mesh conversion for moving particles

px_render.h rationale

  • overview of design decisions of single header low-level rendering API
  • comparison against bgfx and sokol_gfx

Vulkan layers don't work? Look at registry

  • windows registry contains entries for Explicit Layers (all layers that can be loaded by a process) and Implicit Layers (all layers that will be loaded automatically for every process)
  • sometimes these values will become corrupted