ÜberLame tree generator

GUI screenshot

This is a really simple tree generator. It's input is set of parameters and random generator seed and output is nice tree mesh. It's using custom OpenGL GUI and is therefore platform independent (uses GLUT). There are still some features left to be implemented so it's not available to download. Once it's finished, there will be free limited demo and complete generator, along with SDK. Since i'm ecologically engaged, full version will be available in exchange for some symbolic donation to some 'green' organization.

status: functional, under development
language: C++
os: os independent

version history

versionchanges from previous version

downloads

versionrelease datefilerelease notes

Texture symmetrizer

Texture symmetrizer is accompanying project of tree generator, it's purpose is to create repeatable textures from photographs, especially bark textures. It is very simple GLUT application with very simple GUI, filters are implemented in GLslang and therefore run on GPU in real time. There's a second project as well with CPU filters, but it doesn't offer nearly the same functionality. Image filters used in this project are very common and should be found in any image processing library.

Model scenario is coming in front of the tree, shooting it's whole picture, details of bark on trunk and branches and couple of leaves. Then coming home, generating appropriate textures and modelling the tree.

To make image of bark repeatable, two essential steps are required. First, lighting equalization and second, seam removal. Lighting equalization is realized by local histogram equalization. Histogram equalization is point operator, taking in account minimum and maximum pixel value in the whole image. Local histogram equalization is just the same, the only difference is local minimum and maximum is used.

cropped (original) picture

Picture above is original photograph without any modifications. It shows trunk of apple tree, note non-uniform shading. It would be well noticeable on repeating texture. First step is to generate local minimum and maximum images:

local minimum local maximum

Radius is quite important and it's good to toy with it for a while. We can't directly use these images for histogram equalization, because the circles would come out quite apparent. So we employ gaussian filter:

local minimum after gauss filter local maximum after gauss filter

This filter has double radius of local min / max filter, it might be useful to tweak it as well. We can finaly combine images and get locally equalized image:

local equalized picture

This is what we call the result. It's easy to get over-saturated images, desaturating and little gamma correction helps. Note brown bark color diminished and the bark is now blueish. It is therefore useful to darken local minimum image. GPU version with GUI allows that.

On the following image, you can see effects of local histogram equalization on natural scene:

original picture
local equalized picture

Radii of min / max filter and gauss filters can make great difference. It might be desired to work with monochrome min / max and enhance image contrast only (do not change color tones).

Seam removal is very simple, narrow bends from bottom and right border are cut and blended to top and left border respectively. To aid making the effect less noticeable, perlin noise is used to distort blending.

status: functional
language: C++
os: os independent

version history

versionchanges from previous version
v0-

downloads

versionrelease datefilerelease notes
v02008-06-02gpu_texsym.zipvery lame GUI, no documentation available
ÜberLame r17 is required in order to compile this