Jump to content
  • Advertisement
  • entries
  • comments
  • views

Entries in this blog


Graphics Programming weekly - Issue 54 — September 2, 2018

I am going to be on vacation for the next two weeks so this series will take a small break and will return on September 24th. Pseudo-bandlimited pixel art filtering in 3D – a mathematical derivation presents a filtering approach for a pixel art style in a 3D environment discussion of filtering theory and derivation of a filter for real-time use provides GLSL implementation of the filter wayback-archive Spotlight Team Best Practices: Setting up the Lighting Pipeline in-depth documentation for unity explains the most common terms, the difference between the rendering pipelines with strengths and weaknesses explains the difference between global illumination systems and light modes provides 4 example scenarios that show how the desired game influences the decisions wayback-archive Real-Time Ray Tracing of Correct* Soft Shadows shows how to reformulate the rendering equation so that stochastic shadows can be combined with non-stochastic shading explains how to denoise the stochastic shadows shows results and discusses the performance of the approach wayback-archive API without Secrets: The Practical Approach to Vulkan* Preface start of a new Intel series about Vulkan the focus is on the high-level usage and will be comparing different approaches to common problems walkthrough of the structure of the series and how the sample code will be structured wayback-archive API without Secrets: The Practical Approach to Vulkan* - Part 1 investigates the performance effect of different acquire → render → present approaches shows visually why two sets of frame resources are required to utilize the available hardware efficiently the sample allows experimentations with different scene complexities and CPU workloads wayback-archive Device Memory Management explains the strategy how GPU memory is currently managed and what allocation strategy is used shows a visual representation of allocator usage and discusses the weaknesses of the current approach, pointing to possible future improvements wayback-archive Animated Candle Flame write-up tutorial on how to implement a candle flame using 3 separate texture channels and noise distortion using unity wayback-archive Reverse engineering the rendering of The Witcher 3, part 5 - drunk effect discusses how the drunk effect in “The Witcher 3” was implemented based on reverse engineering the D3D11 shader disassembly provides the reverse engineered HLSL source code wayback-archive hacking a generic ray-triangle intersector reusing a generic ray-triangle intersection for other calculations such as calculating the distance from a ray to a curve segment wayback-archive Looking Through Water Underwater unity tutorial that extends water with flow map (previous part of the series) to support transparent water rendering apply underwater fog and approximation of refractions wayback-archive Large scale ambient occlusion: introduction overview how the large-scale ambient occlusion data is baked for Homefront: The Revolution implemented using rasterization with an orthographic projection and per-pixel linked lists runtime information stored in regularly spaced cells wayback-archive Baking artifact-free lightmaps on the GPU article discussing what is required to achieve high-quality lightmaps UV space rasterization, using a UV G-buffer to collect necessary information to trace rays dealing with shadow leaks and UV seams an algorithm to enable mipmap generation for lightmaps wayback-archive Why Clip Transformed Vertices in Clip-Space? explains why clipping happens in 4D clip space before the perspective divide is applied wayback-archive Siggraph 2018: A developer’s viewpoint blender developers view of the technologies shown at Siggraph talking about USD / Hydra, MaterialX / ShaderX / OSL / Gaffer and OpenColorIO wayback-archive An edited (and extended) version of my OSL BOF talk at SIGGRAPH 2018 overview of the open shading language in 3ds Max how OSL was implemented into the 3ds max architecture discusses problems encountered and improvement possibilities for OSL Contact-hardening Soft Shadows Made Fast explains what contact-hardening shadows are presents one technique that can be used to implement them and deal with artifacts discussions of a method to optimize the process by splitting the shadow mask generation into two passes the first pass generates the penumbra mask at a quarter resolution and the second pass generates the soft shadows, sampling from the quarter resolution penumbra mask wayback-archive High-Performance Graphics 2018 the slides for all talks from the High-Performance Graphics 2018 conference have been uploaded wayback-archive Radeon GPU Profiler 1.3 can now show register and LDS (Local data share) usage as well as theoretical occupancy new render target overview table, provides information about all render targets in the frame in one location more robust handling for applications that create multiple device contexts wayback-archive GBuffer helper – Packing integer and float together explains how to pack an integer and a floating point number into a single unsigned render target channel provides source code for packing and unpacking into a variable number of available bits wayback-archive If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog
Read more




Graphics Programming weekly - Issue 53 — August 26, 2018

DD2018: Paul Malin - HDR display in Call of Duty video for the talk that was discussed in issue 42 an in-depth overview of color, color spaces, and color transformations discussion of HDR standards ACES pipeline overview implementation of HDR pipeline covering: tone curve, display mapping, UI rendering universal CLUT and color grading Material Advances in Call of Duty: WWII normal and gloss mipmapping using a shortened normals technique normals are shortened based on the glossiness how to combine different textures to add detail to a base texture material surface occlusion reformulation of Ambient Occlusion that adds indirect lighting in the occluded parts of the material adds micro-shadowing from material occlusion into the direct-lighting component indirect specular occlusion, using 3D Environment BrdfLut, 3rd dimension is cone angle multi-scattering diffuse BRDF utilizing an approximation stored in a 2D LUT wayback-archive Tech Note: Shader Snippets for Efficient 2D Dithering present HLSL code snippets that implement different kinds of dithering and an example application comparison of quality and performance of the different dithering techniques wayback-archive A Life of a Bokeh an in-depth walkthrough of the new Depth of Field implementation in Unreal Engine 4 discussing problems encountered, solutions and optimizations includes many small code snippets better results and better performance than the old UE4 implementation wayback-archive The Road toward Unified Rendering with Unity’s High Definition Render Pipeline discusses architecture, light culling, clustered lighting implemetation how feature parity between deferred and forward pipeline is achieved implementation of decal system using a D-buffer (similar to g-buffer but for decals only) details about material types, lighting features, volumetric systems wayback-archive Efficient Screen-Space Subsurface Scattering Using Burley’s Normalized Diffusion in Real-Time presentation of a screen space subsurface scattering model, they call it the Disney SSS model is using a single tweakable parameter that makes it easy to use for artists implementation details for a thick and thin object model and optimizations to the implementation wayback-archive Real-Time rendering’s next frontier: Adopting lessons from offline ray tracing to real-time ray tracing for practical pipelines start tracing rays where rasterizer has shortcomings explains how to tune Monte Carlo estimators to converge quicker by minimizing variance using different AO and spherical lights as examples shows the weakness of uniform random numbers and provides techniques to generate better distributions variance-driven sampling focus taking more samples where variance is high wayback-archive Evenly distributing points on a sphere presents two techniques that improve on existing Fibonacci lattice methods one version to achieve better packing distribution other to optimize volume and surface area of the convex hull wayback-archive Differentiable Rendering overview of differentiable rendering a technique gaining traction in machine learning the idea is to provide a way to inverse the rendering process so that changes in the output can be traced back through the pipeline to map changes from output state into changes in the input state wayback-archive Moving Mobile Graphics - SIGGRAPH 2018 slides for the Moving Mobile Graphics 2018 course from SIGGRAPH 2018 wayback-archive Journey into rust #2: Compute Shaders Game Of Life implemented using OpenGL compute shaders in Rust wayback-archive Monte Carlo Integration an in-depth explanation WIP document about Monte Carlo integration how it’s able to approximate the shape of the function from taking independent samples how importance sampling helps to converge quicker extend technique to support Multiple Importance Sampling wayback-archive Color in advanced displays: HDR, OLED, AR & VR slides from the SIGGRAPH course characteristics of an idealized display discussion of real hardware considerations tone reproduction, tone characteristics, dynamic range color primaries, gamut, calibration & characterization viewing environment, adaptive displays, observer differences wayback-archive Subsurface Scattering for Foliage (without Raytracing!) video tutorial on how to implement a subsurface scattering approximation with unity wayback-archive Stencil Buffers a tutorial that explains how to use the stencil buffer with Unity shows how to read/write the stencil mask so that only parts of models will be visible on the screen wayback-archive X-Ray Shader Tutorial in Unity a tutorial explains how to create an Overwatch style x-ray effect in Unity implemented using stencil buffer and multiple shader passes wayback-archive V-EZ abstraction layer from AMD on-top of Vulkan has been released as open source implements automatic render barrier management, descriptor pools/sets, memory management, render passes, etc SIGGRAPH 2018 Stuff collection of observations and nuggets of information from different SIGGRAPH 2018 sessions wayback-archive Basic Math for Shaders a visual explanation of foundational linear algebra concepts that are required for shader programming wayback-archive Demoscene session at SIGGRAPH 2018 video of the demoscene session at SIGGRAPH 2018 Clouds in Wande Making an animation in 18 bytes at a time Building World in 64KB Demo Party in Japan wayback-archive Scatter Kernel next part of the series about developing a path tracer using Cuda discussing how to move ray generation code from the CPU to the GPU speedup of 11x is achieved compared to single threaded CPU implementation wayback-archive Some thoughts re Raytracing post-Siggraph 2018 thoughts on open questions in regards to raytracing dynamic, open world type environments wayback-archive A brief postscript on moment-based order-independent transparency brief discussion of difference between Moment Transparency and Moment-Based Order-Independent Transparency approaches small code samples to help to integrate the trigonometric Moment-Based Order-Independent Transparency technique wayback-archive Pathtracing Coherency look at different ray tracing scenarios and how they influence coherency between neighboring rays references to papers that investigate the issue in further details wayback-archive If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog
Read more




