- 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…
- a technique that allows the generation of infinite output space from a small example texture (such a grass, snow) in a pixel shader only
- for example tillable terrain textures
- cheap to evalua…
- discusses problems with synchronization between unrelated work when using a single command queue
- showcases how two command queues can achieve better overall utilization at the cost of longer latency
- how to use two Vulkan queues to enable optimal scheduling for compute-shader based post-processing
- discussion how fragment → compute can introduce bubbles on the hardware
- uses two software queues with semaphore synchronizatio…
- this in-depth document (26 pages) covers how real-world measurement is used to achieve correct lighting in call of duty
- explanation of camera concepts
- getting relative EV differences between light and shadowed area…
- shader authors can define variations of shaders with a number of systems
- each system can inject code/resources/constants into the shader
- a material allows specifications of which shaders belong together, which systems they use and allow…
- many optimization lessons learned for mobile
- how to deal with shader preloading
- discussion of error detection in automated image comparison tests
- increased game brightness to reduce the use of display backlights to save battery and reduce heat
- using …
- 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 tr…
- experience of using vulkan with AMD drivers (stock and open source)
- comparison of register usage with different shader compilers
Vulkanised is …
- how the stylized vfx in Rime was implemented
- short overview of fire and smoke effect
- in-depth overview of the water rendering implementation
SPIRV-Cross - Reflection AP…
- summary of
- cloud modeling and authoring system
- lighting model
- high level overview of the implementation
Stratified sampling
- environmen…
- April 30th, Vulkan Developer Day in Montreal, hosted by Ubisoft
- UVs map into a gradient texture
- to change the c…
Exploring scriptable render pipelines in unity 2018.1 [wayback-archive]
- overview of the scriptable render pipeline
- walkthrough of the development of a pipeline for mobile VR, code on github
- lighting, fog, lightmaps, shadows, light/reflection probes, transparency
Breaking down barriers – part 2: Synchronizing GPU threads [wayback-archive]
- explanations of barrier behaviour on a simplified GPU model
- how split barriers help to increase GPU utilization
Color: From Hexcodes to Eyeballs [wayback-archive]
- in-depth introduction into light theory, human perceptio…
Triangle Visibility Buffer [wayback-archive]
- in-depth walkthrough of the GPU triangle culling pipeline
- render into a single render RGBA8 render target, storing drawID + triangle ID
- memory usage comparison with deferred shading
- at shading time
- lookup the triangle ID from the render target
- interpo…
Porting GPU driven occlusion culling to bgfx [wayback-archive]
- breakdown of how a gpu driven pipeline can be implemented with bgfx
- indirect buffer writing from the CPU not supported so using regular instancing instead
Breaking down barriers – part 1: what’s a barrier? [wayback-archive]
- look at d…
Rendering in Camera Space(ish) [wayback-archive]
- shows effects of floating point precision loss far away from the origin
- transforms rendering to be relative to the camera position in the world instead of the origin of the world
- this makes rendering precision independent from the position in the w…
Youtube - Wolfenstein 3D’s map renderer
- in-depth breakdown of how the Wolfenstein 3D renderer works
- explanation of the ray-casting logic
- derivation of the mathematics found in the code
Fast way to render lots of spheres [wayback-archive]
- spheres drawn in pixel shader using ray-sphere intersectio…
Descriptor Pool Challenges in Vulkan [wayback-archive]
- looking at the descriptor pool problem with multiple worker threads
- variable workload makes it difficult to correctly size the pools
- discussions of workarounds
- proposal of a flag for lock-free descriptor allocation
- looking at the AMD driver …
The Peak-Performance Analysis Method for Optimizing Any GPU Workload [wayback-archive]
- how to use GPU counters to detect interactions between different hardware blocks
- discussion of case studies
- walkthrough of analysis, code examples to show optimizations and discussion of results
Optimized Swapchain in Vulkan [wayback-archive]
- discussion of different approaches, overview of strengths and weaknesses
- recommends splitting command buffers into two groups
- pre-acquire (everything that doesn’t write into the swapchain)
- post-acquire (everything that writes into the swapchain)
- a…
Tightening Up the Graphics: Tools and Techniques for Debugging and Optimization
- aimed at beginners in graphics programming
- overview of common problems and causes
- renderdoc explanation
- feature and interface overview
- how to use it to detect problems
- GPU perf studio and how to profile your applica…
Experiments in GPU-based occlusion culling part 2: MultidrawIndirect and mesh lodding [wayback-archive]
- using DrawIndexedInstancedIndirect (on AMD and Nvidia with API extensions)
- all vertices in large buffers with manual vertex fetch in the vertex shader
- how to integrate level of detail for mes…
The Rendering of Middle Earth: Shadow of Mordor [wayback-archive]
- gbuffer breakdown
- blood rendering as gbuffer modifier
- tessellation
- uses a point cloud as input and a tessellation shader calculates the polygons
- SSAO has two distinct channels that get applied to specular and diffuse separately
- t…
Unreal Engine 4 Rendering Part 1: Introduction [wayback-archive]
- focus on the deferred shading pipeline
- settings required for good development experience
- how data is passed from updated thread -> engine thread -> gpu
- how shader system is structured
- binding between HLSLS and C++
- how the corr…
White Paper: Foveated Rendering [wayback-archive]
- overview of typical VR rendering pipeline
- lens distortion causes pixels towards the edges to be distorted more
- Foveated takes advantage of this and uses a variable quality across the screen
- how to implement it using the opengl multiview extension …
PIX 1711.28 – GPU memory usage, TDR debugging, DXIL shader debugging, and child process GPU capture [wayback-archive]
- can track d3d12 heap usage during timing captures
- experimental TDR (Timeout Detection and Recovery) debugging support
- shader debugging for DXIL (new intermediate shader language) …
Decima engine: visibility in horizon zero dawn [wayback-archive]
- seperate system for statics and dynamics
- world broken into tiles
- sort key is used to define clusters
- lod ranges, filter masks
- morton numbers for spatial partioning
- tile/cluster culling on the CPU
- launch one GPU culling job for ea…
Last Week on DirectX Shader Compiler (2017-11-14) [wayback-archive]
- support for explicitly sized types 16 to 64 bits
- spir-v improvements
- Improved performance of occlusion ray packets by up to 50%
Experiments in GPU-based occlusion culling [wayback-archive]
- An GPU occlusion system…