Graphics Programming weekly - Issue 63 — November 18, 2018


Modern graphics abstraction and real-time ray tracing

  • overview of architecture
  • multiple render backends are supported at the same time
  • all GPU resources are referred to by a handle, resources can exist on multiple GPUs
  • overview of the high-level command system that is recorded and translated into native API command buffers
  • render graph system graph construction and execution
  • how to deal with multiple GPUs
  • virtual GPU system allows emulation of a multi GPU setup using a single GPU
  • proxy backend routes rendering calls to a remote machine for execution
  • a brief look at machine learning in a render graph architecture
  • overview of the asset pipeline
  • overview of hybrid rendering pipeline and how transparent shadows have been implemented using DirectX Raytracing
  • discussing open problems with ray tracing


Web High Level Shading Language

  • a new shading language, designed for use with WebGPU
  • discusses the constraints of targeting the web, and the ability to convert to Metal, HLSL, and SPIR-V
  • SPIR-V limitations also limit the expressiveness of WHLSL
  • memory safety for arrays, getter and setter support
  • does not support a preprocessor but instead uses a two-pass compilation model with specialization constants
  • bindless binding model is not supported


16x AA font rendering using coverage masks, part II

  • part 2 of the series on font rendering
  • shows the artifacts a regular grid sampling pattern causes and how a rotated grid improves the edges of glyphs that contain straight lines
  • explains how to sample the grid efficiently by splitting the rotation into one horizontal and one vertical skew
  • able to optimize the sampling by precalculating lookup tables


Microsoft's New Open-Source Project Is Shader Conductor For Cross-Compiling HLSL

  • new open source library from Microsoft that combines the DirectXShaderCompiler and SPIRV-Cross to convert HLSL shaders into OpenGL/Metal/SPIR-V or HLSL compatible with D3D11


A simple method to construct isotropic quasirandom blue noise point sequences

  • presents an approach to generate a quasirandom blue noise point sequence
  • shows the mathematical foundation, distribution analysis and comparison with other techniques
  • python code is provided to help with the understanding of the technique


Our Machinery Episode 3: Cross-Platform Graphics

  • podcast episode discusses how to design a cross-platform API, problems, and considerations
  • engine design is aimed at modern APIs, supporting older APIs is not a concern for “Our Machinery”


Reverse engineering the rendering of The Witcher 3, part 6 - sharpen

  • reverse engineering the sharpening filter from The Witcher 3 and explains how it works step by step
  • provides HLSL source code that produces the same assembly


There is a way to query GPU memory usage in Vulkan - use DXGI

  • shows that using DXGI functionality can be used to keep track of Vulkan memory usage on Windows
  • presents how to identify physical adapters between Vulkan and DXGI to deal with multi-GPU systems


Vulkan with DXGI - experiment results

  • experiments with using DXGI for memory reporting when using Vulkan
  • results are presented for the system using one AMD and one NVIDIA GPU
  • memory management behavior seems to be different between the vendors
  • DXGI appears to be able to report sensible application local memory usage information


Experimenting with VK_GOOGLE_display_timing, taking control over the swap chain

  • the extension allows the application to collect timing information from the presentation engine and schedule presents at specified times
  • the post presents results from experimenting with VK_GOOGLE_display_timing on Android and Mesa (X11)
  • list of issues encountered and possible points of improvement


How To: Data Lookups Via Raytracing

  • explains how ray-tracing could be used for arbitrary data-lookup in 2D and 3D
  • can handle more data points where the signal changes more rapidly
  • a texture has a fixed resolution and cannot adjust to varying density needs


niagara: Depth pyramid for occlusion

  • shows how to generate a depth pyramid for Vulkan
  • takes the depth buffer and produces a conservative mipmap chain
  • preparation for GPU occlusion culling in the next episode


niagara: Occlusion culling

  • implementation of GPU occlusion culling into the mesh-shader and classical rendering pipeline

Graphics Programming - Resources for Beginners

  • list of resources for beginners that are looking to get started with graphics programming

Task list for VK_EXT_scalar_block_layout

  • new Vulkan extension that allows usage of the C++ memory layout in Vulkan constant and structured buffers
  • this relaxes the alignment requirements

Recovering the Scale, Rotation and Translation Matrices from the Model Matrix

  • presents how to recover the scale, rotation, and position from a model matrix
  • rotation is retrieved as a rotation matrix


CppCon 2018: Valentin Galea “Rapid Prototyping of Graphics Shaders in Modern C++”

  • a presentation about the development and design of a C++ library implementation that allows GLSL shaders to run on the CPU


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

Support this blog