Graphics Programming weekly - Issue 52 — August 19, 2018

Efficient rendering of layered materials slides for the layered real-time shading model discussed in issue 38 using a statistical analysis of light transport in layered structures a visual explanation of the statistical analysis framework presentation of results, comparison against stochastic references and discussion of limitations of the technique wayback-archive High-Performance By-Example Noise using a Histogram-Preserving Blending Operator slides for the technique discussed in issue 45 explanation of problems with linear blending how contrast-preserving blending is able to mitigate some of these problems presents a histogram-preserving blending algorithm that has many use cases besides the introduced procedural texturing technique whenever you blend weighted data: use premultiplied blending data chosen randomly: use histogram-preserving blending wayback-archive Fully Automated Mesh UV UnWrapping video discussing a fully automated UV unwrapping tool explains all steps of the pipeline that tries to find the best projection technique for local parts of the model tool available for licensing NVIDIA Announces Nsight Graphics 2018.4 added pixel history view for D3D12 and added support for support for Vulkan ray trace extension new GPU trace activity view visualizes the GPU utilization in more detail provides a breakdown of wrap level activity, connected to events and performance markers wayback-archive GAME RAY TRACING: STATE-OF-THE-ART AND OPEN PROBLEMS overview of the PICA PICA hybrid raytracing pipeline thought about DirectXRaytracing constraints related to acceleration structures presentation of a texture LOD technique developed with Nvidia preprint available here Pica Pica assets are avaible with with a non-commercial license on sketchfab wayback-archive Not All Blue Noise is Created Equal comparison of 3 techniques to generate blue noise visual quality comparison of three methods to generate blue noise the void and cluster technique produces the best results in the test wayback-archive Integrating clipped spherical harmonics integration of spherical harmonics over spherical polygons using a closed form expression with linear cost shows applications for area lights and approximating shadows from area lights wayback-archive May the Source Be with You: NVIDIA Open Sources Material Definition Language SDK Nvidia open sourced the MDL SDK (Material Definition Language) set of tools that allow materials to be shared between different renderers can generate texturing functions for multiple backends; however the GLSL backend is NOT part of the open source release wayback-archive Introduction to DirectX RayTracing slides and video for the “Introduction to DirectX RayTracing” track from Siggraph 2018 have been released wayback-archive Ray Tracing Minibooks Series released as free pdf the pdf version of the Ray Tracing Minibooks series has been released for free SIGGRAPH 2018 Links growing collection of links to SIGGRAPH 2018 content wayback-archive NVIDIA Reveals Next-Gen Turing GPU Architecture: NVIDIA Doubles-Down on Ray Tracing, GDDR6, & More new GPU architecture from Nvidia dedicated ray tracing hardware volta cores have int8 and int4 support support for variable rate shading wayback-archive siggraph course: path tracing in production 2018 course notes are available wayback-archive Khronos - 2018 SIGGRAPH slides and videos for the Khronos talks from SIGGRAPH 2018 wayback-archive SIGGRAPH 2018 Papers - Machine Learning, Graphics, and Rendering list of author’s favorite papers with a brief summary of the content wayback-archive Fundamentals of color science slides for the Siggraph course about the fundamentals of color science and color management for games and film wayback-archive Introduction to the Vulkan Graphics API slides for the Siggraph course provides an overview of all API interfaces required to render 3D meshes wayback-archive Vulkan GPUinfo database - 1.7 fully vulkan 1.1 compatible support for VK_EXT_conditional_rendering, VK_KHR_8bit_storage If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog
Read more




Graphics Programming weekly - Issue 51 — August 12, 2018

Imperfect Environment Maps using ideas from imperfect shadow map point-cloud rendering to implement reflections generates a point cloud around the track screen space pixels that are close to points of the point cloud transfer their color onto the points the point cloud is then projected onto a sphere around the car and used as an environment map to add reflections on the cars wayback-archive Musings on cross-platform graphics engine architectures – Part 2 breaks down the engine into two separate related concepts, Resource and Command management discusses how to interact with resources introduces the idea of state scopes to prevent state leaking commands are recorded into engine specific command buffers that are later converted into the API specific format wayback-archive High-Performance Graphics 2018 slides for most of the talks have already been published wayback-archive DX12 Ray Tracing Tutorials Nvidia tutorial on how to integrate DirectX raytracing and rasterization so that both rendering paths can be used within the same application how to initialize the API, create DXR acceleration structures how the ray tracing pipeline works, manage shaders, resources, and shader binding tables implementation of the required raytracing shaders to produce identical results with the rasterization pipeline wayback-archive Rendering the Moana Island Scene Part 1: Implementing the Disney BSDF . short description of the different aspects of the Disney BSDF, including source code wayback-archive Screen-space Water Rendering a technique to render screen space water using unity water particles write information into offscreen buffers to accumulate water information these buffers are then resolved to form a continues water surface instead of individual blobs wayback-archive A Multi-Faceted Exploration (Part 3) improves upon the multiple scattering approximation from the previous part of the series the result is a model that only requires a 2D LUT to be pre-calculated wayback-archive Shader Graph Updates and Sample Project walkthrough of two vegetation shaders created with the visual shader editor that was added in Unity 2018.1 wayback-archive Uniform points in sphere and capped cone how to improve the generation of uniform points in a sphere, disk, and a spherically capped cone wayback-archive Clipping Objects with a Plane a tutorial that shows how to clip a mesh in a pixel shader against a plane using unity wayback-archive Confetti Shader Translator - Alpha a web tool that allows the conversion from HLSL Shaders to HLSL 6.2, GLSL 4.5 and Metal 2.1 The other pathtracer 5: Optimizing Triangle-Ray Intersections choosing a different algorithm to optimize triangle-ray intersection tests and vectorizing the calculations wayback-archive Tiled Blue Noise a quick overview of blue noise tiled with various tile sizes from 16x16 to 256x256 wayback-archive A Cross-platform Evaluation of Graphics Shader Compiler Optimization explores source to source optimizations techniques using the LunarGlass framework with GLSL shaders comparison of different optimization techniques and the effects on runtime performance results vary significantly between different shaders and target platforms wayback-archive The State of GPGPU in Rust overview of libraries available to write GPGPU applications using the Rust programming language wayback-archive Lighting the Unlit description of the “unlit” light system being used it allows lights to modify tint, brightness and contrast to enable the 2D characters to match the environment better wayback-archive Metal shaders: blending basics a short explanation and Metal shader code for different blend modes as described in the PDF specification wayback-archive Shader Showcase Saturday #4 overview of different fire effects that are based around animated noise textures wayback-archive Shader Showcase Saturday #5 overview of different rain effects with links to more in-depth articles discussing the showcased effects wayback-archive Microsoft/glTF-SDK Microsoft open sourced their library to read and write GLTF model files
Read more




Graphics Programming weekly - Issue 50 — August 5, 2018

