Zaphos
Guest
|
|
« Reply #40 on: April 28, 2008, 01:30:05 AM » |
|
Could it be that the reason voxels tend to look bad and are rendered slower is because generations of 3D graphics cards were built with polygons in mind? Wouldn't they potentially be much faster if 3D graphics cards were built with them in mind instead of polygons? I mean there are all kinds of things specific to polygons in graphics cards, and I imagine nothing or almost nothing specific to voxels, even though both are valid ways of representing a 3D world visually.
An issue with "voxels" is that it's a really vague term, so it's hard to say what a hardware 'specific to voxels' would look like. Typically for old games it was strongly associated with a class of fast ray-casting techniques that rendered cube-voxels, but even for that I think the specific rendering technique used varied a fair amount depending on the game. In contrast, I think triangles were generally rendered pretty much the same way regardless of the game, so specialized triangle-rendering hardware makes a bit more sense to me. Assuming we're talking about that sort of raycasting technique, there are some issues like: 1. Many of those methods seemed to increase memory use in order to reduce cpu time, and it's not clear that's always the right trade off to make. 2. Additionally, raycasting seems to scale worse with resolution than rastering. 3. The number of cubes you need per square to look good also scales poorly with resolution: on an R x R dimensional screen the amount of cubes you need scales as R x R x R. (This is less of an issue for 'heightfield voxels,' which just need to scale as R x R.) 4. In general, you need a lot of cubes to render arbitrary sharp creases and some other shapes that are easy to do with triangles. So although it's perhaps true that if you had specialized voxel hardware and no specialized triangle hardware, voxels would be better ... well, you probably wouldn't want to develop hardware like that. On the other side of things, I think you could argue that Cube and Cube 2 are both voxel engines -- one heightfield voxel, one general voxel (with octrees) -- so if you're willing to think of voxels as something other than just 'that ray-casting rendering technique that gives you solid colored squares,' then you can do a pretty nice voxel engine on polygon-centric hardware. ... However, after saying all that, it's worth mentioning that general purpose rendering hardware might make raytraced voxels (in octrees) worthwhile, as we get to a point where typical triangle sizes are less than 1 pixel large. At least, that's what Carmack apparently thinks ...
|
|
« Last Edit: April 28, 2008, 01:57:34 AM by Zaphos »
|
Logged
|
|
|
|
Eclipse
|
|
« Reply #41 on: April 28, 2008, 09:51:07 AM » |
|
also for terrains in other rts games, maybe also in c&c the Delta Force fps series had voxel terrains too, same for a lot of old flight simulators nice idea to use voxel-type data for collisions, you organize all that stuff in a tree? maybe an octree type structure?
|
|
« Last Edit: April 28, 2008, 09:53:55 AM by Eclipse »
|
Logged
|
<Powergloved_Andy> I once fapped to Dora the Explorer
|
|
|
postlogic
Level 1
|
|
« Reply #42 on: April 30, 2008, 05:38:47 AM » |
|
... I found a voxel modeling program. I am happy now.
Without sharing? What is this?!
|
|
|
Logged
|
No animals were harmed during the making of this post. Except one.
|
|
|
bateleur
|
|
« Reply #43 on: April 30, 2008, 01:12:08 PM » |
|
However, after saying all that, it's worth mentioning that general purpose rendering hardware might make raytraced voxels (in octrees) worthwhile, as we get to a point where typical triangle sizes are less than 1 pixel large. Even if they aren't, the ability to process (or even preprocess) other ways of describing objects into set-of-triangles form opens up all sorts of possibilities. Because so many companies use Maya or Max for various reasons (such as because that's what their artists are used to) I don't think we'll see such approaches explored much in the near future, but the potential is there.
|
|
|
Logged
|
|
|
|
|
Zaphos
Guest
|
|
« Reply #45 on: April 30, 2008, 02:37:07 PM » |
|
However, after saying all that, it's worth mentioning that general purpose rendering hardware might make raytraced voxels (in octrees) worthwhile, as we get to a point where typical triangle sizes are less than 1 pixel large. Even if they aren't, the ability to process (or even preprocess) other ways of describing objects into set-of-triangles form opens up all sorts of possibilities. Because so many companies use Maya or Max for various reasons (such as because that's what their artists are used to) I don't think we'll see such approaches explored much in the near future, but the potential is there. What possibilities are you talking about? Carmack was talking about terrain / level geometry, which is something I think studios often use their own custom tools to create.
|
|
|
Logged
|
|
|
|
jwaap
|
|
« Reply #46 on: May 01, 2008, 10:24:06 AM » |
|
Red alert 2 used voxels, and that game looks sweet... But well, just voxels to model their units.
|
|
|
Logged
|
|
|
|
___
Vice President of Marketing, Romeo Pie Software
Level 10
|
|
« Reply #47 on: May 01, 2008, 12:23:21 PM » |
|
Red alert 2 used voxels, and that game looks sweet... But well, just voxels to model their units.
Holy shit are you serious? ... I now love Voxels.
|
|
|
Logged
|
|
|
|
Annabelle Kennedy
Awesomesauce
Level 8
♥Android Love♥
|
|
« Reply #48 on: May 01, 2008, 12:26:12 PM » |
|
my question is though, in red alert 2.. were the units that used voxels, rendered in real time, software, with voxels? somehow i doubt that.
or were they pre-rendered with voxels and then just raster images.
and if theyre pre-rendered.. whats the point?
maybe im crazy.. but like, wouldnt that defeat the purpose?
|
|
|
Logged
|
|
|
|
Zaphos
Guest
|
|
« Reply #49 on: May 01, 2008, 12:45:37 PM » |
|
I haven't seen it written up anywhere, but I assumed they use raycasting to render units that use voxels in real time, to get a bit of 3D in software and augment an otherwise-2d experience. If they just did it per-unit, it could be pretty efficient.
Pre-rendering wouldn't defeat the purpose, though, as it could still save them drawing the same objects from a whole lot of different angles. It would just be a bit strange for them to have used voxels instead of ordinary 3D meshes in that case.
|
|
|
Logged
|
|
|
|
Shoot-em-upper
Guest
|
|
« Reply #50 on: May 01, 2008, 02:39:57 PM » |
|
voxels always look like s***. Let's see here. Now, how did voxels compare to polygons back in 1992? Polygons(keep in mind that everything except for the girl and rocking horse is pre-rendered): Voxels: I really don't think that this is worth debating. Long live ELLIPSOIDS!
|
|
« Last Edit: May 01, 2008, 06:52:58 PM by Metroidvaniac »
|
Logged
|
|
|
|
Annabelle Kennedy
Awesomesauce
Level 8
♥Android Love♥
|
|
« Reply #51 on: May 01, 2008, 02:49:01 PM » |
|
It would just be a bit strange for them to have used voxels instead of ordinary 3D meshes in that case.
thats what i meant be defeating the purpose. as in "why use voxels??" if they really are raycasted and rendered in real time im impressed.. i never wouldve thought the hardware back then capable
|
|
|
Logged
|
|
|
|
Zaphos
Guest
|
|
« Reply #52 on: May 01, 2008, 03:22:09 PM » |
|
if they really are raycasted and rendered in real time im impressed.. i never wouldve thought the hardware back then capable
Voxel raycasting is pretty fast as long as your grid is coarse enough, though, and 2001 wasn't that long ago ... I hope you're not thinking of raytracing? One easy optimization they might have done, since they're just raycasting the units, is to do a hybrid of pre-rendering and per-frame rendering: since the units are probably often not changing orientation, or are moving through the same range of orientations, you can keep a cache of renderings from common orientations. Then the number of objects that require raycast rendering in a typical frame is quite small. This should be especially useful when you have a whole lot of units which are identical, which is the typical case for RTSes ...
|
|
|
Logged
|
|
|
|
___
Vice President of Marketing, Romeo Pie Software
Level 10
|
|
« Reply #53 on: May 01, 2008, 03:52:19 PM » |
|
I thought Red Alert 2 was all raster images, sprite sheets for all the units... at least I think I remember seeing sprite sheets.
|
|
|
Logged
|
|
|
|
Zaphos
Guest
|
|
« Reply #54 on: May 01, 2008, 04:00:41 PM » |
|
Assuming it's the same as Tiberian Sun (since it used an updated version of that engine), they used a hybrid approach of voxels for some buildings and armored units, but sprites for infantry.
|
|
|
Logged
|
|
|
|
moi
|
|
« Reply #55 on: May 02, 2008, 01:19:33 PM » |
|
Yeah Ellipsoids! too bad that technology never caught on. I think you could do a whole game with ellipsoids nowadays (Ecstatica only used it for the characters). It is the best of both worlds.
|
|
|
Logged
|
subsystems subsystems subsystems
|
|
|
Shoot-em-upper
Guest
|
|
« Reply #56 on: May 02, 2008, 01:26:06 PM » |
|
Ecstatica only used it for the characters And the floor and walls look all nubbly, because..?
|
|
« Last Edit: May 02, 2008, 10:06:47 PM by Metroidvaniac »
|
Logged
|
|
|
|
moi
|
|
« Reply #57 on: May 02, 2008, 01:49:14 PM » |
|
I think it's because it only used 256 colours. And 3D rendering wasn't exactly stellar quality back then. In any case, only the characters were animated.
[EDIT] I think the best tech would be to mix techniques: Polygons for walls and square stuff, ellipsoid for organics stuff and liquids and voxels for terrain.
|
|
« Last Edit: May 02, 2008, 01:52:34 PM by moi »
|
Logged
|
subsystems subsystems subsystems
|
|
|
Ivan
Owl Country
Level 10
alright, let's see what we can see
|
|
« Reply #58 on: May 02, 2008, 02:42:56 PM » |
|
|
|
|
Logged
|
|
|
|
Zaphos
Guest
|
|
« Reply #59 on: May 02, 2008, 02:55:32 PM » |
|
Ellipsoids are not a good general solution. You can't express negative or zero curvature except by packing the ellipsoids closer than triangles, and you can't get the expected benefits of positive curvature unless the surface has enough room under it to hide the portion of the ellipsoid you're not going to use. Additionally there are seams at the border between ellipsoids that will start to look quite bad as you add texture and animation, and ellipsoid rendering is more costly per element than triangle rendering. Ellipsoids are actually kind of the opposite trade off from voxels -- the ideal case for voxels is when you have so many elements that typical elements are pixel or subpixel size, so you don't care about their shape. In contrast, ellipsoids are only good when you can't process more than a few elements, and so have to carefully pick the element shape. If you really want smooth surfaces, you probably want something more like NURBS or perhaps some LOD rendering of subdivision surfaces? edit: Relatedly, I just found this 2006 paper by Loop and Blinn on using the GPU to render piecewise algebraic surfaces, which shows examples of objects made from Bezier tetrahedra: http://research.microsoft.com/~cloop/LoopBlinn06.pdf.
|
|
« Last Edit: May 02, 2008, 03:03:22 PM by Zaphos »
|
Logged
|
|
|
|
|