A Voxel Renderer for Learning C/C++

This article describes the construction and optimization of a voxel map renderer. The renderer is designed to run on the GPU, while the CPU is used to update the map for the next frame. It turns out that such a renderer can reach up to 1 billion rays per second…

OPT#4:SIMD (part 2 of 2)

In the previous post I introduced the concept of single instruction, multiple data using 4 bytes in a 32-bit unsigned integer, and using Intel’s SSE instructions. Using SSE instructions, a sequence of so-called vector instructions operates on four instances of a single scalar flow. Take the following simple example: vec3…

OPT#3:SIMD (part 1 of 2)

This is the third article in the series of posts on Optimization, which accompany online lectures for the IGAD program of the Breda University of Applied Sciences. You can find the first post (on profiling) here. The second post, on low level optimization, introduced the Rules of Engagement, which can…

Optimizing Trilinear Interpolation

This is going to be a short post. It is about a function that is heavily used in the Lighthouse 2 renderer: FetchTexelTrilinear, which can be found in sampling_shared.h. It roughly looks like this: float4 FetchTexelTrilinear( float lambda, float2 uv, int offset, int width, int height ) { int level0…

Speeding Up Lighthouse 2

Last week an updated version of the Lighthouse 2 benchmark was released. This version is about 15% faster, and produces images with less noise. In fact, rendering 10 paths per pixels (samples per pixel, or spp) takes as long as it took the February 27 version of the benchmark to…

Announcing CodeMob

This is a quick post to get the beta for CodeMob online. More information will be posted in the near future. CodeMob is yet another fantasy console, inspired by Lexaloffle’s Pico-8 and Morgan McGuire‘s Nano+Quadplay projects (there’s quite a few more). CodeMob strives to be an actual mobile development platform:…