Filament - Physically-based rendering engine great in-depth discussion of the full PBR rendering pipeline, documentation for the Filament engine base BRDF model, extended with support for clear coat layer, anisotropic surfaces, and cloth explanation of lighting units and implementations for directional, point and spotlights providing GLSL code snippets a short overview of the clustered forward shading implementation information about how to validate a PBR implementation wayback-archive An implementation of physically based shading model & image based lighting in various graphics APIs physically based shading model implemented using D3D11, D3D12, Vulkan and OpenGL 4.5 each backend is implemented in a single .h and .cpp file wayback-archive Generating random points in a sphere shows algorithms for generating random points within a sphere contains interactive visualizations that make it easy to see the quality of the distribution
wayback-archive Flowmapped-Burn-Shader breakdown of a burning shader implemented in Unreal Engine uses flow maps and world space positioned spheres to influence the fire wayback-archive Non-Scary Shader Intro 2: Vertex Fun part two of the series providing an introduction to vertex shaders shows how to add a custom vertex shader to a basic unity shader, sample textures, pass data from vertex to pixel shader and modify vertex positions
wayback-archive Explanation of the paper 'View-warped Multi-view Soft Shadows for Local Area Lights' summary of the paper: “View-warped Multi-view Soft Shadows for Local Area Lights ” discussed in last weeks issue a real-time technique for soft shadows
wayback-archive Optimize Memory Transfers - Using CUDA profiler to figure out why our renderer is slow shows how to measure Cuda copy performance using the tools contained in the SDK how to speed up the application with the collected performance information
wayback-archive Aligning 3D scans the article discusses how to calculate the central axis from a 3D mesh the axis is computed as maximal perpendicular to the area-weighted surface normal of the mesh
wayback-archive Vulkan - Multisampling explains how to use MSAA when using Vulkan how to detect the supported sample count, set up the render targets and make the necessary adjustments to the render passes shows how to enable sample shading to further improve quality on the inside of polygons wayback-archive Twitter - Volume rendering thread twitter thread that provides a large number of links to information about volume rendering
wayback-archive Vulkan® 1.1.82 - Chunked Specification provides the Vulkan specification in a chunked version the original specification is one large HTML file that causes usability issues wayback-archive Decoding Radeon Vulkan versions AMD provides a XML file that offers the possibility to map from external driver version to the contained Vulkan driver version wayback-archive Xenko 3.0 is now free and open-source! Xenko, a C# based game engine has been released as open source with an MIT license
wayback-archive Compilation of 100+ 3D graphics academic papers collection of many 3D graphics research papers for a large number of different topics (sorted by topic)
wayback-archive Think Silicon® releases GLOVE™, an OpenGL ES over Vulkan middleware as open source OpenGL ES implementation using Vulkan licensed as LGPL v3
Read more

Graphics Programming weekly - Issue 49 — July 29, 2018

The Elusive Frame Timing explanation of frame stuttering provides videos and frame by frame comparisons of what is causing the stutter explains how the discrepancy between measured time and actual present time causes the studdering issue current state of graphics API ecosystem in solving this problem
wayback-archive Quality hashes collection WebGL2 shadertoy implementations of multiple noise types the comments describe improvements and possible optimizations to the used noise types
View-warped Multi-view Soft Shadowing for Local Area Lights shadow technique for local area lights based on the generation of view independent point clouds from dynamic triangle meshes and the rendering of multiple depth maps simultaneously proposes two different implementations performance and quality comparison against PCSS (percentage closer soft shadows) and Multi-view rasterization (MVR)
wayback-archive Normals and the Inverse Transpose, Part 3: Grassmann On Duals part 3 of the series about Grassmann for computer graphics combines the concepts of bi-vectors / tri-vectors with dual vectors explaining use cases wayback-archive Even more compute shaders explains how GPUs are able to execute multiple execution streams to hide memory latency how the different workloads of CPU and GPU lead to differences in the design of caches
wayback-archive PIX 1807.19 – Shader Table Viewer added support for visualizing the content of DirectX Raytracing shader tables able to detect invalid data in the table and warn about it wayback-archive Geometry Shader Adventures, Mesh Triangle to Particle explanation of a geometry shader in Unity that converts a triangle mesh into camera facing quad particles
wayback-archive metal shaders: luminance explains how to calculate luminance and a very brief overview of the human vision
wayback-archive metal shaders: color adjustments look at image shaders that modify brightness, contrast, exposure, gamma or saturation using Metal wayback-archive DF Retro H2O! Water Rendering: Wave Race 64, Quake, Duke Nukem 3D + Many More! overview of water rendering starting from the early 90s to the early 2000s

Read more

Graphics Programming weekly - Issue 48 — July 22, 2018

Disney Animation Data Sets the history behind the release of the Disney datasets of large-scale scenes comparison of the scene rendered using Disney’s renderer and PBRT 3 wayback-archive A High-Performance Software Graphics Pipeline Architecture for the GPU paper discussing the software implementation of the rasterization pipeline using compute shaders using a dynamic approach that adjusts to the workload dynamically comparison within environments taken from games to evaluate the pipeline overhead showcase of what kind of effects are possible with a software approach custom primitive rendering programmable blending adaptive supersampling in-depth performance comparison against hardware and other software approaches wayback-archive Followup to Atmospheric Scattering—Part 1 follow up series of 2012’s GPU Pro 3 model dynamic, real-time atmospheric model without pre-calculations explains aerial perspective and the Chapman approximation to optical depth wayback-archive Visualizing 2D Vector Fields showcase different ways to visualize a 2d flow field presentation of an algorithm that allows the creation of loopable animations from vector fields wayback-archive TL;DR of the paper 'Conservative Z-Prepass for Frustum-Traced Irregular Z-Buffers' summary of “Conservative Z-Prepass for Frustum-Traced Irregular Z-Buffers” paper explanation of irregular z-buffer and conservative shadow maps and how they are combined wayback-archive Sampling Anisotropic Microfacet BRDF mathematical derivations of importance sampling for GGX, Beckmann, and Blinn-Phong wayback-archive Writing a Modern Metal App from Scratch: Part 2 part 2 of the Metal tutorial adding support for depth buffers, some simple lighting with textures extending the application to support multiple lights, objects, and materials with some basic animations wayback-archive Vulkan input attachments and sub passes explanation of Vulkan render passes example how to create Render passes manage shader bindings for input attachments and how to use them from within the GPU shader wayback-archive Musings on cross-platform graphics engine architectures – Part 1 start of a series about graphics engine architecture core design goals and pillars for the author’s graphics engine embrace concepts introduced in modern graphics APIs make job-based multi-threaded execution a first class citizen define a clear, small API, but be open towards extension wayback-archive Revisiting The Vertex Cache: Understanding and Optimizing Vertex Processing on the modern GPU a new vertex cache optimization algorithm that is able to improve cache usage on NVidia hardware by taking advantage of vertex batch sizes wayback-archive TL;DR of the paper 'Revisiting The Vertex Cache: Understanding and Optimizing Vertex Processing on the modern GPU' summary of the “Revisiting The Vertex Cache: Understanding and Optimizing Vertex Processing on the modern GPU” paper wayback-archive Shader Showcase Saturday #2 shader showcase of different waterfall effects wayback-archive metal shaders: color inversion explains what color inversion is and how to implement it using metal wayback-archive Multipass Shaders (& inverted Hull outlines) tutorial on how to use multi-pass shaders in unity to implement an outline drawing effect first pass object is drawn like usual in the second pass drawn with front face culling and slightly scaled up to define the outline wayback-archive
Read more

Graphics Programming weekly - Issue 47 — July 15, 2018

An introduction to shader derivative functions explanation of partial derivates in pixels shader, (ddx, ddy in HLSL or dFdx, dFdy in OpenGL) the rate of change for variables in a 2x2 pixel grid how they are calculated, how they can be used to calculate face normals from world space positions how branches interact with derivative calculations wayback-archive More compute shaders explanation of SIMD execution details for GCN discussing latency, throughput, and scheduling introduction of instructions that allow multiple SIMD lanes to exchange information extra requirements for pixel shaders wayback-archive Rotating a vector using integer math a technique to rotate vectors on the GPU using only integer math aims to take advantage of packed operations and scalar integer operations wayback-archive Gathering Feedback: Open Problems in Real-Time Raytracing Colin Barré-Brisebois is looking for feedback and open problems in real time raytracing this will influence the HPG 2018 keynote wayback-archive bezier bounding box how to calculate the bounding box for quadratic and cubic Bezier splines analytically wayback-archive The Team Color Problem changing the color parts of a character at runtime using a mask texture detailed visual explanation of why this works for fixed colors but causes an issue when giving the option to blend between two colors using premultiplied colors removes the artifacts wayback-archive Blending an HDR color into a U8 Buffer explanation of how blending HDR values into an SDR render target behaves regarding clipping into the [0,1] range shows how using non-premultiplied HDR values results in incorrect results and how this can be fixed by the use of premultiplied alpha colors wayback-archive Writing a Modern Metal App from Scratch: Part 1 tutorial how to write a Metal app for iOS end results is a spinning, constant color teapot deals with loading models, handling vertex data, shaders, constants and drawing wayback-archive Shader Showcase Saturday #1 showcase of small rendering demos that showcase volumetric rendering effects wayback-archive Dark and Stormy explanation of dark and stormy, cloudy skybox shader for unity source code and example assets are available wayback-archive QuadriFlow: A Scalable and Robust Method for Quadrangulation a technique to generate quadrilateral meshes from triangulated meshes won the Best Paper Award at Symposium on Geometry Processing 2018 source code available wayback-archive Low Level Graphics Library (LLGL) a library that aims to provide a thin abstraction layer on top of OpenGL, D3D11, D3D12, Vulkan, and Metal Rudimentary temporal anti-aliasing solution GLSL implementation as a starting point for a temporal antialiasing solution wayback-archive Real-Time Rendering, 4th Edition Bibliography bibliography of the Real-Time Rendering 4th edition 1978 references wayback-archive
Read more

