🎉 Celebrating 25 Years of GameDev.net! 🎉
Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!
![Graphics Programming weekly - Issue 46 — July 8, 2018](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-46/sampling.png&key=863f78118f79f34a5eb8fe84baf2fa30e1943ae598650dacc1f919f7c5c6a484)
- 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…
![Graphics Programming weekly - Issue 45 — July 1, 2018](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-45/hpn2018_teaser.png&key=026e9e0b629009e771c414c77506e096fd2e060e83117941bc44d7c45b0ec429)
- 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 ev…
![Graphics Programming weekly - Issue 44 — June 24, 2018](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-44/bloom_dof_combined2.png&key=bd86814f9b964629381f78f80dca2d15b6449299313213a11024641ba9c08408)
- 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
![Graphics Programming weekly - Issue 43 — June 17, 2018](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-43/compute.png&key=ed19a3432b749db7c138894172bcf1b8aa76bd6f206c0af3623c199ee0103ef3)
- 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 synchroniz…
![Graphics Programming weekly - Issue 42 — June 10, 2018](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-42/Real_World_Measurements_for_Call_of_Duty_Advanced_Warfare.png&key=c903398e1acc990d86eed9693b512cb6b775e116364f16a3dc4cf8b05ed058be)
- 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 …
![Graphics Programming weekly - Issue 41 — June 3, 2018](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-41/machinery_materials.png&key=16349397135f001f1ed9c97019817e831bf34d4f3c37acd2037051f856854381)
- 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 a…
![Graphics Programming weekly - Issue 40 — May 27, 2018](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-40/inside.png&key=b1800ea114a7d653c450d591464dc0a8a7cf89ccf5e0a2cb99241e133b0cf633)
- 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
- us…
![Graphics Programming weekly - Issue 39 — May 20, 2018](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-39/foveated_rendering.png&key=6c19329ef799bc76855377a083fb1d180a4ee6fb8551ffa57d068cbca711bcda)
- 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 ar…
![Graphics Programming weekly - Issue 38 — May 13, 2018](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-38/anki.png&key=52644a5a7ca9112ee5c66a743269b28fc48510145f8eed3e4a76f7147fd35690)
- experience of using vulkan with AMD drivers (stock and open source)
- comparison of register usage with different shader compilers
Vulk…
![Graphics Programming weekly - Issue 37 — May 6, 2018](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-37/thumbnail_youtube_01_forward.png&key=160c4f55506a9b0eb59d635f620c7f488d14c1809c7db06f2c3f2c2ed609bbc5)
- 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 - Ref…
![Graphics Programming weekly - Issue 36 — April 29, 2018](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-36/nubis_cover.png&key=8ea14170c301a08f09c37de72a22f24ede363daa0390f6bd4838a82f9dee5276)
- summary of
- cloud modeling and authoring system
- lighting model
- high level overview of the implementation
Stratified sampling …
![Graphics Programming weekly - Issue 35 — April 22, 2018](https://www.jendrikillner.com/img/posts/graphics-programming-weekly-35/2018-vulkan-developer-day-banner.jpg&key=45aedf188ff04a39e7f84b9b7009d87b3310d0fb3cbb3e00f1b22547ea7bbd27)
- April 30th, Vulkan Developer Day in Montreal, hosted by Ubisoft
- UVs map into a gradient texture
- to c…
![Graphics Programming weekly - Issue 34 — April 15, 2018](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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
![Graphics Programming weekly - Issue 33 — April 8, 2018](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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 percepti…
![Graphics Programming weekly - Issue 32 — April 1, 2018](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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…
![Graphics Programming weekly - Issue 30 — March 11, 2018](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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 …
![Graphics Programming weekly - Issue 29 — March 04, 2018](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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…
![Graphics Programming weekly - Issue 28 — February 25, 2018](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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 intersecti…
![Graphics Programming weekly - Issue 27 — February 18, 2018](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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 …
![Graphics Programming weekly - Issue 26 — February 11, 2018](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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
![Graphics Programming weekly - Issue 25 — February 4, 2018](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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…
![Graphics Programming weekly - Issue 24 — January 28, 2018](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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…
![Graphics Programming weekly - Issue 23 — January 21, 2018](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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…
![Graphics Programming weekly - Issue 22 — January 14, 2018](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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…
![Graphics Programming weekly - Issue 21 — December 17, 2017](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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…
![Graphics Programming weekly - Issue 20 — December 10, 2017](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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 …
![Graphics Programming weekly - Issue 19 — December 3, 2017](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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) …
![Graphics Programming weekly - Issue 18 — November 26, 2017](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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…
![Graphics Programming weekly - Issue 17 — November 19, 2017](https://uploads.gamedev.net/monthly_2018_06/1883680275_portrait%281%29.thumb.jpg.82cc0a26592ee42b881c94e8bb33eb8e.jpg)
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 syst…