id Tech 6, voxels strike back.

Can you use something like morph on voxels, without screwing up the accelerated data structure?

What about control points on voxels with some sort of interpolation to fixed any crack on the surface?

What about this: It was a stupid example. :cry: But I hope the message was clear.


Static geometry -> ray-casting and voxels
Dynamic geometry -> rasterization and polygons
 
If you go to object space don't you have to rebuild the data structure again ?
I'm basically just throwing ideas around, so feel free to ignore. ;)

Consider it like a bounding box around the object which you skew and you get new starting and exit points for each ray.
This should make simple animation possible, but for character animation some sort of prism control mesh would be needed.

Basically this would be very similar to what you would do with a object with displacement maps, but with 3d data instead of heightmap.
You could bend the object in what ever way you want.
 
Can someone explain in laymans terms how a voxel differs from a polygon? I understand what polgons are (triangles strung together in shaped sheets to form the "shell" of a 3d object).

So how do voxels differ?

Cheers
 
Cheers, so Voxels are basically 3d building blocks as opposed to 2d triangle polygons which need towe woven together in a mesh to create a 3d object?

What shape do voxels take or can they take whatever shape the artist determines? And how big are they in comparison to polygons in a modern game?
 
Did neither of you look at the youtube video in this thread? Those are voxels.

As was said if you get voxels that are smaller than pixels on screen they are small enough you cannot really see them, though AA might be strange I don't know enough about it to know how that would work. It might be easier for all I know.

There is a voxelstien 3d too I think.
 
I'd say voxels are pretty analogous to pixels, so while the easiest way to think of them is as a bunch of tiny cubes, the better way would be as a bunch of point-samples in an ordered grid.

One way of rendering them is to define an implicit surface function based on voxels in some neighborhood, in which case you can get away with having them pretty large. I've used this for rendering voxel-terrains, and there was a similar approach described in a Eurographics 2009 paper..

I suppose you could ray-trace against really tiny cubes or spheres, but I'm not sure how you'd determine normals in that case. Anyone know what sort of technique is being proposed here?

edit: looking at the video again, I guess they simply store normal info in the voxels along with color?
 
Last edited by a moderator:
My problem with voxels (apart from the animation) is that they are so much less compact and less efficient to render than a displacement mapped polygon while a lot of the time they represent the exact same data. Their only real advantage is the relatively smooth dynamic LOD, where with displacement mapped polygons you run into trouble as soon as the polygons get "small".

Maybe a hybrid would be possible.
 
My problem with voxels (apart from the animation) is that they are so much less compact and less efficient to render than a displacement mapped polygon while a lot of the time they represent the exact same data. Their only real advantage is the relatively smooth dynamic LOD, where with displacement mapped polygons you run into trouble as soon as the polygons get "small".

Maybe a hybrid would be possible.

I just like the idea of a truly 3d world, not an eggshell world. Previous efforts to allow you to blow holes in things and dynamically generate geometry from polygons to seal it were ok, but lacked something that I hope voxels will have.
 
You can store normal information to voxels just like you would in anything else, I would guess that deferred approach would work nicely.
There is no reason why normal lighting/shadow tricks wouldn't work.

Is there a reason to actually touch the voxels?
Wouldn't it be easier to skew the object-space into a different shapes.

You'd think that it'd be a waste to not use the rich voxel structure itself in calculating the lighting. Some kind of deferred method sounds mandatory for speed, maybe using some kind of formula with respect to adjacent, ray reflecting voxels. Storing extra normal data sounds fine too, though it shouldn't be too wasteful to calculate dynamically if the voxels were placed into a well designed data structure.
 
http://www.tomshardware.com/reviews/voxel-ray-casting,2423.html

Small overview of voxel rendering and ID Tech 6.

It would seem you would need to find the right game / design to work with a static voxel world, but I guess then you could do a bit of precomputed lighting and shadows for the static geometry and go for a very realistic look. While I tend toward more dynamic worlds, a game like Halo 3 is fairly static in terms of geometry, lighting, and shadows so I can imagine games with a similar presentation style and gameplay mechanic could really make a visual leap.
 
It would seem you would need to find the right game / design to work with a static voxel world, but I guess then you could do a bit of precomputed lighting and shadows for the static geometry and go for a very realistic look. While I tend toward more dynamic worlds, a game like Halo 3 is fairly static in terms of geometry, lighting, and shadows so I can imagine games with a similar presentation style and gameplay mechanic could really make a visual leap.

I think a voxel based terrain can be more dynamic than current triangle based terrain. A node of an octtree can dynamically "expand" to cope with local changes of the terrain, i.e. a rocket explosion may dig a real hole in the terrain. IIRC this is actually what Worms 3D did: they use voxels for deformable terrain, which is an important factor of Worms games. However, it renders the voxels with triangles, so basically what you get is the "cubic" representation of voxels. And the voxels are fairly big.
 
But what would that do to an Octree that is used for acceleration / compression? The ID stuff I have read indicates that their approach would be static as they are raycasting to optimize for speed and size.
 
But what would that do to an Octree that is used for acceleration / compression? The ID stuff I have read indicates that their approach would be static as they are raycasting to optimize for speed and size.

The whole terrain is static and pre-computed into an oct-tree, but you can have minor changes. Basically, if your change is in an already splitted node, you just change the content. Otherwise, you split the node into smaller nodes to handle new data.

As long as you don't change the voxels arbitrily, it shouldn't inflat the data size too much. Consider this: supposed that you have a big ball made of voxels. When you use oct-tree to reppresent the ball, most of the smaller nodes are actually on the surface of the ball (assuming that the ball is completely solid inside). Now, when you want to do some dynamic deformation with the ball, it's very unlikely that you'll want to dig a hole inside the ball where no one could ever see. What you'll want to do is to make some changes on the surface. Since the surface is mostly represented with smaller nodes, you probably don't even have to split these nodes very frequently.

If, by some chance, you need to split a very large node (such as, some one decided to bombard the ball repatedly so it reaches the inner core), splitting the node is also only a local computation (i.e. it only affect the node you want to split, other nodes are unaffected), so it should be fairly quick.

So by making terrain and some mostly static structures (such as houses) with voxels, it's actually more dynamic. For example, you may be able to blow a big hole on the wall of a house, then jump into the house through the hole. In most games where houses are represented with triangles, the wall is most likely just a few triangles, so it's very difficult to actually dig a hole inside these few triangles.

Some elements are probably more difficult though. For example, if you want your voxels to have physical properties (such as, if you blow up everything under the roof, the roof should come down), then it can be more complex. But by treating every movable objects as different objects, it shouldn't be more complex than current triangle based objects, IMHO.
 
Some elements are probably more difficult though. For example, if you want your voxels to have physical properties (such as, if you blow up everything under the roof, the roof should come down), then it can be more complex. But by treating every movable objects as different objects, it shouldn't be more complex than current triangle based objects, IMHO.

True, but I would want an experience that is at least as dynamic as what Red Faction: Guerrilla can offer now (and then some :)).

This is one of the reasons why perhaps it is good that PS4, Xbox 720, etc... are not too close to launching... I would like to see the benefits of voxels (like you were saying being able to nicely deform/interact with the level's geometry while maintaining a very dynamic and physics based world geometry).
 
Back
Top