Graphics Programming weekly - Issue 46 — July 8, 2018

Progressive Sampling Strategies for Disk Light Sources 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 polar4 strategy introduced in this paper with well-stratified samples wayback-archive Progressive Multi-Jittered Sample Sequences introduction of new strategies to generate progressive(hierarchical) 2D sample point sequences can be stopped at any point in the sequence and samples will still be well distributed comparison against existing techniques, using many different distribution functions and shapes wayback-archive HSV and HSL (colorpsaces XI) explanation and derivation of the HSV and HSL color spaces how to convert the color spaces to and from RGB colors wayback-archive Hybrid raytraced shadows and reflections implementation of a hybrid approach that mixes rasterization for first hit and raytracing for secondary rays tracing against polygons using compute shaders directly (no raytracing API) how to create a BVH structure and traverse it details about how to raytrace for shadows and reflections look at the performance, mainly memory bound wayback-archive Breaking down barriers – part 4: gpu preemption provides an overview of GPU preemption strategies and how these affect application responsiveness and latency wayback-archive Pathtraced Depth of Field & Bokeh explains the physical properties of cameras, starting with a pinhole camera model shows the effect of changing focal length, aperture radius and how to implement this into a raytracer extending the concepts into a lens based camera system wayback-archive Rules of optimization explanation of performance culture, a working culture that treats performance as a core feature designed from the beginning and it’s everyone responsibility to uphold it wayback-archive Porting your engine to Vulkan or DX12 video and slides from a talk that explains lessons learned from porting an AAA engine to Vulkan recommendations for memory, descriptors, command buffers and barrier management a short overview of frame graph architecture to achieve better barrier usage wayback-archive DD2018: Tomasz Stachowiak - Stochastic all the things: raytracing in hybrid real-time rendering overview of the hybrid real-time rendering pipeline developed for PICA PICA demo layered material model transparency translucency shadows an in-depth look at the reflection system and global illumination system Introduction to compute shaders how GPUs evolved from fixed function hardware to the uniform architecture used today overview of concepts required to understand the programming model how GPUs are able to hide memory latency to achieve higher throughput wayback-archive TL;DR of the paper 'High-Performance Procedural Noise using a Histogram-Preserving Blending Operator' summary of the paper “High-Performance Procedural Noise using a Histogram-Preserving Blending Operator” that was discussed in issue 45 wayback-archive How to start learning graphics programming? steps that the author recommends programmers follow that are interested in getting started in graphics programming from shadertoy (for instant visual feedback) to game engines to more low-level aspects of the implementation wayback-archive DD2018: Sebastian Aaltonen - GPU based clay simulation and ray tracing tech in Claybook overview of the SDF storage system how the world space SDF is generated from a list of brushes and how it is modified at runtime how to raytrace against the distance field efficiently soft shadows and ambient occlusion improvements SDF → mesh conversion for moving particles px_render.h rationale overview of design decisions of single header low-level rendering API comparison against bgfx and sokol_gfx wayback-archive Vulkan layers don't work? Look at registry windows registry contains entries for Explicit Layers (all layers that can be loaded by a process) and Implicit Layers (all layers that will be loaded automatically for every process) sometimes these values will become corrupted wayback-archive
Read more

Graphics Programming weekly - Issue 45 — July 1, 2018

High-Performance Procedural Noise using an Histogram-Preserving Blending Operator 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 evaluate; 0.29ms for a fullscreen quad the approach is to partition the output space into a triangle grid and to pick three random patches from the input texture to blend to create the output patch this is made possible through the variance preserving blending operation, and this can also be used to improve triplanar mapping wayback-archive Spectral Remapping for Image Downscaling technique for downsampling images that preserves high-frequency information from the original image instead of discarding high-frequency information it remaps the signal into a form that can be represented in the downsampled image wayback-archive Stratified Sampling of Projected Spherical Caps a technique to improve importance sampling for spherical light sources by projecting the visible spherical cap onto a 2D plane, and taking uniform samples within this plane yields noise-free direct illumination for constant illumination with no occluders wayback-archive TL;DR of the paper 'Stratified Sampling of Projected Spherical Caps' summary of the previous paper explains the spherical cap projection and the intuition how this improves the results
wayback-archive High-Performance Graphics 2018 - Program program for the High-Performance Graphics 2018 in Vancouver has been published wayback-archive Deferred Adaptive Compute Shading technique changes shading rate adaptively based on the local content of the image partitions the framebuffer into subdivision levels; uses these to estimate the variance between neighboring pixels to decide if new shading information needs to be calculated or if the shading result can be estimated from neighboring pixels wayback-archive Cube-to-sphere projections for procedural texturing and beyond overview of area-preserving approaches of cube to sphere mapping summarizing ability to preserve area and GPU performance how to generalize 2D grid-based poisson-disc sampling to the sphere provides shadertoy implementations of the presented techniques wayback-archive TL;DR of the paper 'Cube-to-sphere projections for procedural texturing and beyond' summary of “cube-to-sphere projections for procedural texturing and beyond” paper wayback-archive PIX 1806.20 – GPU Occupancy for AMD GPUs Pix now also support GPU occupancy visualization for all shader types on AMD GPUs wayback-archive Materials for Polygons on Terrain and the Evils of Inverse Trigonometry polygons on terrain implemented as image-space decals how to apply them when they span a large area on the surface of the earth effects of implementation inaccuracies of inverse trigonometric functions between CPU and GPU wayback-archive Understanding GPU context rolls explains what a context on AMD hardware is and how the driver manages these the Radeon GPU Profiler has a tool to analyze when context rolls are causing a performance issue wayback-archive Gradient Estimation for Real-Time Adaptive Temporal Filtering a technique that adjusts the temporal accumulation factor dynamically per pixel and frame done by calculating per-pixel temporal gradients. These are reconstructed from sparse information that captures the change of luminance between the last and current frame wayback-archive Compiling DirectXShaderCompiler on Linux/macOS Microsoft DirectX Shader Compiler is now also supported on Linux and macOS there is a docker image available: https://github.com/gwihlidal/docker-dxc wayback-archive Veldrid Support for SPIR-V Shaders low-level C# graphics library now supports SPIR-V shader for all supported backends exposes specialization constants on the API level and emulates them at translation time for backends that don’t support them wayback-archive
Read more

Graphics Programming weekly - Issue 44 — June 24, 2018

