- implements foveated rendering through usage of log-polar transformation
- gbuffer is written as normal, attributes transformed into sub-resolution textures using a log-polar transformation
- shading is done in log-polar space before the results are transformed back into Cartesian space
![foveated_rendering.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/foveated_rendering.png&key=6c19329ef799bc76855377a083fb1d180a4ee6fb8551ffa57d068cbca711bcda)
- Intro to sampling theory and how different sampling patterns influence the aliasing that can be observed
- explanation of why the default D3D11 MSAA has been chosen
![sample_patterns.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/sample_patterns.png&key=d29c834c259a55d15142d9c8d5680c269137e85083185ceca8e86d67f2139357)
- description of a shader effect that dissolves triangles outside of a spherical effect range
![spherical_mask_dissolve.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/spherical_mask_dissolve.png&key=0dce3f79616a726353885aac6df189dd4b5b154dbe4a7e6d2a621b87df445c5d)
- slerp between two orientations takes the shortest path on a 4D hypersphere
- author wants the shortest arc in 3D instead
- decomposes rotation into swing and twist operations
- these are interpolated independently and concatenated to form the final rotation
![sterp.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/sterp.png&key=0e134a4981d9a025eaae9c104fe80ab5c64bf419a730b0868dce4cc2391eb1ef)
- start of series that will look at lack of multi scattering in common analytical BSDFs and solution
- only modelling single scattering causes significant energy loss on rough surfaces
- post shows visual example that up to 60% of energy can be lost
![heitz_ss_wf.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/heitz_ss_wf.png&key=155b01297f8a3266ed074b18e48f4d6b8875d4ad4f6bb216014d41ea1a639bb8)
- derivation of the multi-scattering GGX BRDF
- provides source code and precomputed lookup tables
![MSBRDFOrenNayarFullRho.jpg](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/MSBRDFOrenNayarFullRho.jpg&key=bc25a825b891989fa5b503c746e4f4bf025dcd7d1d1d1ca6b38be5a80837178f)
- explains what shader variations are
- how to compute the amount of variations created for a shader
- how unity decides what variations to include
- Unity 2018.2 beta adds the possibility to control shader variation compilation from a C# script
![unity_variation_stripping.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/unity_variation_stripping.png&key=0a5708e53b23afe951bf41ac9f7ee8dac916c714d5daac7fc3e7b46bf2daccc0)
- new image diff option allows visualization of pixel difference between compressed / uncompressed textures
- adds model optimizations (vertex cache, overdraw, vertex prefetch optimizations)
- draco compression support
![mesh_optimization.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/mesh_optimization.png&key=076e5692db3e02f1607b8a12112ad6f8215ce3a70a5bdf4d4e02edd4d94c409c)
- tool that allows to only include vulkan functionality that you need
- comparison of header sizes and influence on compile time, startup time
![compile_time.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/compile_time.png&key=ee89c4665e8e22b79c06ff3cdb5a992d63debba44aaaef18d4767dc268e000fb)
- introduction into vectors as functions and dual space
- how to transform dual vectors
![linear-form-1.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/linear-form-1.png&key=594bc280e3c19ae4465adcd80a73016da6486255744347b00c455c678911b669)
- uses ShaderGen to write shaders in C# and compile them into the target shader language for D3D11, Metal, OpenGL and vulkan
![ToyPathTracerOutput.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/ToyPathTracerOutput.png&key=2e43ada88f7fe7cf4750cc55866b1c5e1b15f969be6509a7a400d7a201f68607)
- website that allows compilation of shaders with a multitude of shader compilers and inspect the available outputs
- possibility to chain compilers together
![shader-playground-compiler-chaining.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/shader-playground-compiler-chaining.png&key=5d04ee3140c1aed4ae6c80b9bc734b627dffc487a56ebd02ad34de932b3760d5)
- tutorial how to use the VK_EXT_debug_utils extensions
- combines old debug extensions into a unified one and adds more possibilities
- allows more details to be reported from the validation layer and tools that support the extension
![vulkan_debug_utils.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/vulkan_debug_utils.png&key=bd950bc36a8ffb1b4016cd57cda0e453c1f3ad72170db0af8986e0dea6f50317)
- technical details about the font rendering algorithm used in slug
![slug_icons.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/slug_icons.png&key=a5feb77f50e9e398422cf5845045598d2dedf5c07db88552c47f1c46e0c3c74c)
- presents one method to derive the slerp formula for quaternions
![slerp_derivation.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/slerp_derivation.png&key=0a7deddb088f222fcf802887e13bc61ebeb6612e95f6093200a635f87a23957c)
- discusses issues with composability, how complexity poses a problem of sharing research results
- list of frameworks for research
- how the scriptable render pipeline of unity allows more flexibility and still hides most of the complexity
![unity_splits.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/unity_splits.png&key=3b1364996333022197a3ef39bbfdd0eea99972b8c4ed1370ae8d11a0284b41cf)
- discusses problems with using a texture atlas
- set of scripts to help with the creation, management and usage of texture arrays in unity
![batches.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/batches.png&key=8c44da3ff936b5e79b925aba8b43568e56b343e33be70de7ac3d770b0b2aa674)
- technique that helps to reduce problems of disappearing geometry for alpha tested geometry
- no runtime changes required, only changes the way mips are generated
![alphadist_comp1a2c_small.png](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/alphadist_comp1a2c_small.png&key=deaebf6631456388bc721c67260439d7e5e9c5621f2b75dc788354e6f5727013)