Physically-Based Materials – Energy Conservation and Reciprocity

Physically-based materials are easy to use and ensure consistent appearance across different rendering algorithms. This post shows the math behind it and describes why sticking to the physical principles of the light transport is the key to cross-renderer consistency.

Vectorizing smallpt with ispc

Today’s processors can do a lot of work in parallel on a single core. Programs need to be specifically designed for that, as this functionality is exposed via specialized instructions such as SSE or AVX instructions on x86 processors. By operating on wide registers storing vectors instead of scalars, a single SSE or AVX vectorContinue reading “Vectorizing smallpt with ispc”

Dominant Colors in Movies

Inspired by Nordlicht I made a small program that finds the most dominant colors in movies. Using k-means clustering, it builds a color palette with 32 colors and calculates the number of pixels with smallest distance to the cluster centers. As it would be far too computationally expensive if clustering worked on the complete setContinue reading “Dominant Colors in Movies”

Shared Photos – a UPnP/DLNA image viewer for Android

‘Shared Photos’ is a small image viewer for Android that loads and displays images stored on an UPnP/DLNA server in the local network. I wrote it in the last weeks to become familiar Android development. It has some unique features which I could not find in similar apps on Google Play: Support for Low ProfileContinue reading “Shared Photos – a UPnP/DLNA image viewer for Android”

Calling functions in DLLs from JavaScript

During the past few weeks, I worked a lot with Google’s V8, the JavaScript engine used in Google Chrome. The engine can be easily embedded into applications, providing the ability to write some functionality of the application in JavaScript instead of C++. However, from within JavaScript code, there is no way out of the sandboxContinue reading “Calling functions in DLLs from JavaScript”

HyperlapseMB: Hyperlapse.js with Motion Blur

With the help of GSVPanoDepth.js (see previous post), I have created HyperlapseMB, a fork of Hyperlapse.js that uses the depth information to create a nice motion blur effect. The images are filtered as a pre-processing step before the hyperlapse is played. The algorithm is similar to the technique used as post-processing effect in video gamesContinue reading “HyperlapseMB: Hyperlapse.js with Motion Blur”

Extract depth maps from Google Street View

Besides high-resolution images, Google Street View also provides a depth map for each panorama, containing the distance from the camera to the nearest surface at each pixel. As far as I know, there is no official documentation of the format, but there are some open source projects which contain code showing how to interpret theContinue reading “Extract depth maps from Google Street View”

Ray Marching Signed Distance Fields

This is my first attempt in real-time rendering of a procedurally generated terrain: The terrain is generated from 3D Perlin Noise. It is converted to a signed distance field using Danielsson’s distance transform and stored in a 3D texture of size 256x256x256 on the GPU. The scene is rendered directly from the distance field, applyingContinue reading “Ray Marching Signed Distance Fields”

Third-Order Texture Filtering using Linear Interpolation

A straightfoward implementation of bi- or tricubic texture filtering requires lots of texture lookups. As texture lookups are slow on current graphics hardware, reducing their number greatly improves the performance of high-order filtering kernels. In contrast, linear interpolation is relatively cheap as it is supported by the hardware. This fact has been exploited by SiggContinue reading “Third-Order Texture Filtering using Linear Interpolation”

Edge-Avoiding À-Trous Wavelets in WebCL

WebCL is a new standard of the Khronos Group that allows web applications to benefit from the massive power of todays GPUs. It is based on OpenCL, like WebGL is based on OpenGL. Recently, I wrote a small demo that shows how WebCL can be used in image processing. I decided to implement the Edge-AvoidingContinue reading “Edge-Avoiding À-Trous Wavelets in WebCL”