Breaking down barriers – part 3: multiple command processors 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 wayback-archive Simball description explanation of the simball environment that has been initially designed for the Maxwell Renderer descriptions of the different object features, what they are designed to provide tests for and how it’s supposed to be used Zelda – The Bling-Bling Offset shows how Zelda uses an FX in world space to make objects visible in high grass by adjusting the position of the effect based on the environment fix clipping with the object by offsetting the FX towards the camera wayback-archive Blackscreen checklist for OpenGL and D3D twitter thread with a checklist of common problems that can cause objects not be rendered in OpenGL / D3D wayback-archive Adaptive Temporal Antialiasing the technique that mixes rasterization and temporal antialiasing to only ray trace pixels where a classification algorithm determines that TAA will not produce good results wayback-archive Combining Analytic Direct Illumination and Stochastic Shadows C++ source code and prebuild demo application are released wayback-archive Texture-space Decals The decals are projected from world space onto the mesh UV and rendered into separate per-object decal textures wayback-archive The other Pathtracer 4: Optimizing AABB-Ray intersection optimizations to raytracer using SIMD extending AABB tests to deal with various edge cases wayback-archive ACES 1.1 now available a new set of SDR ODT (Output Device Transforms) first Output Transforms that combine the RRT (Reference Rendering Transform) and ODT (Output Device Transforms) into a single transform wayback-archive Optimising path tracing: the last 10% shows how the runtime/compile time selection feature of the Rust programming language is used to select different SSE intrinsics based on the available hardware wayback-archive roblox graphics APIs 2018 overview of rendering API support for the user of Roblox Metal reaches above 60% on MacOS and D3D11 77% on Windows on Android, Vulkan is available on 20% of devices wayback-archive lunarg releases new vulkan 1.1.77 sdk new sdk contains VK_KHR_get_display_properties2 and VK_KHR_draw_indirect_count extensions wayback-archive
Read more

Graphics Programming weekly - Issue 43 — June 17, 2018

Using Compute Post-Processing in Vulkan on Mali 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 synchronization to overlap early work in the frame of the following frame with the post-processing work of the previous frame wayback-archive Monte Carlo Integration Explanation in 1D explanation of to use Monte Carlo integration to calculate the area under a curve extending the system to deal with non-uniform random numbers distributions convergence can be faster when using a distribution that is a closer match to the signal that is being sampled wayback-archive PIX 1806.11 – Fence signals and waits visualization, major UI streamlining, new Edit and Continue experience, and more timing capture now visualizes fence signal and wait fences can be named shader edit and continue workflow improvements shader resource tracking for DXIL shader wayback-archive Shader Playground updates shader playground added support for slang a shader language that extends HLSL to make it more modular and extensible ability to shows the control flow graph in GraphViz ‘dot’ form for SPIRV Lookup table based real-time PVRTC encoding using lookup tables to precompute the endpoints better compression results different number of lookup tables allow tradeoffs in performance, quality and memory usage wayback-archive Microsoft - GDC 2018 talks from Microsoft at GDC are online including DirectX Raytracing and Optimizing and debugging your DirectX-12 game Texturing in a 64kB intro discusses the history and design of their in-house procedural texture generation tool wayback-archive Book of the Dead: Photogrammetry Assets, Trees, VFX discussion of the photogrammetry workflow camera used to capture, tools to generate the mesh and normals using unity Unity’s DeLighting tool to remove shadows are even present on an overcast day Tree assets are created with a mix of scans, 3ds max plugins, and quixel megascans assets a fluid solver is used to calculate the flow map for the wind, shape exploration and VFX generation wayback-archive PostFX v2 – Amazing visuals, upgraded overview of all the post effects that can be found in PostFX v2 code is on github wayback-archive Simple GPU Path Tracer explains the basic of path tracing used in his D3D12 path tracer wayback-archive Cross-platform OpenGL alternatives discusses engines, frameworks, abstraction layers that support metal wayback-archive Vulkan for Qt on macOS QT adds support for vulkan on macOS through MolenVK wayback-archive
Read more

Graphics Programming weekly - Issue 42 — June 10, 2018

Real-World Measurements for Call of Duty: Advanced Warfare 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 areas is more important than having absolute correct values how having consistent measurements between the real world and in-game allowed numerous issues to be discovered and fixed the exposure handling required for the sizeable dynamic range of the scene how to capture accurate HDR photographs, albedo textures, and specular gloss wayback-archive HDR in Call of Duty an in-depth overview of color, color spaces, and color transformations discussion of HDR standards ACES pipeline overview implementation of HDR pipeline covering tone curve, display mapping, UI rendering universal CLUT and color grading wayback-archive A Multi-Faceted Exploration (Part 2) look at solution developed by Imageworks compensates for the energy loss in a single bounce BRDF model improvements to the model wayback-archive Human-friendly classification of Vulkan resources proposal of how to group vulkan resources by usage type designed for coloring in the VulkanMemoryAllocator wayback-archive Apple Announces that OpenGL and OpenCL will be Deprecated in macOS 10.14 Mojave Apple will start to deprecate OpenGL with macOS 10.14 and OpenGL ES with iOS 12 developers should be using Metal instead wayback-archive Metal for Game Developers how to generate command buffers in parallel on the CPU metal can analyze data dependencies to insert GPU parallelization automatically explicit control is supported but requires explicit opt-in how to build a GPU driven rendering pipeline using indirect command buffers and argument buffers look at image blocks, programmable blending, tile shading, persistent thread group memory, custom multi-sample color resolve lessons learned from bringing Fortnite: Battle Royale to iOS wayback-archive How To become an advanced graphics programmer twitter thread with advice how to learn more advanced graphics programming topics wayback-archive Polygons a tutorial that explains how to clip a polygon based on a list of lines in a pixel shader wayback-archive Sticking a thin lens in a ray tracer derivation of a ray function that implements the effects of a thin lens on rays wayback-archive 3d file formats, last mile vs. interchange looks at different file formats and discusses the difference between formats aimed at the interchange of information or consumption only formats covered: gltf, fbx, alembic, USD, a brief look at application and engine support wayback-archive 2018 Vulkanised video presentations from the Vulkanised conference Multiview rendering in Vulkan using VK_KHR_multiview a sample that shows how to use the VK_KHR_multiview Vulkan extension wayback-archive
Read more

Graphics Programming weekly - Issue 41 — June 3, 2018

The Machinery Shader System (part 3) 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 allows to insert command at the correct time in the Frame all of the resulting shaders get a shared resource binder and constant buffer to reduce wayback-archive Adding texturing to a glsl path tracer explanations how ray tracing shaders in OpenGL can access the necessary textures for all objects in the world using GL_ARB_bindless_texture wayback-archive Pathtracer 13: GPU threadgroup memory is useful! moving the scene information into group shared memory to speed up the ray tracing code a lot problems on metal, slower unless passing data by value instead of by const reference wayback-archive Pathtracer 14: iOS look at the iOS implementation with an overview of performance tools for CPU and GPU wayback-archive Hybrid Multi-Frustum Logarithmic Depth Buffer now using Logarithmic depth buffer when available writes custom depth in a pixel shader, this does disable early depth optimizations but still a performance win for their use-case wayback-archive Witcher tricks - a bit about rendering the witcher 3 look at the implementation of Witcher 3 rendering from an outside perspective using RenderDoc breakdown of rendering Frame structure how normals are stored in the g-buffer explanation of a number of techniques from the d3d disassembly sun rendering blinking stars eye adaptation tonemapping vignette Basis universal GPU texture format examples discussion of tradeoffs for the basis file format comparison of different images formats transcoded from the same source format wayback-archive Denoising with Kernel Prediction and Asymmetric Loss Functions extending previous work in CNN(Convolutional neural network) based denoising using a modular architecture that improves temporal stability and detail preservation wayback-archive Optimising path tracing with SIMD how to optimize a Rust path tracer using SSE4.1 wayback-archive On Games’ Power Consumption and phones the longer the CPU/GPU can idle, the less power is needed optimizing a CPU bound game might cause more frames to be rendered (hitting 60 fps instead of 30). causing less GPU idle time and increasing power consumption kernel heuristics might trigger higher frequency mode which increases battery usage significantly wayback-archive Texture Distortion Faking Liquid Tutorial about the implementation of water surface movement of using a flow map in unity how to deal with deformation of normals using derivative maps wayback-archive A Trio of New Nsight Tools That Empower Developers to Fully Optimize their CPU and GPU Performance NVIDIA Nsight Systems visualizes system-wide application interactions across CPU and GPU Nsight Volta, Vulkan 1.1 and Cuda 9.2, are supported user configurable memory view wayback-archive Nsight Systems Exposes New GPU Optimization Opportunities -how to investigate GPU starvation and detect CPU/GPU synchronizations and overview of other tools wayback-archive
Read more

Graphics Programming weekly - Issue 40 — May 27, 2018

