When reading about volume rendering on the internet, I discovered an irritating fact: there is no consistent definition of what a ‘voxel’ is. Most certainly when it comes to various rendering engines, everything that renders something which contains cubes/blocky elements gets the voxel renderer tag hastily slapped on.
A good example is the immensely popular Minecraft. It uses a voxel-based representation of the world – this makes it easy to generate and manipulate terrain, which is what Minecraft is all about. However, the end result is still rendered as polygon-based cubes, using hardware acceleration. I’m not saying this is cheating or that notch’s renderer is not a great technical achievement – just pointing out how easy it is to get confused.
So let’s get this straight. This is my view on the terminology:
In Direct Volume Rendering (DVR), you’re rendering a data grid. This is a rectangular 3D volume which contains data points with equidistant spacing. Notice how different this is from traditional mesh-based rendering: a mesh consists of a geometric description of triangles and their position, and all edges can have a variable length. A data point in this grid is what you would call a voxel.
How come we associate voxels with cube-like representations then? Well, in this grid, you have to define what volume this data point is representative for. The easiest, most straightforward way, is for every point to be representative of a cube with the spacing of the grid as length and the voxel data point in the middle.
But the choice is up to you: if you want your voxel to represent data in a sphere around it, go ahead. If you want to place it at the left-front corner of a cubic space, that’s another possibility.