
Question 16
Beyond3D : If you had to choose between more polys and better lighting, what would you choose? Why?
Croteam : Uh ... I already answered this one in question 5. :-) To sum it up - with more polys you can have better lighting, but with better lighting you can't have more polys.
MadOnion : Better lighting. Texture based lighting (radiosity) has its strong points - you don't need lots of polys to make it look good. But dynamic lights are nice too, but it means that you need to subdivide surfaces to make them look even better. I am not a huge fan of the OpenGL / D3D lighting model though. The lighting formula is a bit limiting in some cases. But it's a necessary evil, I guess. And fortunately seems to be changing slowly with the coming of per-pixel lighting.
NVIDIA : Well, I don't have to choose, do I? :-)
I believe that given the pervasive nature of GPUs, more polys is simply a choice on the part of content authors to create more complex models. There is NO reason why all games can't have 10k polygon characters. The polygon count is about the shape of the character, and the smoothness and roundedness of the edges. Better lighting and shading is primarily a pixel operation. Pixel shaders, more textures, and programmability allow better lighting and shading now. It's a great time to be developing games ight now; there is so much that you can do now that could not be done before.
Question 17
Beyond3D : What is your opinion on 3D textures? Why are they useful ( eg. 3D Light Mapping, Detail Texture Mapping....) and when can we expect to see support in games?
Croteam : Textures are generally useful for other things, not only for texture mapping. A 2D texture can be thought of as a kind of a 2D lookup table. In this spirit, the 2D textures can be used for reflection mapping, specularity, lightmapping shadowmapping, fog mapping. A 3D texture can, in that way, be used (for example) for dynamic lighting. As the 3D texturing support becomes more common, I believe that we will see other uses for it. It is hard to even imagine what could be done with 3D textures, while only a minority of cards support that.
MadOnion : Currently, I find very little use to them. Maybe you could do some kind of special effects as you describe, but they take a lot of memory. Without texture compression they would be practically useless (as a 128^3, 32-bit texture would take over 10MB of memory). Then the second problem is that 3D textures with DXTn are not supported on wide enough variety of hardware yet.
NVIDIA : 3D textures will be very powerful, but they're pretty useless if they're not full-fledged texture map citizens. They need to have correct MIP-Mapping and LOD calculation, and compression, or they're not really usable. Without LOD calculation, you'll get undersampling, aliasing, and sparkling. Without compression, 3D textures are just too darn big! 3D textures are valuable for volumetric lighting effects, volumetric fog, or any function or value that you want to vary over 3D space. As always adoption of new capabilities will be low at first, and then all at once, they will be everywhere.
Question 18
Beyond3D : PowerVR's Kryo can, the Nintendo Gamecube will, and 3dfx's Rampage (RIP) was due to do 8 layer multitexturing in a single pass. Can you see any uses for 8 layer multitexturing, or is 2-4 with shading operations more than enough? If you think it's enough, why do you think these hardware vendors are/were persuing this path?
Croteam : Errrr, let me see ... base texture + pertumbation (hyper) map + bump/detail texture + lightmap + specular + reflection map + layered fog/haze = 7. So, 8 is just to be on the safe side, right? :-) However, I see 8-layers MT as an overdraw-elimination-feature in the first place, and not as some super-ultra-turbo pixel shader. (As far as pixel-shader goes, 4 layers are enough).
MadOnion : First, to sustain proper image quality, you need to have pretty damn good internal accuracy in the 3D chip to be able to use 8-layer multi-texturing (11 bits, actually).
Still, even with the accuracy, it would be hard currently to figure out where to use 8 layers. 4, 5, maybe 6 layers I could imagine, but not yet 8. In my opinion more graphical improvements can be achieved by using larger textures, having support for more "complicated" blending modes, using FSAA and so on.
NVIDIA : 8 is a large number. Believe it or not, most game developers are not even using more than 2 textures now. Clearly, many sophisticated pixel shading effects can be created that require more than 2 textures, but 8 is an arbitrary number. Why not 4 or 16? Also, it's important to not confuse the number of textures supported per pass with the number supported per cycle. If Rampage supported 8 textures per pass, but only 1 texture per cycle (so, an 8 texture pass takes 8 cycles per pixel), then it's not faster than Geforce2 GTS, which supports 2 textures per pixel (for 4 pixels in parallel), per clock. If the hardware does have enough texture engines to support 8 textures per pixel in a single clock, then all of that hardware is wasted when the rendering mode uses fewer than 8 textures. I believe that over time, more game developers will use lighting and shading models that expect more textures. 8 textures at full speed would be pretty incredible. GeForce3 supports 4 textures in a single pass, and a lot of very general shading operations that make 4 textures able to do quite a lot.
Question 19
Beyond3D : Front to back rendering. There has been much speculation that NVIDIA's next graphics chip (all questions were submitted to parties involved prior to the official announcement of NVIDIA's GeForce3, which is the chip we meant in this question - Reverend), and the XBox graphics core will benefit from the game code calculating the geometry from front to back in order to optimise its HSR abilities - is this feasible within the game code?
Croteam : Sure, why not. All you need is to have some dumb form of polygon, model or brush sorter and there you have it. I can live with that. :-)
MadOnion : Shortly, if we can pass object data, we don't care much in which order the hardware renders it. Faster is better.
NVIDIA : Actually, ALL graphics chips benefit from front-to-back rendering. The reason for this is that when objects are rendered from back to front, new colors and depth values are written each time a new object covers a previous one. When objects are rendered from front to back, occluded objects or pixels (ones that are invisible) are never written, so the bandwidth from the color and depth writes is saved.
It's not necessary to provide a strict front to back ordering of every polygon. It is sufficient to roughly order objects or groups of objects. Every little bit helps. Any engine that doesn't call a rough ordering of objects is poorly written.
Our thanks go out to Dean and Alen of Croteam (Dean, you're cool :-) - Reverend), Markus of MadOnion ("Worm", thanks! - Reverend) as well as David of NVIDIA (yes David, your answers appear to be "pure" ;-) - Reverend) for providing us with some very good and informative answers. We've often wondered about the relationship between developers and 3D technologies introduced by companies like NVIDIA and we feel that this interview provides some interesting insights.