Graphics Programming weekly - Issue 54 — September 2, 2018


I am going to be on vacation for the next two weeks so this series will take a small break and will return on September 24th.


Pseudo-bandlimited pixel art filtering in 3D – a mathematical derivation

  • presents a filtering approach for a pixel art style in a 3D environment
  • discussion of filtering theory and derivation of a filter for real-time use
  • provides GLSL implementation of the filter


Spotlight Team Best Practices: Setting up the Lighting Pipeline

  • in-depth documentation for Unity
  • explains the most common terms, the difference between the rendering pipelines with strengths and weaknesses
  • explains the difference between global illumination systems and light modes
  • provides 4 example scenarios that show how the desired game influences the decisions


Real-Time Ray Tracing of Correct* Soft Shadows

  • shows how to reformulate the rendering equation so that stochastic shadows can be combined with non-stochastic shading
  • explains how to denoise the stochastic shadows
  • shows results and discusses the performance of the approach


API without Secrets: The Practical Approach to Vulkan* Preface

  • start of a new Intel series about Vulkan
  • the focus is on the high-level usage and will be comparing different approaches to common problems
  • walkthrough of the structure of the series and how the sample code will be structured


API without Secrets: The Practical Approach to Vulkan* - Part 1

  • investigates the performance effect of different acquire → render → present approaches
  • shows visually why two sets of frame resources are required to utilize the available hardware efficiently
  • the sample allows experimentations with different scene complexities and CPU workloads


Device Memory Management

  • explains the strategy how GPU memory is currently managed and what allocation strategy is used
  • shows a visual representation of allocator usage and discusses the weaknesses of the current approach, pointing to possible future improvements


Animated Candle Flame write-up

  • tutorial on how to implement a candle flame using 3 separate texture channels and noise distortion using Unity

Reverse engineering the rendering of The Witcher 3, part 5 - drunk effect

  • discusses how the drunk effect in “The Witcher 3” was implemented based on reverse engineering the D3D11 shader disassembly
  • provides the reverse engineered HLSL source code


hacking a generic ray-triangle intersector

  • reusing a generic ray-triangle intersection for other calculations such as calculating the distance from a ray to a curve segment


Looking Through Water Underwater

  • Unity tutorial that extends water with flow map (previous part of the series) to support transparent water rendering
  • apply underwater fog and approximation of refractions

Large scale ambient occlusion: introduction

  • overview how the large-scale ambient occlusion data is baked for Homefront: The Revolution
  • implemented using rasterization with an orthographic projection and per-pixel linked lists
  • runtime information stored in regularly spaced cells

Baking artifact-free lightmaps on the GPU

  • article discussing what is required to achieve high-quality lightmaps
  • UV space rasterization, using a UV G-buffer to collect necessary information to trace rays
  • dealing with shadow leaks and UV seams
  • an algorithm to enable mipmap generation for lightmaps


Why Clip Transformed Vertices in Clip-Space?

  • explains why clipping happens in 4D clip space before the perspective divide is applied


Siggraph 2018: A developer’s viewpoint

  • blender developers view of the technologies shown at Siggraph
  • talking about USD / Hydra, MaterialX / ShaderX / OSL / Gaffer and OpenColorIO

An edited (and extended) version of my OSL BOF talk at SIGGRAPH 2018

  • overview of the open shading language in 3ds Max
  • how OSL was implemented into the 3ds max architecture
  • discusses problems encountered and improvement possibilities for OSL

Contact-hardening Soft Shadows Made Fast

  • explains what contact-hardening shadows are
  • presents one technique that can be used to implement them and deal with artifacts
  • discussions of a method to optimize the process by splitting the shadow mask generation into two passes
  • the first pass generates the penumbra mask at a quarter resolution and the second pass generates the soft shadows, sampling from the quarter resolution penumbra mask


High-Performance Graphics 2018

  • the slides for all talks from the High-Performance Graphics 2018 conference have been uploaded


Radeon GPU Profiler 1.3

  • can now show register and LDS (Local data share) usage as well as theoretical occupancy
  • new render target overview table, provides information about all render targets in the frame in one location
  • more robust handling for applications that create multiple device contexts

GBuffer helper – Packing integer and float together

  • explains how to pack an integer and a floating point number into a single unsigned render target channel
  • provides source code for packing and unpacking into a variable number of available bits

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

Support this blog