Splatter, C++ (2002)

Early in the summer of 2002, while I was still in the True Dimensions project. At that time we had just started rebuilding our game engine from scratch to better accommodate new technologies like vertex and pixel shaders.

I was inspired to develop this tool by some early Doom3 videos where this technique was evident. It was referred to as RenderBump. Crytek’s PolyBump was announced a month or so after I started researching on this subject.

truebump

During my research I found some references that described this compression method that went all the way back to 1996 in a paper named “Fitting Smooth Surfaces to Dense Polygon Meshes” by Venkat Krishnamurthy and Marc Levoy. It described a method of replacing the polygonal meshes with a set of smooth B-spline patches, while preserving the detail using displacement maps or normal maps generated from the original model.

Later I came across a paper from 1998 named “Appearance-Preserving Simplification” by Jonathan Cohen, Marc Olano, and Dinesh Manocha. This paper described a method of replacing the reference model with an automatically generated simplified version and preserving the detail using normal maps, again generated from the original model.

I had, at this point, all I needed to develop this tool. I did some command-line tools before developing this visual tool. Splatter was developed in two weeks during a long True Dimensions meeting in Aveiro (Portugal) in August of 2002. It works with a proprietary 3d file format developed by myself while part of True Dimensions. It supports diffuse, gloss and height maps for extra bump detail. Also supports super-sampling anti-aliasing and a dilation filter. The AABB/Octree code was written by Tiago Sousa at the time, I used it to speed up the raytracing algorithm. I called this method TrueBump.

Here’s a couple of screenshots:

splatter1 splatter2

And, of course, the famous Stanford bunny:

splatter_bunny1

splatter_bunny3 splatter_bunny2

The high poly version of the bunny has 69664 triangles while the low polygon version has 643 triangles which makes it roughly about 1% of the original model.