Voxels and Curves
FS: You mentioned voxels and you're doing some research on that, do you think 3D hardware companies should be working on voxel acceleration? And what do you think of the voxel games that have come out, like Delta Force?
John: The Voxel stuff in software… I've written a few voxel engines at one point, actually the early version of Shadowcaster, Raven's Origin title, actually had voxel floors in it at one time. But we wound up taking that out when we rewrote the stuff to be more polygon based. There are some real advantages to voxel representations of things, because it gives you complete texturing and detail geometry in many ways. But I did these two voxel engines at the beginning of Quake III and it got to the point where I thought that I could almost make them run in software, but it would be at a fairly low resolution and compared to what you could do, at that speed with hardware polygons, it doesn't pay off in that case.
I did do an analysis of what the memory access patterns would be and everything; you could do a voxel ray-tracer in hardware with drastically less hardware than what we're actually using right now for all the triangle rasterizers and I think it could be a much more compelling visual representation in a lot of cases. But it's gonna be really difficult to see, I almost hesitate to tell people to pursue something like that. I know that I did some walkaround demos and everything, but the reason the PC industry is as good as it is right now in hardware is because we all had the example of SGI to look up to. We had working existence proofs of "this clearly works, look they've done it" and then it's just a matter of matching and then exceeding their performance.
To recommend something completely different, like saying "You should go have your fab make you a voxel chip, you should just go try this, spend millions of dollars on this," I'm really hesitant to do that because we don't have a complete existence proof that says this is a necessary and sufficient rendering primitive to do a complete engine or something with. Now if somebody did do a voxel caster there, you could go ahead and get depth value and intermix it with current triangle stuff and that would be an interesting intermediate step, but I honestly don't think it would take that much hardware, and someone right now, in this time of chaos when everyone's crazily trying to diversify their product, maybe someone will try something like that, just on a lark, because they're just fumbling around for something to do.
I think there are some potential good things there, but I can't conclusively say this is the future direction, because while it works really well for environments, and there's some great stuff you can do with that, it's less clear how well it works for characters. You wind up saying, "well maybe you have to build them in a deformation matrix around them, and then when you raycast into it bend the rays as it hits the deformation lattice." But I haven't written a software version of that. I'd be hesitant to tell someone that this is clearly a good idea until I can present a simulation showing that it works, and that it looks more impressive than anything you can do directly. And that's not on my schedule right now to spend the time to do because I've got a couple of things that are immediately pressing in terms of research.
But I do think there is at least some significant potential for that being an interesting direction. Now the thing that I actually want to play down on everyone is higher-order surface rendering, like curves and Nurbs and subdivision surfaces and all of this stuff, which everyone's all crazy about now. After working with them for two years, they're not all they're cracked up to be; there are all these issues. You don't see them from the outside, and this is the thing about being in the trenches as a developer.
If you just read the research papers and you understand how Bezier patches and all this stuff works, and you think, wow, this is neat, this is just the next step up from triangle primitives. And you don't recognize all of these "in practice" problems, like with invalid normal but degenerate edges. How you can't do an arbitrary cut of a patch without raising it to like the square of the order of the side, you can't stitch two junctions by fixing the other things, there's all of these little things that actually wind up being a fairly significant pain in the ass in different cases that you're just not aware of from this bird's-eye view of it. And there may very well be all those issues with voxels too, which is again why I'm hesitant to just get up on a pulpit and say this is the future, because a lot of things look great from the outside and aren't necessarily so great when you get down to it.