- describes lookup table based (LUT) color grading in LDR color space
- shows how to represent the 3D color space in a 2D image
- LUT is embedded into the picture during color grading and later used to apply the transform at runtime
- walkthrough of the implementation using Unity
![colorgrading_lut.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-69/colorgrading_lut.png&key=0a8101fb922008323992123665fa2757ed68f4fc0f1cecc06cd99ea07e70ec71)
- explains how to port an existing iOS OpenGL application to use Metal
- shows everything required for a spinning 3D cube on screen
- including shader authoring, render pipeline creation, uploading of data from the CPU to the GPU and draw call execution
- providing resources for future steps at the end of the article
![OpenGLMetal.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-69/OpenGLMetal.png&key=ff5097bdca42fb96443a53575505163d582f93949fc00f8e587d921d5cd5578f)
- implementation of ray marching
- renders the back faces of the bounding volume to determine on which pixels raymarching needs to be done
- simplified absorption model, ignoring the scattering effects
- the vertex shader is used to calculate the ray direction and pass it to the pixel-shader
- lookup texture is used to color to the greyscale information from the 3D volume texture
![volume_rendering_webgl.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-69/volume_rendering_webgl.png&key=5f24d171523a8904d503baa93371d894ed6ef30192bee2c97ddaa2ea77647c46)
- cellular noise created from a quadtree grid structure
- presents a method that calculates the optimal order in which neighboring cells need to be visited in 2D
- introduces how to generalize this into higher dimensions and provides a python script can generate lookup tables to store the optimal visit order
- the technique reduces computation time by around 15%
![cellular_noise.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-69/cellular_noise.png&key=3bff7cd6a863e71fffa6d2cc7638bff3c978c61ca990854e2fff6cc2283d36ae)
- explains how the distant rain shafts in The Witcher 3 are implemented
- large cylinders in the distant use noise textures with UV distortion
- reading back the scene depth buffer is used to fade out the effect on distance objects
- reverse engineered source code provided
![rain_shafts.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-69/rain_shafts.png&key=a5d905746da3cc1d3df920e49d3c93b74a3caa875588cc45b848c0f6796713c9)
- the first book on raytracing “An Introduction to Ray Tracing” from 1989 is now freely available as PDF
![raytracing_book.jpg](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-69/raytracing_book.jpg&key=a483e64186eea3911dc79386078d8323a8c0717eafe8bb31576ade65eceb2da2)
- full path tracing implementation of Quake 2
- implemented Vulkan and the RTX raytracing extension
- uses an adaptive temporal filter for light transport paths to reduce noise
![q2vkpt_0001.jpg](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-69/q2vkpt_0001.jpg&key=4d1676759e473f54dc10b5b2ae48e1c326cff07ec6292f6e6599c31731a0b174)
- start of weekly curation of tweets about 3D (technical) art, shaders, and VFX
![tech_art_weekly.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-69/tech_art_weekly.png&key=462c818816020c10870917d4f6acded64daab67a52d09edf197c47406f5a1428)