INSIDE shipping on iOS 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 raytracing to remove aliasing in special cases improvements to blue noise algorithm wayback-archive GPU Driven rendering experiments at the Digital Dragons conference discussions of problems with old occlusion culling systems renders occluders in a pre-pass, uses the depth information to cull instances how to implement culling against the depth buffer, remove culled instance from the stream stream compaction implementation extend the system to handle LOD, materials and manual vertex fetching performance results on Nvidia and Intel wayback-archive SIGNED DISTANCE FIELDS IN UNITY overview of how to generate a SDF in unity per object SDF at build time global SDF aggregation at runtime wayback-archive Workshop: Shaders for Artists - Part 2 introduction to shaders workshop in Montreal focused on the node-based shader pipeline of Unreal Never Map Again: Persistent Memory, System Memory, and Nothing In Between discussion of characteristics of different ways to pass CPU generated data to the GPU using OpenGL persistent memory (GL_ARB_buffer_storage) client arrays vertex buffer object (VBO) wayback-archive Scalable GPU Fluid Simulation overview of SPH (Smooth Particle Hydrodynamics) how it’s implemented in a compute shader explanation of a sorted grid acceleration structure wayback-archive Fractal Raytracing: The Mathy Parts how the fractal raytracer was implemented on the GPU evaluating the fractal, ray marching and photon simulation wayback-archive Art Design Deep Dive: Rendering the player as a form of pure energy in Recompile discussion of a unique art style rendering technique the character is represented from axis aligned voxels voxels are created/destroyed on a quantized world space grid as the character moves through the world wayback-archive GPU Path Tracing in Unity – Part 2 adds supports for a basic material system with lambert diffuse + phong specular explanation of importance sampling wayback-archive Advice for beginners, who are just getting started in Computer Graphics list of resource for beginners into graphics programming wayback-archive Stochastic all the things: Raytracing in hybrid real-time rendering implementation details for reflections, translucency, transparency, shadows global illumination uses surfels with world space accumulation wayback-archive How I got started with shaders (Non-Scary Shader Intro) explanations of how to get started with shader programming with unity takes the unity toon shader as the starting point to explain concepts and provide a gentle introduction into making modifications to it wayback-archive The Forge: Release 1.10 adds support for GPU tracking system that allows to enable/disable features based on the GPU used Radeon GPU Profiler 1.2 now includes present events in the system activity view explanations for why the driver had to insert barriers wayback-archive
Read more

Graphics Programming weekly - Issue 39 — May 20, 2018

Kernel Foveated Rendering 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
wayback-archive Checkerboard rendering, rotated anti-aliasing and grid frequencies 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
wayback-archive My take on shaders: Spherical mask dissolve description of a shader effect that dissolves triangles outside of a spherical effect range
wayback-archive Game Math: Swing-Twist Interpolation (…Sterp?) 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
wayback-archive A Multi-Faceted Exploration (Part 1) 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
wayback-archive Multiple-Scattering BRDF derivation of the multi-scattering GGX BRDF provides source code and precomputed lookup tables wayback-archive Stripping scriptable shader variants 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
wayback-archive Compressonator V3.0 Release Brings Powerful New 3D Model Features 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
wayback-archive Simple and efficient Vulkan loading with flextGL tool that allows to only include vulkan functionality that you need comparison of header sizes and influence on compile time, startup time
wayback-archive Normals and the Inverse Transpose, Part 2: Dual Spaces introduction into vectors as functions and dual space how to transform dual vectors wayback-archive Writing a Portable CPU/GPU Ray Tracer in C# uses ShaderGen to write shaders in C# and compile them into the target shader language for D3D11, Metal, OpenGL and vulkan wayback-archive Introducing Shader Playground website that allows compilation of shaders with a multitude of shader compilers and inspect the available outputs possibility to chain compilers together
wayback-archive Vulkan Debug Utilities 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
wayback-archive GPU-Centered Font Rendering Directly from Glyph Outlines technical details about the font rendering algorithm used in slug
wayback-archive Game Math: Deriving the Slerp Formula presents one method to derive the slerp formula for quaternions
wayback-archive Programmability of Graphics Pipelines 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
wayback-archive Texture Arrays in Unity discusses problems with using a texture atlas set of scripts to help with the creation, management and usage of texture arrays in unity
wayback-archive Alpha Distribution technique that helps to reduce problems of disappearing geometry for alpha tested geometry no runtime changes required, only changes the way mips are generated
Read more

Graphics Programming weekly - Issue 38 — May 13, 2018

Optimizing Vulkan for AMD and the tale of two Vulkan drivers experience of using vulkan with AMD drivers (stock and open source) comparison of register usage with different shader compilers
wayback-archive Vulkanised is back! Khronos event focused on experiences of game developers that ship Vulkan versions on May22 in Cambridge wayback-archive How much does additive bind pose help? compressing animation key frames relative to the bind pose and presenting results results are data dependent, on Paragon dataset saves 7.9% but increases compression time wayback-archive Efficient Rendering of Layered Materials using an Atomic Decomposition with Statistical Operators new model for layered materials statistical analysis that uses an atomic decomposition of light transport to predict scattering in the layered structure per layer statistics are combined into a scattering function as mixture of microfacet models
wayback-archive The Display Resolution of Head-mounted Displays, Revisited in-depth look at the distribution of display resolution across the VR display how this influences the mapping of renderer output results to the final display physical display resolution is the same on both headsets (1080×1200 per eye) Oculus favors resolution over FoV Vive has a higher FoV but reduced resolution wayback-archive Voxel DAGs and Multiresolution Hierarchies from large-scale scenes to pre-computed shadows tutorial course covering representation, usage and applications of voxel DAG and multiresolution hierarchies voxel DAG take advantage of duplicated data found in voxel data sets how to compress color information construct a DAG using CUDA raytrace the structure use it for shadows in static environments wayback-archive GPU Font Rendering - Current State of the Art unicode overview overview of different font rendering techniques look at how Slug renders individual glyphs and what is required to present good results for lines of text
wayback-archive HLSL for Vulkan: Semantic Strings and Location Numbers explanation of rules that apply to shader input structures and interstage linking differences between HLSL and SPIR-V semantics shows how HLSL semantics are expressed in SPIR-V wayback-archive Spherical Gaussian series blog series about the mathematics of spherical gaussians a gaussian function that is defined on the surface of a sphere and how to use the techniques for normal map filtering
wayback-archive 2018 Montreal Vulkan Dev Day videos from the Montreal Vulkan dev days have been uploaded

Read more

Graphics Programming weekly - Issue 37 — May 6, 2018

Stylized VFX in RIME – Water Edition how the stylized vfx in Rime was implemented short overview of fire and smoke effect in-depth overview of the water rendering implementation wayback-archive SPIRV-Cross - Reflection API user guide explanation how to query reflection information from SPIR-V shader brief overview of the the SPIR-V type system wayback-archive The implementation of Pixel-projected Screen Space Reflections explanation of the implementation of Pixel Projected Reflections using vulkan supports approximation of normal maps and roughness comparison against brute force ray tracing implementation (image quality and performance) wayback-archive GPU Ray Tracing in Unity – Part 1 how to implement a ray tracer using a compute shader in unity features supported: sky box, ground plane, spheres, reflections, directional light with hard shadows and a basic material system simple temporal anti-aliasing solution wayback-archive Bokeh depth of field in a single pass shows the steps leading up the final implementation uses a fixed weight for all contributing samples. If sample doesn’t contribute, blend in the current average color instead clamping sample size when sample is further away then the center sample. This makes sure out of focus background do not blur into in-focus foreground objects wayback-archive Zpng texture compression library in just 500 lines of C code + Zstd zpng compressing is quicker, takes 6% of the time and output size of the image is 66% compared to the png reference wayback-archive 2018 Vulkan Montreal Dev Day presentations from the Vulkan Montreal dev day including updates about HLSL in Vulkan and descriptor indexing wayback-archive Comparison of vertexcodec/indexcodec from meshoptimizer with Google Draco comparison of Draco and mesh optimizer output in regards to size and decoding time Draco size compression is mesh dependent, can be larger. Always a lot slower to decode wayback-archive GDC 2018 Presentations most of the AMD presentations from GDC have now been uploaded wayback-archive Basic Argument Buffers examples for arguments buffer have been published allow the grouping of resources and constants into a single object that can be bound as a single unit wayback-archive Open Sourcing Seurat: bringing high-fidelity scenes to mobile VR tool that allows simplifications for static VR environments takes RGB + depth as input images generates simplified geometry that textures will be mapped onto to represent the scene prebuild version can be found here: https://github.com/ddiakopoulos/seurat/releases wayback-archive i3D 2018 – Moment-Based Order-Independent Transparency build upon the ideas of moment shadow mapping transparent geometry is rendered twice determine transmittance function per pixel composite all transparent surfaces taking advantage of the fact that the logarithm of the transmittance can be accumulated additively wayback-archive Upcoming Oryol Changes (sokol_gfx.h migration) overview of the new rendering API build around method chaining for the initialization of descriptors wayback-archive GTC On-Demand videos and presentations from GTC are available
Read more

