You need the Adobe Flash plugin to see the animation.
screenshot voxelizer

Voxelizer, Convert your 3D model online into a voxel representation.

  • In addition to standard cubes, adjustable beleveled cubes are also supported.
  • Your 3D model is not stored on a server; all data is processed on your local machine.
  • Input .OBJ or .DXF.
    Output, .OBJ, .DXF, .XML or .POV.
voxel object
model, rendered in pov-ray
Original model.
voxel object with cubes, rendered in pov-ray
Voxel model made of 8 x 8 x 8 cubes.
voxel object with beveled cubes, rendered in pov-ray
Voxel model made of 8 x 8 x 8 beveled cubes.

General information

This application converts a 3D computer model representation into a voxel representation or voxel model.
The number of voxels is adjustable, so is the overall size of voxels.
In addition to standard cubes, adjustable beleveled cubes are also supported.
The calculated voxel representations can be stored and can be used in most commercial and non-commercial 3D programmes, such as blender, povray or cinema4d.

The orientation of the model on the screen does not influence the way the voxel representation is exported.

Copyrights

The generated voxel representation is free for non-commercial use.

The legolizer might be interesting for you; convert any arbitrary polygon-based 3D model into a 3D LEGO® object.
featured in:


How to transform polygons into voxels

A voxel is an enclosed three-dimensional shape, mostly a cube, although it can be any regular, more complicated shape. Voxels are positioned in a symmetrical/regular three-dimensional continuous grid.
For simplicity a cube is used in the example.

To build a voxel object, you need to know whether a voxel is visible - occupied - or invisible - empty. You can build your voxel object manually or by using a code. This tutorial explains how to build a voxel object by code. You need a polygon based 3D model as input.
To create a voxel object by using a code, you need to know which voxels in the three-dimensional continuous grid contain (part of) a polygon. If (part of) a polygon is inside, the voxel is visible, if not, the voxel is empty.

Two dimensional

The position of a two-dimensional rectangle with a dimension of 1.0 x 1.0 ( horizontal x vertical ) can be described by using a two-dimensional position ( x, y ). If you use the centre of the voxel as a starting point, all the horizontal and vertical positions between -0.5 and 0.5 are related to the voxel positioned at 0.0, 0.0.

infographic point in voxel
point in voxel

The formula is very simple: you have to round the two dimensional positions.


     xvoxel = ( x + ( x < 0.0 ? -1.0 : 1.0 ) * ( voxelWidth  / 2.0 ) ) / voxelWidth;
     yvoxel = ( y + ( y < 0.0 ? -1.0 : 1.0 ) * ( voxelHeight / 2.0 ) ) / voxelHeight;

     xvoxel = ( xvoxel < 0.0 ? ceil( xvoxel ) : floor( xvoxel ) ) * voxelWidth;
     yvoxel = ( yvoxel < 0.0 ? ceil( yvoxel ) : floor( yvoxel ) ) * voxelHeight;
    

The horizontal and vertical dimensions of a voxel is not necessarily the same, this may vary depending on your purpose and/or according to taste.

infographic point in voxel
point in voxel
Three dimensional

A voxel is not two-dimensional but three-dimensional: depth is added to the horizontal and vertical dimension. When adding depth, the same calculations are used to convert a position into a voxel position. A voxel position is described by using three numbers; a horizontal position, a vertical position and a depth position.

If you want to transform your polygon-based 3D model into a voxel representation, you need to know if (part of) the polygon lies within a voxel. So it seems logical to think that you need a polygon cube intersection. This requires some mathematical skills that may be difficult to understand for most people. ...You might want to stop reading here, but wait... if you have understood the introduction so far, you're done; it will not become more difficult!

Normally, a polygon has three vertices. The space inside these three vertices is the visible surface of the polygon.

A simple method to convert a polygon into voxels is soly using the vertices of a polygon.

Each vertex is a three-dimensional position such as 13.45, 20.5, 120.0 ( x, y, z ). To find out to which voxel the vertex is related, you need to convert the three-dimensional positions into a voxel position, as described in the introduction.

Unless a polygon is very small, it is usually bigger than one single voxel. To convert the complete polygon into voxels, you must subdivide the poylgon and check whether all the vertices are related to the same voxel. If this is the case, you can store the single voxel position and you are done.

If the three vertices are not related to the same voxel, you must further subdivide the already subdivided polygon and check whether all the vertices are related to the same voxel. If not, futhter subdive the already subdivied polygon, and so on (see image).

infographic polygon subdivision
polygon subdivision

The process of subdividing is called recursion; the outcome of the calculation will be used as the input for the same calculation.

In some situations, you may continue subdividing endlessly, without getting the right outcome. Sooner or later your computer will give some sort of warning or - worse - crash.
If the size of the (subdivided) polygon is small enough, say one tenth of the voxel dimension, you can stop the subdivision in order to prevent problems. Calculate the voxel position for each individual vertex and store them separately. Instead of one single voxel position, you have at least two, or maybe three (adjacent) voxel positions. That's all there is to it!

infographic polygon voxelisation
black = all vertices are related to a single voxel position
red = all vertices are not related to a single voxel position

By using this method, a voxel position is calculated several times so you have to check whether the voxel position has already been calculated. If not, store the position. If the voxel position is calculated previously, ignore the calculated voxel position.

Storage

You have some options to store your voxel information.

You can store the voxel position as a combination of x, y and z (floating point) numbers. Depending on your computer and operating system, a number takes 32 or 64 bits in a memory and/or on a disk. If you store three numbers, you need at least 3 x 32 = 96 bits... not a huge number nowadays.

A more sophisticated way to store your voxel information is by using individual bits; instead of 96 bits for a single voxel position you can use the same 96 bits for up to 96 voxel positions(!) If a bit has the value 1 - true - the voxel is present, if the value is 0 - false - the voxel is not present. You need some extra information for this approach. You need to number the voxel positions in your voxel universe. The number relates to a specific bit.

For example, you have a very small voxel object, with three horizontal voxel positions , three vertical voxel positions and three voxel depth-positions. The total number of voxel positions in your voxel universe equals 3 x 3 x 3, that is 27.

A real number, or so-called integer, like 234055, 12 and so is stored as a binary number in your computer. Each bit in the binary sequence which represent the number corresponds to a voxel position in the voxel matrix (see image).

infographic voxel matrix
voxel matrix

The first bit is related to the front left bottom voxel position, and so on. If the value of the first bit equals 1, the voxel is present. If the value of the bit equals 0, the voxel is not present.
Most voxel objects contain many thousands of voxel positions, so using a more sophisticated way to store the information pays off; with a minimum amount of data you can efficiently store your voxel data.


Arjan Westerdiep
freelance front-end developer /
visual artist
SOJ Palmelaan 84,
9728VB Groningen,
The Netherlands