3D - Textures
ATi introduces this new feature, although it is so far only supported by OpenGL 1.2 and not by DirectX. The idea is a texture that is actually filling a volume instead of just representing a surface. At the same time the texture itself will still only by visible where it intersects polygons, which means that in the end it's still seen as a 2D texture, only that it's defined in a different way.
The usage of 3D textures includes special volumetric lighting conditions as well as the well-known idea of cutting down objects that will then offer you a look inside. It is certainly a great thing for lovers of gruesome games, as you could cut open the tummy of your enemy and have a good look at his liver. We will see how game developers will adopt this nifty feature. It's a new thing and maybe that's the reason why it doesn't sound as if one couldn't live without it right now.
Well, well, haven't we heard it all about bump mapping by now? In fact I think we have, which is why I will simply list the three bump mapping techniques that Radeon supports.
- Emboss Bump Mapping is the simplest way of bump mapping with the least satisfying results. It works by simply adding another texture (height map) plus some simple computations.
- Dot Product 3 is the bump mapping version that is using the 'per-pixel' approach, using a 'normal map', which doesn't mean that this map is normal, but 'normal' is the name of the vector that is carrying the light reflection information. Dot Product 3 bump mapping is the most sophisticated and certainly most realistic bump mapping form to date.
- Environment Mapped Bump Mapping is certainly still known to some of you from Matrox and its G400 chip. This bump mapping technique is best suited for glossy, shiny or reflective surfaces, as e.g. waves on water. It is using a special kind of texture map. NVIDIA once said that GeForce2 GTS is supporting this bump mapping form as well, but rumor has it that GeForce2 does actually not support it.
We've also heard a lot about environment mapping already, since NVIDIA did its best to educate us about this feature as well. It 'maps the environment' onto an object, which in layman terms could be called 'mirroring'. There are always a lot of objects in a 3D-world that could easily be reflective and that's where Environment Mapping comes in.
Radeon supports all forms of environment mapping, which is equal to NVIDIA's GeForce chips. Spherical Environment Mapping as well as Dual-Paraboloid Environment Mapping aren't offering very satisfying results, which might be the reason why they are not supported by DirectX 7. However, Radeon is also able to use Cube Environment Mapping, which I will explain once more.
Cube Environment Mapping
Reflection of the surrounding environment on a 3D object may sound rather unimportant, but if you look around your room you might realize that many objects actually do reflect. A bottle of water, a mobile phone, a CD-cover, a picture frame, the front of your stereo, ... are only few examples of reflecting objects that could be found in any 3D scene just as much. To make the 3D-world more realistic those object should show reflections as well and for this purpose cube environment mapping was introduced into NVIDIA's GeForce last year.
Cube environment mapping is a technique developed by SGI a while ago. The idea is pretty simple. From an object with a reflective surface (and not from the room center, as I read somewhere else) you render six environment maps in each room direction (front, back, up, down, left, right) and use those to display the reflections on this object.
It can either be used to reflect in detail or blurred, but it can also be used for more accurate (per-pixel) specular lighting. The viewer/camera can move around the reflecting object without you noticing distortions or other artifacts in the reflection, something that's not possible with sphere environment mapping. Cube environment mapping is fully implemented into DirectX 7 and will certainly be found in 3D-games very soon.
The main difference between projective textures and normal textures is that, like a spot light, it can be projected through a room and each polygon it hits would display a part of this projective texture, while casting a shadow behind it. To do this a priority buffer is required.
The idea behind the priority buffer is rather simple. It adds another form of depth information over the well known z-buffer, but it's a lot less complex. A priority buffer assigns numbers to polygons in the 3D scene depending how close they are to the viewer. This buffer is required for shadow mapping. Radeon is meant to be the first architecture that supports this special buffer in hardware.
Once a 3D chip supports the priority buffer, it can take advantage of 'Shadow Mapping'. This method of generating realistic shadows is superior to the volumetric shadows that use the stencil buffer. 'Shadow Mapping' is easier to implement and it is the only method that lets an object cast a shadow on itself.