But while the technique is attractive, it isn’t without its faults. The main problem stems from how building octrees is computationally expensive, which means that it’s not realistic to count on modifying the data structure at run time. This disadvantage makes using voxel octrees for dynamic geometry particularly complex. Id Software’s proposal for getting around this roadblock consists of using octrees only for static geometry, while all dynamic elements of a scene would be displayed using good ol' triangle rasterization.
It’s a shame that such a new step forward, visually, has to be accompanied by such a restriction. With a generational change in technology, gamers also expect to move to a new level of interaction with the landscape. When you mention voxels, the thing that comes to a gamer’s mind is worlds that would finally be destructible, where you can blow up a wall and see the geometry change, revealing different layers of materials. But for the moment, at least, it appears that’s not on tap for the immediate future. We’re likely to keep our indestructible walls for a few more years.
Another problem has to do with the streaming system. As we’ve said, this rendering technique is particularly well-suited for gradually increasing the level of detail as you approach an object, with the system taking care of calling in data from the octree as a background task. Due to the way the data is organized, this can be done fluidly. But what happens when we teleport to another part of a world? The geometry is unique and the streaming system gets caught with its pants down. So, you can expect very basic geometry for a while, and then a gradual refinement. Otherwise game designers will have to work around such a shortcoming by avoiding that type of situation.
The problem isn’t unique to voxel octrees, as all streaming systems are based on the hypothesis of relatively continuous variation of level of detail and can’t keep up with sudden changes. But currently, that’s a problem only with textures. And while seeing a low-resolution texture for a second or two is ugly, seeing a low-resolution octree is likely to be visually horrific.
Another disadvantage we can run into with voxels has to do with pixelation. If we display only the color of the voxels intersected by the ray, the edges of the cubes are discernible, which results in a old-fashioned effect that’s out of place with a technology that’s supposed to be the future of rendering techniques. Fortunately, this problem can be solved by using trilinear filtering: instead of filtering in two dimensions, as with textures, the filtering is done in three dimensions.
The final challenge is that, despite the advantage of the octree data structure, the memory space needed for storing an entire world in the form of voxels is enormous. As we’ve seen, that doesn’t really affect the resources necessary for execution. But, on the other hand, to be able to manipulate, then store, and finally distribute such data structures, id Software is going to have to do some serious work on compression techniques. Jon Olick has said a few things about this topic, and he seems happy with the compression rates that have been achieved.