Depth Gradient for Implementing the SVGF Denoiser

When I supervised a student implementing different image denoisers into my line renderer LineVis, we faced the problem that SVGF, one of the most often used denoisers for real-time path traced applications, is dependent on ∇z(p), which the paper describes as the "gradient of clip-space depth with respect to screenspace coordinates"1 at the point p. It is used in formula (3) of the paper …

Fragment Shader Interlock Performance on the Steam Deck

This is an update of the article "Fragment Shader Interlock Performance (α Compositing)", where I previously had a look at the performance of a GPU feature called fragment shader interlock for alpha composition. In this article, I said: I would love to also test whether fragment shader interlock also comes out as the performance winner on AMD hardware, but unfortunately AMD does not …

Precision of Hardware-Accelerated Trilinear Interpolation

A student I'm currently supervising found an interesting phenomenon on NVIDIA GPUs. When using trilinear interpolation with a 3D texture in Vulkan, the interpolation will not return interpolated values less than 1/2048, even if the texture stores 32-bit floating point values. In the image below, you can see a test case I created where a very small step size is used for volumetric path tracing and …

C++/Matlab Inter-Process Communication (IPC)

In a project I'm currently working on together with a colleague, we wanted to enable inter-process communication between a C++ program and a Matlab program. At first we thought of using TCP/IP directly for communication. However, TCP is a stream-oriented protocol and we wanted to avoid having to do message framing of the stream data ourselves. Thus, we decided to use ZeroMQ with the request-reply …

Fragment Shader Interlock Performance (α Compositing)

Over the last decades, how GPUs can be used radically evolved. In the olden days™, GPUs had specialized units for vertex and fragment processing. Due to multiple reasons, one being that different applications may utilize these different types of units to different degrees, a shift to unified units happened that would perform both vertex and fragment processing. For a more in-depth view on the …

Archive Size & Decompression Performance

For a project I've been working on recently I need to store lots of plain text .vtk data set files. In order to reduce the disk space these data sets need, I wanted to compress them in an archive to save space and only decompress certain files when the user requests them to be loaded. Below, you can find the read (decompression) performance for loading one example file from different archive …

Image Cropping Tool Written in Python3

During many of my previous computer graphics and visualization projects, I needed to create screenshots of rendering results to include as figures in a thesis, report or paper. However, the screenshots my visualization programs output are usually exactly the size of the viewport. So every time when I wanted to include some visualization result, I needed to first make sure that the data set fills a …

Visualising Conic Sections

In the WebGL canvas in this article, the user can visualize conic sections by altering the coefficients of the formula above the canvas. The conic section is shown for z = 1. Conic sections are defined by the quadratic form ax² + by² + 2cxy + 2dxz + 2eyz + fz² = 0. Aliasing is reduced by implementing rudimentary anisotropic filtering as discussed in …

Geometry Shader-based 2D Shadows

For the lecture Image Synthesis at the TU München, I adapted the two algorithms shadow volumes and shadow mapping for the use in 2D scenes. In the canvas above you can test one of the two algorithms - shadow mapping. At first I implemented the two algorithms using C++ and OpenGL. Both make use of geometry shaders and layered depth maps for performant rendering. However, unfortunately neither of …