Advertisement Jump to content
  • Advertisement


  • Content Count

  • Joined

  • Last visited

Community Reputation

128 Neutral


About jendrikillner

  • Rank

Personal Information


  • Twitter

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. I am running a small survey to be able to improve the series further this year. If you have two minutes to spare, please fill out the survey This week also contains articles that have been published during my vacation since issue 67 Learning D3D12 from D3D11 - Part 1: Getting Started, Command Queues, and Fencing start of series for programmers with D3D11 experience starting to learn D3D12 explains what command queues are, how they express different GPU execution timelines and how fences allow synchronization between CPU and GPU wayback-archive WebGL + Rust: Basic Water Tutorial explains how to render water using WebGL, Rust, and WebAssembly water supports reflection and refraction reflections are rendered using a reflection plane technique, that mirrors the world and clips fragments if they are below the water plane wayback-archive Ice Shader – Hard Edges in Vertex Shader shows how to use screen space derivatives to create hard edges on a mesh in the pixel shader how to calculate greyscale from colors wayback-archive An Explanation of the Rendering Equation video explaining the rendering equation in an easy to understand and visual way Programming tricks in Shadertoy / GLSL list of common patterns for shadertoy programming included are: normalizing screen coordinates, color management (hue, sRGB), line drawing, antialiasing, blending, vector math, and random value generation wayback-archive Procedural Stochastic Textures by Tiling and Blending preprint of the article to appear in GPU Zen 2 talking about the implementation details (C++ and GLSL) replaces the 3D histogram transformation with three 1D histogram transformations improves quality of the result under mipmapping and shows how to generate correct results with compressed texture formats paper OpenGL demo wayback-archive How to Start Learning Computer Graphics Programming walkthrough of steps to learn graphics programming recommends starting that beginners start with a raytracer/rasterizer from scratch before starting to use any graphics API list of project ideas for beginners wayback-archive 16x AA font rendering using coverage masks, part III explains how to rasterize the glyphs from a font into a texture. Providing the coverage information that is required by the technique discussed in part 1 and 2 includes code for the OpenGL compute shader overview of typography terms and explain how to correctly position the glyphs to form the final text on the screen wayback-archive Rasterization in One Weekend, Part III presents what vertex attributes are and how they are interpolated to deal with perspective distortions correctly uses this knowledge to interpolate normals and UV coordinates for the sponza model wayback-archive A Primer On Efficient Rendering Algorithms & Clustered Shading Part 1 of the article: explains how classical forward/deferred pipelines work and how tiled and clustered algorithms can be used to extend these ideas includes animations to show the concepts in a more visual way presents strengths and weaknesses for each technique Part 2 of the article: presents the clustered forward shading implementation how to subdivide the camera frustum into clusters and implement light culling provides links to further information sources wayback-archive The Rendering of Rise of the Tomb Raider frame breakdown of the Rise of the Tomb Raider with D3D12 on PC uses a light pre-pass architecture lens flares don’t use a visibility query but instead use the depth buffer to calculate visibility talks about shadow mapping, ambient occlusion, depth-aware upscaling, reflections, hair rendering, volumetrics, and tone mapping wayback-archive Color Spread Post-Processing Effect Tutorial in Unity explains how to apply an expanding color effect that converts the world from greyscale back to color as post-processing effect using Unity scriptable render pipeline presents how to reconstruct world space position from the depth buffer wayback-archive Containerized Shader Compilers shows how to set up a Docker container image that is able to run shader compilers supported are: DXC, FXC, GLSLang, AMD Radeon Graphics Analyzer, DXIL signing, SMOL/V and Vulkan SDK wayback-archive If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog Read more
  2. Thank you everyone for the support in 2018, this is the last post of the series for this year, the next post will be released on January 14, 2019. I wish you happy holidays and a great start into 2019. Unified Resource State Management for Vulkan and Direct3D12 explains the state management system implemented for the Diligent Engine resources states are exposed on D3D12 style semantic for barriers allows mixing of automatic and manual explicit state management the developer can choose to disable automatic transitions on a per resource basis can switch on a per-resource basis at any time during the frame wayback-archive Art and Technology at Pixar (SIGGRAPH Asia 2018 Course) course notes for the Siggraph Asia 2019 course presenting the newest developments and techniques used during The Incredibles 2 talking about Simulation & FX, Rendering & Compositing and Real-time Tools to allow quicker iteration time overview of subdivision surface representations for use with OpenSubdiv paper archive wayback-archive Game Tech Deep Dive: The fast and furious window shaders of Forza Horizon 4 explains the parallax mapping technique used to represent the interiors of buildings as seen through windows broken into multiple layers to separate window frames, curtains and interior of the room baked separate light texture to allow night time for interiors wayback-archive Vulkan sparse binding - a quick overview explains sparse binding and residency sparse binding lifts the requirement that resource memory needs to be fully continuous in memory. Instead, memory is managed with pages that can be mapped at non-continues offsets sparse residency lifts the requirement that the complete resource needs to mapped. For example, only parts of a texture atlas could be mapped wayback-archive Reverse engineering the rendering of The Witcher 3, part 7a - average luminance (distribution) describes how the histogram of pixel brightness is collected using a compute shader in The Witcher 3 the system allows a dynamic weighting of pixels that origin from the sky wayback-archive Adaptive Exposure from Luminance Histograms explains how to use D3D12 to calculate a histogram of pixel brightness in a compute shader shows how to use a per-bin weight to calculate the luminance for the exposure step wayback-archive Rasterization in One Weekend, Part II part two of rasterization implementation article series with C++ shows how to extend the rasterizer into 3D now implements the necessary pipeline to project vertices from object space into clip space for rasterizations adds support for depth testing and index buffers code archive wayback-archive RenderDoc Survey 2018 RenderDoc survey looking to gather information about the user experience, stability, development experience, API and platform coverage help to set the direction for future developments Intel's Architecture Day 2018: The Future of Core, Intel GPUs, 10nm, and Hybrid x86 presenting an overview of next-generation Intel architecture will support adaptive sync, tile-based rendering, coarse pixel shading wayback-archive NVIDIA Announces Nsight Graphics 2018.7 acceleration structure visualization for DXR (DirectX Raytracing) and Vulkan serialize DXR application to a C++ capture is now supported added Vulkan pixel history support wayback-archive Radeon GPU Profiler 1.4 added support for OpenCL profiling wayback-archive Radeon Software Adrenalin 2019 Edition 18.12.2 Highlights new AMD driver adds support for VK_EXT_inline_uniform_block, VK_KHR_swapchain_mutable_format, VK_EXT_scalar_block_layout and sparse extensions wayback-archive If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog Read more
  3. Breaking down barriers – part 6: experimenting with overlap and preemption the final part of the series presents how different GPUs are able to overlap the workload between different async and graphics queues work on the same graphics queue presents how split barriers influence the overlap additionally presents the ability of Windows to preempt GPU work when multiple applications are sharing the same GPU code wayback-archive Real-time fluid simulation in shadow of the tomb raider slides for the fluid simulation used in Shadow of the Tomb Raider have been released the content of the talk was discussed last week in issue 65 Scriptable Render Pipeline - Single-Pass Forward Rendering next part of the series about the development of a forward shading pipeline using the Unity scriptable render pipeline implements support for directional, point, and spotlights show how to interact with the Unity provided light culling system code wayback-archive Shading Atlas Streaming object based shading approach designed for VR rendering splits rendering into client and server operations the server calculates visible geometry and object space shading the results are stored into a shading atlas the client receives a preprocessed vertex stream and the shading atlas the visible geometry is rendered from a single vertex buffer and shading is applied from the information cached in the shader atlas presents the memory management technique and mip-level selection paper archive video summary parallel memory management archive wayback-archive Metal Documentation Index user created index-page for the Apple Metal documentation contains links to samples, class documentation, best practices documents, tools and debugging helper wayback-archive Going slightly physically based shows how to validate using image comparison and using a furnace test how to implement a plastic and glass BSDF make the ray tracer less biased through changes to the way the number of bounces is determined wayback-archive Khronos - 2018 SIGGRAPH Asia Khronos talks from Siggraph 2018 Asia talks about Vulkan memory management, subgroup operations and the design of a FrameGraph style engine architecture introduction to WebGL and overview of the latest updates to the GLTF format wayback-archive Code reviews - Lamorna Engine series of videos walking through the implementation of a software renderer written in multithreaded C++ using SIMD presenting the whole pipeline from vertex fetching, vertex processing, culling, projection, binning, rasterization, mipmapping and finally shading wayback-archive The importance of good noise explains why noise is significant in computer graphics and how to animate blue noise over time so that it retains its properties wayback-archive Tech Focus: Wolfenstein 2's Variable Rate Shading: Nvidia Turing Analysis! video summary of variable rate shading presents a few approaches that are used to drive shading rate selection what options are exposed in Wolfenstein 2 and how they influence performance and quality Directional Lightmap Encoding Insights new encoding model for Ambient Highlight Direction (AHD) lightmaps that eliminate common interpolation artifacts and how to fit AHD from spherical harmonics data wayback-archive If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog Read more
  4. WebGPU - An Explicit Graphics API for the Web review of problems with classical APIs (OpenGL) and motivations for the creation of WebGPU presentation about Dawn, WebGPU implementation from Google splits into render passes that insert resource transitions between passes automatically how numerical fences are implemented (Monotonically increasing values indicate a timestamp in GPU execution history) considerations for implementations using cross-process communication sourcecode Vulkan Raytracing - bunny and teapot part 2 of Vulkan raytracing series extends the application with multiple 3D meshes, texturing, simple shading, shadows, reflections, and ice shading model sourcecode wayback-archive A radiative transfer framework for non-exponential media development of a new rendering framework for transmittance for participating media that enables non-exponential media types to be represented archived by splitting transmittance into 4 transport functions discussion of how to express this new model so that it is intuitive to use and still creates physically correct results paper archive video archive sourcecode archive wayback-archive Breakdown: Animated Raindrop Material in UE4 walkthrough of the implementation of a rain material using the Unreal Engine 4 shader graph wayback-archive How to Sanity Check your Spherical Harmonics Projection Code a short summary of what spherical harmonics are and what they are used for proposes a sanity check for SH projection code, by passing a function with a constant of 1, should result in a first coefficient close to 2√π wayback-archive Procedural Color - Introduction article series about procedural routines for color generation talks about some techniques to generate procedural color variations explains HSB color space and the effect of changing each component convert from RYB hues to HSB hues generation of monochrome color schemes how the difference in colors influences human perception wayback-archive Encoding Indirect Command Buffers on the GPU a sample that explains how to use Metal to generate render commands on the GPU implements GPU culling only to issue rendering commands for visible meshes and remove empty draws the final command buffer submission is controlled from the CPU wayback-archive Sampling the GGX Distribution of Visible Normals explains a new model for sampling visible normals of the GGX distribution summarizes the properties of GGX and how sampling a 2D projection of the truncated ellipsoid is equivalent to sampling the visible normals of the GGX distribution the method is more precise and quicker than previous methods provides a GLSL implementation paper archive code archive wayback-archive Twitter Thread - Where do the BRDF formulas come from? How can we make our own? twitter thread that discusses what a BRDF is and how they are formed links to sources with more in-depth information wayback-archive Halcyon Architecture - Director's Cut a single slide-deck that will evolve and serve as a single reference point for information about the SEED Halcyon engine the content was discussed in issue 63 61 of this graphics programming weekly series pptx archive pdf archive wayback-archive glsl-reduce the walkthrough explains how to use GLSL-reduce to simplify a GLSL shader and preserve certain conditions such as a crash or invalid output this is achieved with an interestingness test script the script expresses what is considered to be interesting, such as specific compiler crash, high memory usage, long compile time, etc presents the problem of bug slippage, this happens when a reduced shader generates a problem, but it’s not the same problem as in the original shader wayback-archive 2D SDF Shadows a tutorial explains how to implement ray traced shadows when using a signed distance field to represent the scene geometry using Unity wayback-archive Reweighting Firefly Samples for Improved Finite-Sample Monte Carlo Estimates interactive WebGL demo for the paper describing a technique to reduce firefly artifacts from path tracer outputs webgl-demo wayback-archive If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog Read more
  5. Bringing Ray-tracing into Remedy‘s Northlight Engine a brief overview of the concepts of the ray tracing extension started integration with replacing screenspace AO and shadow map implementations how to implement ray trace reflections, techniques to reduce noise and optimizations best optimization advice is to split ray casting and shading export ray hit information from raycasting shader, and shade samples later using a conventional compute shader overview of the indirect diffuse voxel solution used in Quantum Break and how ray tracing can be used to improve the results Real-Time Fluid Simulation in Shadow of the Tomb Raider overview of the Navier-stokes equation, look at each step of the implementation and how it was integrated into the engine scrollable grid, only run simulation near the player character, a static map for the rest of the world obstacle injection uses capsule vs. water plane collision checks algae implementation uses virtual particles that convert density to particles, applies simulations, and turns back to densities Vulkan & OpenGL CAD Mesh Shader Sample Nvidia sample for mesh shaders using Vulkan and OpenGL presents performance comparison for different meshes and a varying number of vertex attributes wayback-archive How does a GPU shader core work? explains the GPU programming model, how shaders are executed showcases the differences between CPU and GPU design wayback-archive All about coding things twitter collection of many graphics and game programming related links wayback-archive Foggy Window Shader in Unity explains how to implement a shader that simulates a foggy window effect applied to a plane in 3D space allows the user to clean parts of the window. Foggy state returns after some time has passed wayback-archive Using A Custom Toolchain In Visual Studio With MSBuild explains how to integrate the DirectX shader compiler (DXC) into the Visual Studio build system (msbuild) integration of dependency tracking detecting headers shows how to provide a regex to integrate with the Visual Studio error window project src archive wayback-archive Rendering related threads collection of rendering related twitter threads wayback-archive Vulkan education survey Khronos survey looking for feedback on Vulkan education material Model for Real Time—Beyond Counting Polygons beginner level overview about consideration for modeling techniques related to performance and minimizing z-fighting artifacts wayback-archive Fast, Constant Time Sphere Indexing, Part 1 article with interactive and live tweakable examples presents a technique that allows constant time conversion from a position on or above a sphere to the nearest triangle index using an octahedron subdivision model wayback-archive If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog Parallel Shader Compilation for Ray Tracing Pipeline States explains how to use new D3D12 API additions to precompile shaders for DirectX raytracing in parallel into a native hardware format wayback-archive Dota 2 OpenGL vs. Dx9 vs. Dx11 vs. Vulkan performance comparison of OpenGL, D3D9, D3D11, and Vulkan in Dota 2 Ni No Kuni 2: frame analysis frame breakdown of an interior scene in Ni No Kuni 2 uses a light pre-pass architecture the cartoon edge line is using FXAA for smoother lines, and the final render result uses SMAA wayback-archive Low-Discrepancy Blue Noise Sampling C++ header only implementation to generate 2D blue noise sample points Rasterization in One Weekend, Part I part 1 of the series on writing a software rasterizer in C++ explains the concept of barycentric coordinates, edge functions and how they are combined to rasterize a 2D triangle wayback-archive Vulkan Synchronization Primer - Part I overview of the synchronization primitives of the Vulkan API explains concepts of barriers, access masks, semaphores, and queue transitions wayback-archive Vulkan Synchronization Primer - Part II the distinction between memory and execution barrier explains render passes including sub-region dependencies look at GPU → CPU synchronization wayback-archive If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog Read more
  6. Modern graphics abstraction and real-time ray tracing overview of architecture multiple render backends are supported at the same time all GPU resources are referred to by a handle, resources can exist on multiple GPUs overview of the high-level command system that is recorded and translated into native API command buffers render graph system graph construction and execution how to deal with multiple GPUs virtual GPU system allows emulation of a multi GPU setup using a single GPU proxy backend routes rendering calls to a remote machine for execution a brief look at machine learning in a render graph architecture overview of the asset pipeline overview of hybrid rendering pipeline and how transparent shadows have been implemented using DirectX Raytracing discussing open problems with ray tracing pptx archive wayback-archive Web High Level Shading Language a new shading language, designed for use with WebGPU discusses the constraints of targeting the web, and the ability to convert to Metal, HLSL, and SPIR-V SPIR-V limitations also limit the expressiveness of WHLSL memory safety for arrays, getter and setter support does not support a preprocessor but instead uses a two-pass compilation model with specialization constants bindless binding model is not supported wayback-archive 16x AA font rendering using coverage masks, part II part 2 of the series on font rendering shows the artifacts a regular grid sampling pattern causes and how a rotated grid improves the edges of glyphs that contain straight lines explains how to sample the grid efficiently by splitting the rotation into one horizontal and one vertical skew able to optimize the sampling by precalculating lookup tables wayback-archive Microsoft's New Open-Source Project Is Shader Conductor For Cross-Compiling HLSL new open source library from Microsoft that combines the DirectXShaderCompiler and SPIRV-Cross to convert HLSL shaders into OpenGL/Metal/SPIR-V or HLSL compatible with D3D11 wayback-archive A simple method to construct isotropic quasirandom blue noise point sequences presents an approach to generate a quasirandom blue noise point sequence shows the mathematical foundation, distribution analysis and comparison with other techniques python code is provided to help with the understanding of the technique shadertoy wayback-archive Our Machinery Episode 3: Cross-Platform Graphics podcast episode discusses how to design a cross-platform API, problems, and considerations engine design is aimed at modern APIs, supporting older APIs is not a concern for “Our Machinery” wayback-archive Reverse engineering the rendering of The Witcher 3, part 6 - sharpen reverse engineering the sharpening filter from The Witcher 3 and explains how it works step by step provides HLSL source code that produces the same assembly wayback-archive There is a way to query GPU memory usage in Vulkan - use DXGI shows that using DXGI functionality can be used to keep track of Vulkan memory usage on Windows presents how to identify physical adapters between Vulkan and DXGI to deal with multi-GPU systems wayback-archive Vulkan with DXGI - experiment results experiments with using DXGI for memory reporting when using Vulkan results are presented for the system using one AMD and one NVIDIA GPU memory management behavior seems to be different between the vendors DXGI appears to be able to report sensible application local memory usage information wayback-archive Experimenting with VK_GOOGLE_display_timing, taking control over the swap chain the extension allows the application to collect timing information from the presentation engine and schedule presents at specified times the post presents results from experimenting with VK_GOOGLE_display_timing on Android and Mesa (X11) list of issues encountered and possible points of improvement wayback-archive How To: Data Lookups Via Raytracing explains how ray-tracing could be used for arbitrary data-lookup in 2D and 3D can handle more data points where the signal changes more rapidly a texture has a fixed resolution and cannot adjust to varying density needs wayback-archive niagara: Depth pyramid for occlusion shows how to generate a depth pyramid for Vulkan takes the depth buffer and produces a conservative mipmap chain preparation for GPU occlusion culling in the next episode niagara: Occlusion culling implementation of GPU occlusion culling into the mesh-shader and classical rendering pipeline Graphics Programming - Resources for Beginners list of resources for beginners that are looking to get started with graphics programming wayback-archive Task list for VK_EXT_scalar_block_layout new Vulkan extension that allows usage of the C++ memory layout in Vulkan constant and structured buffers this relaxes the alignment requirements wayback-archive Recovering the Scale, Rotation and Translation Matrices from the Model Matrix presents how to recover the scale, rotation, and position from a model matrix rotation is retrieved as a rotation matrix wayback-archive CppCon 2018: Valentin Galea “Rapid Prototyping of Graphics Shaders in Modern C++” a presentation about the development and design of a C++ library implementation that allows GLSL shaders to run on the CPU If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog Read more
  7. Optimize your engine using compute @ 4C Prague 2018 overview of the compute shader execution and pipeline model explains how instructions are executed, what the difference between uniform and non-uniform work is and how it relates to SGPRs and VGPRs using the example of texture downsampling to present the performance profile of a pixel shader solution and why a compute shader solution can achieve better performance pptx archive wayback-archive Intro to gpu scalarization – part 1 overview of the GPU execution model, the difference between scalar and vector registers and instructions explains the concept of scalarization and how wave level instructions enable this process pptx archive wayback-archive Intro to gpu scalarization – part 2 walkthrough of two different strategies to scalarize the forward+ shading loop provides code, step by step analysis and links to more in-depth presentations pptx archive wayback-archive SIGGRAPH Asia 2018 – Technical Papers Trailer overview of some of the technical papers that will be presented during SIGGRAPH Asia 2018, 4-7 December 2018 in Tokyo niagara: GPU object culling adding support for multiple meshes and GPU frustum culling and submission one Dispatch to execute culling and one ExecuteIndirect is used to draw the rest of the scene code niagara: Faster culling and LOD improving culling performance through the removal of dummy draw calls implementation of LOD selection per mesh support querying of pipeline statistics to gather information about the number of triangles drawn code VK_NVX_raytracing - Triangle A walkthrough that explains all the concepts and shaders necessary to ray trace a single colored triangle using the Vulkan raytracing extension code wayback-archive Accelerated Ray Tracing in One Weekend in CUDA explains how to convert the code from the Ray Tracing in One Weekend book to use CUDA the source code is available here, one branch for each chapter code wayback-archive 2D Signed Distance Field Basics unity tutorial that explains how to create a signed distance field for a 2D circle and rectangle how to apply transformations (translation, rotation, scale) and how to visualize the distance field to aid debugging wayback-archive Picking and Hit-Testing in Metal explains how to implement 3D picking in a Metal application overview of coordinate spaces and how to convert between them hit-testing performed using a ray vs. bounding sphere test wayback-archive Few words about HLSLexplorer a tool, now open source, that allows the compilation of HLSL and shows the disassembly in DXBC and AMD GCN includes a small utility to visualize the effect of a fullscreen pixel shader effect wayback-archive Image Editor Effects list of image effects found in tools such as Photoshop with a small explanation and GLSL code snippets code If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog Read more
  8. An Adaptive Parameterization for Efficient Material Acquisition and Rendering paper on BRDF measurement which proposes a new parameterization that adapts to the behavior of the material able to significantly reduce the number of samples required published a new large database of measured BRDFs that have been captured using this technique paper archive database archive video archive wayback-archive halcyon + vulkan presents an architecture overview of the engine render backends are implemented as DLLs that can be reloaded at runtime multiple backends can be loaded at the same time resource handle system that allows the same resource to point to physical instances on multiple GPUs GPU work is recorded into an abstract command stream that is later compiled into API specific format render graph system that manages resource transitions, lifetimes, and execution order showcase of shader binding model using HLSL spaces concept to separate between update frequencies explanation how the HLSL resource binding model was emulated with SPIR-V using shader patching .pptx archive .pdf archive wayback-archive 2d graphics in Rust discussion - A look at GPU memory management discusses considerations when designing memory components for use with gfx-hal (rust graphics API abstraction) proposes not to use a general purpose allocator but instead to implement simple allocator components and combine them into context-aware allocators on a higher level wayback-archive DXRPathTracer open source path tracer implemented using the DirectX Ray Tracing API 16xAA font rendering using coverage masks, part I presents a technique for font rendering that operates on coverage instead of visibility this allows fonts to remain sharp when moving on the screen and at varying font sizes for each pixel in a glyph, a 4x4 sub-sample grid of visibility samples is calculated ahead of time explains how to use this coverage mask to implement font rendering covering how to sample the coverage mark correctly for axis-aligned font rendering wayback-archive PIX 1810.24 – Support for final DirectX Raytracing API new PIX version that supports the final DirectX Raytracing API version wayback-archive NVIDIA Announces Nsight Graphics 2018.6 full Linux support for Vulkan and OpenGL 4.5 support for final DirectX Raytracing API and new supports Vulkan extensions such as VK_NV_shading_rate_image, VK_NVX_raytracing wayback-archive Existing BC7 codecs don't handle textures with decorrelated alpha channels well shows that BC7 encoders produce compression artifacts when the alpha channel is unrelated to the RGB channels presents a heuristic to decide what BC7 mode to use on a per-block basis to improve the compression wayback-archive profiling: the case of the missing milliseconds case study of a performance regression in League of legends presents what performance data they collected shows what problems they had with the existing data and how a better aggregation of performance data into distinct buckets allows better detection of performance regressions wayback-archive Effectively Integrating RTX Ray Tracing into a Real-Time Rendering Engine provides best practices for applications that use the RTX API talks about acceleration structure creation and updating how to improve memory usage, improve performance and best practices for shader authoring and compiling wayback-archive large scale ambient occlusion: eliminating light leaks presents how to reduce light leaks in a large scale global illumination system each geometry is associated with markup information about visibility zones GI light data is only applied if two pieces of geometry are in the same visibility zone or are visible through connected portals wayback-archive SPIR-V Compression: SMOL vs MARK comparison of two libraries to compress SPIR-V shaders SMOL-V MARK-V compares for compression ration, decompression speed, and library size MARK-V achieve great compression results, but the library has a large memory footprint and is slow at decompressing the data wayback-archive Custom Shaders HLSL and Core Library a tutorial that explains how to create a custom shader for use with the scriptable render pipeline in Unity teaches how to interact with constant buffers presents what is required for GPU instancing to be supported by a shader and how to pass custom per-material data to the instanced meshes wayback-archive Introducing Zink, an OpenGL implementation on top of Vulkan mesa gallium driver that implements partial support for OpenGL 2.1, and OpenGL ES 1.1 and 2.0 on top of Vulkan talks about why this project was started, and what is and is not supported at this point wayback-archive Graveyard Keeper: How the graphics effects are made shows how the lighting system in the 2D game was implemented making heavy use of color remapping LUTs sprites have normal maps, lights move in 3D space with custom light falloffs for lights moving behind sprites discusses how shadows and fog are applied presents how a deformation shader is used to simulate wind wayback-archive niagara: Tuning mesh shaders optimizing mesh shading pipeline, can now reach >20B triangles/second (input triangles, before cone culling) code niagara: Multi draw indirect adding per object transformation and depth buffer support switched to using multi-draw indirect for classical and mesh shader based pipeline code If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog Read more
  9. Mipmapping with Bidirectional Techniques brief overview about what mips are and how to calculate mip selection in a rasterizer explains ray differentials, a technique that can be used for mip selecttion on primary rays discussion of problems with ray differentials on other ray types, possible solutions and look at what other production renderers use solution using a distance to camera metric and presenting the results by comparing against other techniques wayback-archive Entity-Component-Systems and Rendering explains the plugin architecture that enables efficient implementation of high-level graphical features how to interact with the scene, culling, scheduling, and GPU execution wayback-archive DXC Cookbook: HLSL Coding Patterns for SPIR-V SPIR-V shaders can only access global resources HLSL is very flexible with resource usage this post shows what usage pattern DXC is able to transform into legal SPIR-V and what patterns cannot be expressed in SPIR-V wayback-archive River Editor: Water Simulation in Real-Time walkthrough of the development of real-time GPU based water simulation discusses simulation experiments and algorithms used a brief look at the lighting of the water wayback-archive Video Series: Practical Real-Time Ray Tracing With RTX post that provides links to talks with summaries about ray tracing on Nvidia RTX hardware difference between rasterization and ray tracing the structure of a real-time ray-tracing application and the components required how to extend the raster-based application with ray-tracing wayback-archive Turing Texture Space Shading overview of texture space shading technique decouples shading from rasterization rate Turing hardware provides support for computing derivatives in compute shaders and exposes texels that need to be shaded linked video explains the implementation of a texel space shading pipeline wayback-archive MinLod: A Cheap&Simple Method to Increase Texture Details at Acute Angles look at how to adjust mip selection to favor noise over more detail at acute angels wayback-archive Visualizing quaternions - An explorable video series visual and interactive explanation of quaternions and stereographic projection niagara: Parsing SPIRV usage of descriptor update templates SPIRV parser implementation niagara: Meshlet culling cone culling in task shaders two implementations, one using shared memory atomics and one with other subgroup operations HLSL - Spherical-Harmonics collection of HLSL functions to use spherical harmonics Mathematica notebook to verify and visualize SH functions SIGGRAPH 2018 Course: Machine Learning and Rendering all content from the SIGGRAPH 2018 course has been published wayback-archive D3d12info console tool to get collect capabilities information from DXGI and Direct3D 12 If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog Read more
  10. Physically Based Rendering, online the complete 3rd edition of Physically Based Rendering is now online for free the post explains the history of the book and decisions that led to making the book available for free authors can be supported on wayback-archive From screen space to voxel space summarizes voxel ray tracing implementation, memory and performance optimizations show the different artifacts that can be encountered and their solutions wayback-archive Adding multiple bounces next part in the Metal ray tracer series that adds support for multiple bounces to simulate global illumination implements importance sampling for diffuse BSDF wayback-archive Improving material system extending the material system of the Metal raytracer so that multiple materials can be expressed and importance sampled correctly changes sampling heuristic to support multiple importance sampling. This enables both rough and mirror-like surfaces wayback-archive Multilayer Light Simulations: More Beautiful Images, Faster 2-minute video summary of the “Position-Free Monte Carlo Simulation for Arbitrary Layered BSDFs” paper Flavors of Sampling in Ray Tracing overview of the strengths and weaknesses of different sampling techniques in ray tracing presents links to papers that present methods that are aimed at creating better-stratified sampling results wayback-archive niagara: Future of rasterization stream that adds support for rendering meshes using Nvidia mesh shader extensions niagara: Optimizing mesh rendering during the stream, the mesh shader pipeline is optimized performance parity with the classical rasterization pipeline is achieved without GPU culling How to make a fake interior effect with unity using reflection probes shows how to implement interior mapping using the Unity reflection probe system explains how to set up the model and environment to generate the required probes and how to apply the reflections to the windows wayback-archive Rust Mesh Optimizer rust version of the meshoptimizer library is now available the post explains how to setup Rust code to be able to compile, link and use existing C code from Rust wayback-archive Global Illumination in Godot Engine @ Gamelab BCN 2018 the presentation explains how Global illumination has been implemented in the Godot engine talking about GI probe generation, deterministic light baking and the interacting with the shading pipeline How I Grow with Grass Shader walkthrough of a Godot shader that uses particles to spawn vegetation meshes based on height map and feature (biomes) map data wayback-archive Alpha blending using pre-multiplied alpha a brief summary of the usage of premultiplied alpha using Vulkan pre-multiplication is done in the pixel shader, no texture pre-processing is used wayback-archive If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog Read more
  11. Distance Fields explains an O(n) algorithm that calculates 2D distance fields by operating on rows and treating samples as overlapping quadratic parabolas shows ideas to visualize distance fields, generate tiling noise and some use-cases of distance field functions wayback-archive 2018 XDC - Khronos slides from XDC (X.Org Developer’s Conference) Vulkan timeline semaphores allow increasing a 64-bit value on signal and wait on “greater than” a target value unified system for CPU and GPU waits look at how to implement them in the drivers many more talks about OS-level graphic topics wayback-archive Mesh Shader - Implicit Subdivision on the GPU compute shader based adaptive GPU tessellation technique using Mesh Shaders on Turing up to ~25% rendering time reduction at high tesselation rates Introduction to Real-Time Ray Tracing with Vulkan explains the Vulkan ray-tracing extension contains an overview of the ray tracing pipeline, the new shader types and how to interact with the API shows how to generate the acceleration structure, update and compact it as required wayback-archive Deep Compositing and Reprojection explains the mathematical foundation behind deep composition that allows compositing of volumetric effects such as fog wayback-archive Rendering the Moana Island Scene Part 2: A production scene from a hobby renderer walkthrough of the steps required to render the Moana scene in the authors custom path tracer uses a binning scheme on rays combined with on-demand geometry loading to be able to render the scene on a 32 GB RAM machine wayback-archive Project: SDL render batching discusses a change to the SDL render back-end that will batch CPU rendering commands to reduce the number of draw calls required this will improve performance significantly wayback-archive Gfx-hal Tutorial part 2: Vertex buffers next part of the series on gfx-hal usage (low-level graphics API for Rust) adds support for loading and using vertex buffers wayback-archive Ripples For Days explains a water ripple system implementation that uses a top-down projection of ripples onto the water surface in a separate rendering pass wayback-archive distance functions updated SDF function for a capped cone, round cone, and an ellipsoid wayback-archive If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog Read more
  12. niagara: Cleaning up Vulkan stream - part 3 fixing validation layer errors, explanation of pipeline barriers implementation of swap chain resize shader compiler integration with Visual Studio niagara: Rendering a mesh Vulkan stream - part 4 overview and integration of Vulkan extension loader loading an .obj and rendering a mesh using classical vertex pipeline and manual vertex pulling “Cheap” Diamond Rendering explanation of shader for diamond rendering in a forward rendering architecture uses a precalculated cubemap from the inside of the object to simulate internal bounces wayback-archive My journey into fractals discussing many aspects of making a voxel-based game including cone tracing, lighting, shadows, ambient occlusion, volumetric lighting, and atmospheric effects wayback-archive Another View on the Classic Ray-AABB Intersection Algorithm for BVH Traversal presents the steps required to vectorize the Ray-AABB approach by Andrew Kensler results are very similar to the recent jcgt paper wayback-archive Running Average Encoding - Why It Works derivation of the progressive spherical Gaussian encoding technique discussed in last week’s issue wayback-archive Porting My CUDA Path Tracer to ptx-builder/linker explores changes to CUDA path tracer with Rust, what improved since the last post and what problems persists wayback-archive GLSL cross-compiler tool command line tool that allows cross compilation from GLSL to HLSL, GLES and MSL (Metal) implemented using a combination of Glslang and SPIRV-cross A Comparison of Modern Graphics APIs work in progress post comparing API concepts between D3D12, Vulkan, Metal, and OpenGL wayback-archive DirectX Raytracing and the Windows 10 October 2018 Update Windows raytracing support is available starting with Windows 10 October 2018 update wayback-archive Video Series: Real-Time Ray Tracing for Interactive Global Illumination Workflows in Frostbite breakdown of “Real-Time Ray Tracing for Interactive Global Illumination Workflows in Frostbite” into short sections key takeaways for each section is provided in the post wayback-archive Parsing Shader Includes explains how to parse a shader file for includes using regex (implemented using Rust) wayback-archive SRP101 collection of resources to get started with the Unity Scriptable Render Pipeline wayback-archive Perspective Matrices and Depth visualization of floating point precision when a classical OpenGL projection matrix is used wayback-archive Art That Moves: Creating Animated Materials with Shader Graph explanation of Unity shader graph nodes walkthrough of example shaders that allow the creation of a small island scene wayback-archive PIX-1810.02 – Direct3D11 and WinML new PIX features are available with Windows 10 October 2018 can capture D3D11 applications using Direct3D 11 on 12 translation layer and WinML workloads wayback-archive Vulkan SDK adds support for Turing extensions wayback-archive Qualcomm Releases Snapdragon Profiler with Vulkan Support new profiler version now supports Vulkan wayback-archive If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog Read more
  13. Turing Variable Rate Shading in VRWorks explains what variable rate shading is and what use cases it enables a control texture allows varying of the shading rate on a 16x16 pixel grid wayback-archive Turing Multi-View Rendering in VRWorks explains the recent developments in VR headsets and how Turing offers new hardware solutions extensions that allow rendering up to 4 different views, with view-dependent attributes using a single invocation wayback-archive Spherical Gaussian Encoding a new encoding method for Spherical Gaussians that improves quality from previous encoding methods wayback-archive Interior Mapping: rendering real rooms without geometry presents a high-level overview of how to implement interior mapping comments have much information about the timeline of games that used similar techniques wayback-archive Efficient Instancing in a Streaming Scenario discusses a technique to generate instanced geometry procedurally on the GPU using OpenGL compute shaders aimed at filling vast streaming worlds that are broken down into tiles wayback-archive niagara: Building a Vulkan renderer from scratch* new stream coding series about the creation of a Vulkan renderer from scratch the first two episodes implement rendering of a single triangle on screen Adaptive GPU Tessellation with Compute Shaders pre-print of an article that will appear in GPU Zen 2 implements adaptive tessellation using OpenGL 4.5 compute shaders source code: wayback-archive Claybook, raw->typed buffer performance analysis numbers Twitter thread discussing Raw vs. Typed buffer performance on Claybook suggest using raw buffers if supported wayback-archive CUDA 10 Features Revealed: Turing, CUDA Graphs and More overview of new features included in CUDA 10 Multi-Precision Tensor Cores are exposed on Turing CUDA Graphs allow the specification and recording of an execution graph that can be executed multiple times, this reduces overhead and allows the compiler to apply further optimizations interoperability with Vulkan and D3D12 is supported wayback-archive Voronoi Noise explains how to generate 2D and 3D noise in a Unity shader wayback-archive Metal Raytracer - Implementing diffuse BRDF extends the Metal raytracer with obj model loading a simple diffuse BRDF implementation, including frame accumulation and shadows provides a Mitsuba test scene wayback-archive Mesh Shader Possibilities walkthrough of the geometry pipeline on current GPU architectures and how mesh shaders fit into it description of an upgrade path to mesh shaders look at possibilities of future use cases wayback-archive The Peak-Performance-Percentage Analysis Method for Optimizing Any GPU Workload updated post now includes SM warp-issue-stall metrics previously discussed in issue-26 wayback-archive readings on the state of the art in rendering summary of resources for graphics programmers to study and keep up-to-date with the graphics programming community wayback-archive Custom Pipeline Taking Control of Rendering a tutorial that shows how to implement a custom rendering pipeline in Unity implements skybox rendering, culling filtering, sorting and rendering of unlit objects how to improve memory usage and better integration with the Unity frame debugger wayback-archive SIGGRAPH 2018 Tech Talk Videos Now Available! Unreal released the tech talks from SIGGRAPH 2018 Virtual Production in Unreal Engine 4.20, Mixed Reality Production with Unreal Engine, Fortnite: Advancing the Animation Pipeline, Real-Time Motion Capture in Unreal Engine wayback-archive If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog Read more
  14. Introduction to Turing Mesh Shaders new shader stages on Turing that allows the generation of primitives for direct consumption by the rasterizer task shader: emits mesh shader workgroups allows work on larger clusters, the selection of mesh resolution, … mesh shader: generates primitives (index + vertex buffers) OpenGL shader implementation that uses the new shader stages to allow culling on a per-cluster basis and generation of efficient mesh data video recording wayback-archive Challenges of Rendering an Open World in Far Cry 5 talks about the challenges of developing for open world games covers water rendering, physically based time of day model, nighttime rendering lighting, exposure, emissive effects, and tone mapping material blending wayback-archive A Ray-Box Intersection Algorithm and Efficient Dynamic Voxel Rendering a new algorithm to compute the intersection point and surface normal of an oriented 3D box without precomputations or spatial data structures uses rasterizer pipeline to generate screen-space AABB to limit tests to only potentially visible pixels provides GLSL shader implementation wayback-archive Breaking down barriers – part 5: back to the real world explains the evolution of the windows graphics driver model from win7 to win10 how WDDM 2.0 enables the features of D3D12 differences between D3D12 and Vulkan regarding queue submission design D3D12 fences are designed to enable the OS to control command buffer scheduling look at Nvidia and AMD hardware details wayback-archive hybrid raytraced shadows part 2: performance improvements explains optimizations done to the hybrid shadow raytracer change to the way the BVH layout is constructed (Surface Area Heuristic) and memory layout changes enable huge speedups (16ms to 0.8ms on the GTX970) wayback-archive NVIDIA Turing Architecture In-Depth overview of the new Turing hardware architecture description of new hardware features, exposed shader features, and improvements to existing technologies wayback-archive NVIDIA Turing Vulkan/OpenGL extensions an extensive list of OpenGL and Vulkan extensions that expose the new Turing hardware features with short descriptions of each feature wayback-archive Vulkan conditional rendering Vulkan extension that makes it possible to skip parts of command buffers based on the content of a GPU buffer the example uses this to pre-generate a single command buffer and controls visibility of mesh parts from the CPU wayback-archive Shader Showcase Saturday #9: Interior Mapping overview of the interior mapping technique showcase of different implementations and links to further information wayback-archive roughness mip maps based on normal maps? discussing of a technique that tries to preserve normal map variation by generation MIPs that preserve the variance in the roughness map the comments contain links to further reading about this topic wayback-archive Running Microsoft FXC in Docker comparison of DXC (DirectX Shader Compiler) and FXC shader compiler in regards to performance and functional regressions provides a docker file that allows FXC to run successfully wayback-archive Running Microsoft DXC in Docker provides a configuration that allows the DXC compiler to run within docker wayback-archive Signing DXIL Post-Compile explains the process that enables DXIL shaders to be signed after they have been compiled provides code for detecting if a shader has already been signed and how to call the necessary libraries to sign the shader provides a command line utility that can be used to sign DXIL shaders wayback-archive Metal ray-tracer start of a series of posts that will describe the development of a ray tracer using Metal Performance Shaders wayback-archive Vulkan has just become the world’s first graphics API with a formal memory model. So, what is a memory model and why should I care? Khronos released provisional material on the memory model for Vulkan including the specification, extensions for SPIR-V, GLSL and conformance tests wayback-archive Debugging D3D12 driver crash presents a small cross-vendor library for D3D12 that allows collection of information to narrow down GPU hangs to specific draw call ranges wayback-archive The state of Window System Integration (WSI) in Vulkan for retro emulators looks at the state of integration of the Vulkan swap chain with different OS and GPU vendors explains the expected API, what is required for a good experience and how the implementations differ between platforms wayback-archive Smooth Geometry in Real-Time Rendering discusses challenges and possible solutions to undersampling artifacts on curved geometry wayback-archive SIGGRAPH 2018 Course: Machine Learning and Rendering links to the presentations from the machine learning and rendering course from Siggraph wayback-archive DLSS: What Does It Mean for Game Developers? an interview that explains what Nvidias DLSS is (Deep Learning Super Sampling) a trained neural network that is able to infer a 64 sample per pixel supersampled image from a 1 sample per pixel source the model is trained on Nvidia GPU clusters before the release of the game wayback-archive Value Noise explains how to generate value noise in a shader wayback-archive Perlin Noise explains how to generate Perlin noise in a shader wayback-archive Layered Noise extends the Perlin noise implementation from the previous tutorial to support mixing of multiple layers of Perlin noise uses this to generate a dynamic terrain in a vertex shader wayback-archive Using Command Buffers in Unity: Selective Bloom explains how Unity command buffers enable the extension of the Unity graphics pipeline uses this to implement selective bloom on objects wayback-archive If you are enjoying the series and getting value from it, please consider supporting this blog. Support this blog Read more
  15. 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
  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!