Graphics Programming weekly - Issue 36 — April 29, 2018

Nubis: Realtime volumetric cloudscapes in a nutshell summary of cloud modeling and authoring system lighting model high level overview of the implementation wayback-archive Stratified sampling environment lighting is using several distributed area lights distribution / strength is adapted to the environment implementation of importance sampling using varying step sizes for ray marching steps wayback-archive Taking a Stroll Between The Pixels investigation of relation between linear interpolation and curve representations wayback-archive NVIDIA SMP Assist API for VR Programming D3D11 extensions to simplify use of Lens Matched Shading and Multi-Res Shading short overview of the concepts and how the API works wayback-archive Reducing Vulkan API call overhead vulkan function calls pass through several layers until the actual function is executed looks at the disassembly to evaluate the cost of this (between 1-5%) and how to bypass many layers to reduce the overhead wayback-archive Dissecting the Rendering of The Surge 100% dynamic lights, 16 shadow maps in 4kx4k atlas gbuffer breakdown stores material index in gbuffer, indexing into structured buffer for material information deferred decals have problems with depth discontinuities because of wrong mip selections use mip0 when depth discontinues are found around the pixel object decals, blending arbitrary meshes into the gbuffer working on bindless decals, follow the same pattern as clustered deferred lighting wayback-archive Daily Pathtracer 12: GPU Buffer-Oriented D3D11 implementation of a buffer based (breadth first) approach for the raytracer looking at synchronization issues, performance brief look at the NVidia nsight tool wayback-archive GPU texture compression error metrics overview of what error metric he uses when working/comparing encoders wayback-archive OpenGL engine and PBR deferred pipeline with SSR/SSAO shows effect of different ray marching step sizes for screen space reflections diffuse reflections approximation with mip selection vs reference implementation with many samples wayback-archive Comparison of backface culling efficiency for cluster cone culling comparison of backface culling efficiency for cluster cone, 64-triangle clusters wayback-archive Terrain Erosion On GPU discusses 3 different approaches for implementing thermal erosion on a height field based terrain wayback-archive New BC7 encoder open sourced supports perceptual metric for compression designed for opaque textures wayback-archive HLSL for Vulkan: Resources descriptor types in vulkan vs D3D12 how to specify resource bindings for vulkan in HLSL memory layout rules wayback-archive
Read more

Graphics Programming weekly - Issue 35 — April 22, 2018

2018 Vulkan Developer Day in Montréal April 30th, Vulkan Developer Day in Montreal, hosted by Ubisoft wayback-archive Recolouring assets with lazy unwrapping! UVs map into a gradient texture to change the colors the UVs are adjusted to point to other sections in gradient texture wayback-archive The Machinery Shader System (part 2) overview of the shader authoring format shader input parameters are defined without thinking about how they are bound passing data between shader stages is abstracted giving the system flexibility to pack as required wayback-archive Dissecting the NVIDIA Volta GPU Architecture via Microbenchmarking microarchitectural details of the NVIDIA Volta architecture registers are divided into two 64 bit banks reduction of bank conflicts with register remapping can improve performance by 15% shorter latency for shared memory atomics wayback-archive Benefits of Image Based Lighting on Mobile MatCap texture contains lighting information for all camera space normals needs to be recalculated when camera direction changes wayback-archive Post-processing effects on optimization mobile gaming uses a texture based and camera facing quad approach instead of a post-processing bloom lighting for terrain rendered into a low-res light map, sampled per-fragment terrain is rendered at 720p, up-scaled to 1080p wayback-archive Prefix Sums and Summed Area Tables algorithm to sum regions from arrays or grids in constant time need larger storage format, increase depends on largest range that needs to be summed compatible with bilinear filtering for sub-pixel values wayback-archive Unity Graphics Questionnaire unity graphics team is looking to gather feedback to improve the roadmap Daily Pathtracer 10: Update C#&GPU performance numbers for all implementations with latest changes wayback-archive Daily Pathtracer 11: Buffer-Oriented current approach recursively processes a single ray until it terminates new approach calculates each step for all rays in seperate passes memory read seems to be limiting factor, shows a few optimizations for that wayback-archive First steps when implementing FP16 available with AMD vega architecture pack two FP16 into FP32 register reduce ALU instructions count, reduce VGPR usage how to detect FP16 code generation in FXC disassembly and GCN ISA output discussion of pitfalls and common use-cases how to deal with FP16 constants wayback-archive Rainy SurfaceShader in UE4 Part 2 combination of ripples and streaking effect blending between the two effects based on surface orientation this post covers the implementation of the streaking effect wayback-archive BC7 encoding using weighted YCbCr colorspace metrics many BC7 encoders compress all channels equally for color textures, errors in red and blue are less noticeable YCbCr color space allows better compression by reducing the number of bits used for chroma wayback-archive ispc_texcomp BC7 issues discusses issue with the ispc implementation compression has quality problems with grayscale textures wayback-archive Monte Carlo Methods for Volumetric Light Transport Simulation survey of methods utilizing Monte Carlo for light transport in participating media wayback-archive Readings (shaders, maths, 3D) list of resources for beginners aimed at shader toy like graphics programming wayback-archive fx-gltf A C++14/C++17 header-only library for simple, efficient, and robust serialization/deserialization of glTF 2.0 intel metrics discovery library that allows access to GPU performance data on intel GPUs
Read more

Graphics Programming weekly - Issue 34 — April 15, 2018

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 SymPy case studies, part 2: derivatives [wayback-archive] calculation of partial derivatives, function gradients able to eliminate common subexpressions SymPy part 3: moar derivatives! [wayback-archive] longer example combining all elements of previous posts of the series to calculate area elements on the unit sphere Daily Pathtracer Part 7: Initial SIMD [wayback-archive] Daily Pathtracer 8: SSE HitSpheres [wayback-archive] Daily Pathtracer 9: A wild ryg appears [wayback-archive] new parts about the pathracer, discussing SSE implementation approaches, performance and optimizations Coarse Pixel Shading with Temporal Supersampling [wayback-archive] coarse pixel shading lowers shading rate temporally reconstructs shading samples and full visibility information pdf preprint GPU Emitter Graph System in Star Wars Battlefront 2 [wayback-archive] workflow overview runtime design frame organisation data management particle sorting performance walkthrough of different use cases (sparks, snow, rain, leaves, … , crowds) DXC online compiler website allows the compilation of HLSL using the old fxc and the new dxc shader compiler Fast & beautiful 2D lighting in Unity [wayback-archive] breakdown of how the 2D lighting system was implemented using 3D objects to cast and receive shadows rendering shadows and lighting into a render target, blend the result into the main output Interactive Editor for the DirectX Shader Compiler [wayback-archive] Interactive editor mode allows to show changes introduced by each pass changes to disassembly can be made and will be propagated to following changes For best performance, use DXGI flip model [wayback-archive] Spring Creators Update brings new features discussion of scenarios when the windows compositor can be bypassed with the flip model to allow best performance hardware can scale back buffers when they don’t match the screen resolution Epic at GDC 2018 [wayback-archive] list of all Epic content presented at GDC 2018
Read more

