I think he means that you cannot rotate an object and keep it aligned to the voxel grid at the same time. It would be a lossy operation, and require interpolation, just like rotating an image on a 2D grid.
But if the resolution of your grid is smaller than the size of the voxel, that wouldn't matter much - and you could keep rounding errors in check by anchoring larger units of voxels at a certain location in space. I can see the drawbacks of the voxel cloud approach (requires much memory, what algorithm is fast enough to do voxel culling on such a massive amount of data, what about animation) but the 'can't do rotation' doesn't seem like a particularly strong argument (unless I'm misunderstanding the actual argument, which is very well possible...)
I'm not saying it is entirely impossible. However, rotating volume data (which voxels are) is computationally a lot more intensive. With polygonal objects you can just change the transformation matrix and re-render the screen and you're done. At most, you have to deform the vertices that make up the outer shell of the object to do things like make a person walk.
With voxels, you'd have to recompute all the voxels of the object on a 3d grid. Also there are issues with ragged boundaries, which can be prevented by using antialiasing, but which is probably trickier (=more computationally intensive) than in 2D...
The displacement of the voxels can also be done with a simple matrix transformation, as far as I see it; same like you'd do for the nodes in a 3d model, same as you'd do it with a 'traditional' 3d pipeline (OpenGL/DirectX) - unless I'm behind the curve and animation itself is done on the GPU nowadays, but I don't think it is.
Ragged boundaries wouldn't be an issue as long as there are enough voxels. What I understand, that's the whole point - you just have lots and lots of voxels, at a much finer resolution than you'd ever want to render at, so that you just (by brute force) render once without having to worry about anti-aliasing, gaps between planes etc.
The displacement of the voxels can also be done with a simple matrix transformation, as far as I see it
Yes, but the point is that you have to displace much more voxels than you'd have to displace vertices otherwise. Vertices are only on the boundaries of the object (and quite sparsely at that if you use normal mapping shaders etc wisely) but voxels fill the entire object densely...
I guess you could do that, make the objects hollow. But that will obliterate the "low hanging" advantages of voxels such as destructable terrains, being able to cut things in pieces, realistic physics simulation etc...
Rotatin (in general - transforming) voxels in real time is difficult compared to polygons, because with polygons you only transform vertices, and in voxels you have to transform every voxel.
EDIT:
If you are spekaing about preprocessing data - yes - you can rotate as much as you want, the only problem will be that object instanced 1000 times with different orientation/scale will take 1000 times more memory than object instanced 1000 times with the same orientation/scale. With polygons there is no difference.
Sorry, by 'preprocessing' I meant things still done on each frame, but anything that is not raw pushing-vertices-into-the-gpu-pipeline, i.e. all polygon culling, LoD simplification etc.
But yeah, the amount of data you'd have to work on would be much greater, but the way I interpret all of this is that he's found algos to do that very fast, regardless of whether it's a lot of data.
Comments
I think he means that you cannot rotate an object and keep it aligned to the voxel grid at the same time. It would be a lossy operation, and require interpolation, just like rotating an image on a 2D grid.
But if the resolution of your grid is smaller than the size of the voxel, that wouldn't matter much - and you could keep rounding errors in check by anchoring larger units of voxels at a certain location in space. I can see the drawbacks of the voxel cloud approach (requires much memory, what algorithm is fast enough to do voxel culling on such a massive amount of data, what about animation) but the 'can't do rotation' doesn't seem like a particularly strong argument (unless I'm misunderstanding the actual argument, which is very well possible...)
I'm not saying it is entirely impossible. However, rotating volume data (which voxels are) is computationally a lot more intensive. With polygonal objects you can just change the transformation matrix and re-render the screen and you're done. At most, you have to deform the vertices that make up the outer shell of the object to do things like make a person walk.
With voxels, you'd have to recompute all the voxels of the object on a 3d grid. Also there are issues with ragged boundaries, which can be prevented by using antialiasing, but which is probably trickier (=more computationally intensive) than in 2D...
I'm still not convinced by these arguments ;)
The displacement of the voxels can also be done with a simple matrix transformation, as far as I see it; same like you'd do for the nodes in a 3d model, same as you'd do it with a 'traditional' 3d pipeline (OpenGL/DirectX) - unless I'm behind the curve and animation itself is done on the GPU nowadays, but I don't think it is.
Ragged boundaries wouldn't be an issue as long as there are enough voxels. What I understand, that's the whole point - you just have lots and lots of voxels, at a much finer resolution than you'd ever want to render at, so that you just (by brute force) render once without having to worry about anti-aliasing, gaps between planes etc.
The displacement of the voxels can also be done with a simple matrix transformation, as far as I see it
Yes, but the point is that you have to displace much more voxels than you'd have to displace vertices otherwise. Vertices are only on the boundaries of the object (and quite sparsely at that if you use normal mapping shaders etc wisely) but voxels fill the entire object densely...
> but voxels fill the entire object densely
I was under the impression that they fill the object's hull
I guess you could do that, make the objects hollow. But that will obliterate the "low hanging" advantages of voxels such as destructable terrains, being able to cut things in pieces, realistic physics simulation etc...
Rotatin (in general - transforming) voxels in real time is difficult compared to polygons, because with polygons you only transform vertices, and in voxels you have to transform every voxel.
EDIT: If you are spekaing about preprocessing data - yes - you can rotate as much as you want, the only problem will be that object instanced 1000 times with different orientation/scale will take 1000 times more memory than object instanced 1000 times with the same orientation/scale. With polygons there is no difference.
Sorry, by 'preprocessing' I meant things still done on each frame, but anything that is not raw pushing-vertices-into-the-gpu-pipeline, i.e. all polygon culling, LoD simplification etc.
But yeah, the amount of data you'd have to work on would be much greater, but the way I interpret all of this is that he's found algos to do that very fast, regardless of whether it's a lot of data.