Graphics Programming weekly - Issue 33 — April 8, 2018

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 perception, color spaces and gamma correction One Mesh To Rule Them All [wayback-archive] same assets used on PC/mobile/consoles limits the LODs based on the target platform creates clusters of nearby objects, generate proxy geometry from these clusters Improved Lerp Smoothing [wayback-archive] classical lerp is frame rate dependent, hard to tweak improved version that solves these problems: value = lerp(target, value, exp2(-rate*deltaTime)) how to convert from classical lerp Normals and the Inverse Transpose, Part 1: Grassmann Algebra [wayback-archive] introduction into grassmann algebra explanation of vector, bivector, trivector and wedge product derivation of a more geometric understanding about the behaviour under transformation Combining Analytic Direct Illumination and Stochastic Shadows [wayback-archive] split into unshadowed illumination and illumination-weighted shadow unshadowed areas are noise free, only shadowed areas use stochastic ray tracing and need denoising discussions of denoising techniques Memory Mapping on Windows (including Benchmark) [wayback-archive] overview of memory mapping on windows benchmark of different techniques using MEM_RESET allows the OS to lazily unmap pages Rendering in the DirectX Shader Compiler Editor [wayback-archive] tool to allow compilation of shaders, inspection of AST and disassembly renderView allows execution of draw/dispatch, could be useful for prototyping Viewing Optimization Passes in the DirectX Shader Compiler Editor [wayback-archive] allows display of optimisation passes change setup of used passes, ordering and parameters Barycentrics [wayback-archive] demo application that shows 5 ways to get Barycentric coordinates large variation in performance between the different approaches Ray Tracing with the DirectX Ray Tracing API (DXR) [wayback-archive] concerns about a blackbox raytracing API and the quality of drivers Vulkan bindless extensions [wayback-archive] descriptors can be updated after they are bound to a command buffer relax requirement so that descriptors that are not accessed can be invalid allow variable size bindings in descriptor set layout GL_EXT_nonuniform_qualifier allows indexing into resource arrays which differ within the same draw call GDC Retrospective and Additional Thoughts on Real-Time Raytracing [wayback-archive] quick overview about the content of the SEED raytracing presentation at GDC sees the future to be about trade-offs between noise, ghosting and performance allows comparison against ground truth allows researchers to implement techniques using a common API SPIRV-Reflect library that provides a C reflection API for SPIR-V shader bytecode Why every gfx/CV/robotics programmer should love SymPy (Part 1) [wayback-archive] 2 case studies of how to use SymPy Daily Pathtracer Part 5: Metal GPU! [wayback-archive] experience of porting the pathtracer to metal with performance numbers and problems encountered (Demoscene) Revision 2018 [wayback-archive] videos of the demos shown at revision 2018
Read more

Graphics Programming weekly - Issue 32 — April 1, 2018

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 interpolate vertex attributes at pixel position apply shading advantages of the technique less memory bandwidth required better memory coherence during shading more material variety, no need to store material data in gbuffers Re-Testing Vulkan Transform Data Handling Strategies [wayback-archive] performance comparison of constant buffer data stored in push-constants large UBO (device / host memory) large SSBO (device / host memory) on Nvidia UBO performs significantly better Octahedral Impostors [wayback-archive] better usage of texture space, workflow improvements overview of billboard techniques using either Hemi-Octahedron or full Octahedron how to blend between the different baked directions integration into UE pipeline substance PBR guide [wayback-archive] updated version of the guide in two parts 1, 2 Improving the compression of block-compressed textures Revisited [wayback-archive] comparison of crunch (unity improved version) with DDS + general purpose compressors V-EZ brings “Easy Mode” to Vulkan [wayback-archive] abstraction layer on-top of vulkan implements automatic render barrier management, descriptor pools/sets, memory management, render passes, etc. aimed at CAD software, not games not open source at this point HLSL Basics [wayback-archive] set of lessons explaining shader basics with unity how shaders are integrated into the unity pipeline Ray Tracing at GDC [wayback-archive] summary of available ray tracing articles Announcing Microsoft DirectX Raytracing! [wayback-archive] overview of DirectX raytracing api discussion of design decisions future direction PIX 1803.16-raytracing – DirectX Raytracing support [wayback-archive] pix supports DirectX Raytracing (DXR) API calls shows details about resources visualization of acceleration structure showcase of demos that support DXR Introduction to NVIDIA RTX and DirectX Raytracing [wayback-archive] more in-depth explanation of how the DXR API work ray generation -> intersection / any hit -> closest hit / miss An Idea: Raytracing Lookup Tables [wayback-archive] instead of using textures use adaptive-meshes to represent data where required, raytrace against that mesh to get the lookup value PIX 1803.25 – GPU Occupancy, CPU sampling, automatic shader PDB resolution, and more [wayback-archive] allows to see occupancy broken down into different render pipeline stages (NVidia only for now) improved CPU profiling more memory usage information (command allocators, PSO, descriptor heaps) geometry shader and DXR debug support Daily Pathtracer Part 0: Intro [wayback-archive] series about small path tracing experiment with C++, C# and unity C# burst GPU Ray Tracing in One Weekend [wayback-archive] unity implementation of a compute shader ray tracer random points on sphere stored in texture ray scheduler, store persistent ray state in gpu buffer and iterate, no recursion depth of field scene change handling Hello World: OctaneRender 4 is here [wayback-archive] free option for single PC available Brigade Engine integration (real time path tracing engine) many speed improvements “Ray Tracing Gems” Book Call for Participation [wayback-archive] new book, call for authors small overview of raytracing history
Read more

Graphics Programming weekly - Issue 31 — March 18, 2018

This week I am at GDC, therefore there will be no newsletter at the end of the week. If you would like to meet during the week, send me an email or message me on twitter. DMs are open. The series will return on April 2nd. Meta loader for Vulkan API dynamically loads vulkan entry points, bypassing the vulkan loader for increased calling performance Good Vulkan Binding [wayback-archive] suggests using dynamic SSBO on AMD on NVidia: data smaller then 64 KiB use UBO, otherwise SSBO then alias use binding aliasing to access as different types A Look Inside Farpoint’s Rendering Techniques for VR [wayback-archive] MSAA didn’t give the image quality required used oculus UE4 renderer with dynamic resolution to enable super sampling when possible occlusion query is done using a merged depth buffer from the left and right eye applies a mip bias based on the distance to the center of the screen experiment with world space cone tracing Performance Profiling [wayback-archive] what to optimize for, selecting appropriate metrics tips on how to make tests reproduceable considerations for data recording to validate assumptions what data to record and how to present the results Vulkan Subgroup Tutorial [wayback-archive] what subgroups are how to use subgroup operations efficiently examples of use-cases Horizon-Based Indirect Lighting (HBIL) screen space indirect lighting technique based on the ideas of horizon based ambient occlusion (HBAO) discussion of improvements to HBAO how to integrate it into a rendering pipeline A dive into the making of Immersion [wayback-archive] water reflection ( planar reflection with blur ) volumetric lighting algithmn description including light absorption vegetation and particles valley of gods - water [wayback-archive] GPU based shallow water simulation signed distance field for collision with the geometry breakdown of the different visual components
Estimated Cost of Per Atom Function in Real-time Shaders on the GPU [wayback-archive] gives rough estimates of how expensive GPU instructions are relative to each other Unreal Engine 4.19 Released! [wayback-archive] new temporal up sampling method dynamic resolution all lights use physically based units terrain LOD selection is now screen size based instead of distance based The High Definition Render Pipeline: Focused on visual quality [wayback-archive] unified lighting across all render passes (deferred, forward, ….) build for high end PCs and consoles new area lights, sun based on physical units overview of new BRDF decals on opaque and transparent objects many new debug features volume based system for scene settings such as sky, shadows, …
Read more

Graphics Programming weekly - Issue 30 — March 11, 2018

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 different meaning of barriers on GPUs it includes synchronization, cache management, decompression description of how it works on the hardware level Hair in In the Valley of Gods [wayback-archive] how the stylized hair from Zora is being created based on hair cards for the trailer the hair was rigged and animated Using the GitHub dxcompiler.dll [wayback-archive] when using custom dxcompiler.dll to build shaders they will be unsigned can only be used when windows developer mode is active and d3d12 experimental mode is enabled when the official dxil.dll can be loaded by the compiler the shader will be signed Khronos Group Releases Vulkan 1.1 [wayback-archive] Subgroup Operations: operations that allow communications between parallel gpu work extension integrated into 1.1 core specification multi-gpu support, cross-api sharing, 16-bit data types, hlsl memory data layout Importance Sampling techniques for GGX with Smith Masking-Shadowing: Part 1 [wayback-archive] mathematical derivation of importance sampling using the CDF (Cumulative Distribution Function) including source code Importance Sampling techniques for GGX with Smith Masking-Shadowing: Part 2 [wayback-archive] description of the flaws of solution from part 1 explanation of a better importance sampling using the distribution of visible normals source code included Don’t Convert sRGB U8 to Linear U8! [wayback-archive] visualizing loss of precision between storing color data in 8 bits per channel using linear vs sRGB encoding difference in lerp behaviour between sRGB and linear color space Codegen for fast Vulkan [wayback-archive] for better calling performance it’s recommended to query the entry points directly instead of going through the vulkan loader article shows how to parse the vulkan xml specification with python to automate the generation of the loading code
Read more
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!