3DMark06: Graphics Engine
As you probably know, a completely new graphics engine was developed for 3DMark05. It had nothing in common with the previously used MAX-FX engine and was more like an engine from a real-life game.
The 3DMark06 engine is its modification with an addition of such features as full support of Shader Model 3.0 and textures and blending in FP16 format. The latter means nothing else but High Dynamic Range – HDR. Futuremark predicts that HDR will be supported widely in games to come, although currently there are few such titles available. Like in 3DMark05, shaders that stand for a particular material are generated dynamically in HLSL format. Then they are compiled to match optimally the graphics processor of the system either automatically or according to a user-defined profile.
Textures and blending in FP16 format are only required by the SM3.0 graphical tests. These tests also use FP16 filtering, but if the GPU doesn’t support this feature, it is emulated with a special shader. This permits graphics cards with the Radeon X1000 architecture that can’t filter floating-point textures to pass the SM3.0/HDR tests. The SM3.0/HDR graphics tests also make use of post-processing to apply the Bloom effect, the “star” effect that emulates the 6-petal camera shutter, and the lens flare effect. And finally the image undergoes tone-mapping for correct color representation on traditional displays.
The developer says the new benchmark makes use of all the key features of SM3.0, except for the vFace register:
- vPos register
- Derivative instructions
- Dynamic flow control
- Multiple interpolators
- Multiple constants
- More instructions slots
- Texture instructions with explicit LODVertex
- Texture fetch from vertex shaders (required for the Shader Particles test)
Dynamic shadows appeared in Futuremark’s benchmarks starting from 3DMark2001. They were created by means of projection shadow maps then. It was quite a simple method but with certain limitations like an object couldn’t cast its shadow on itself. Moreover, the shadow was projected on all the surfaces under the object, even on the floor of the room a few stories below. 3DMark03 introduced the so-called stencil shadows technique to create dynamic shadows. This method works differently: the boundaries of an object visible from the light source direction are selected as a polygon without lighting and everything within the volume of this polygon is shadowed. This method is free from the drawbacks of the previous one and allows an object to cast its shadow on itself, but it is not universal and suits only for certain types of scenes and low-polygonal objects.
However, the fact is the selection of the object boundary that becomes the volume shadow is a rather resource-consuming operation and polygons that comprise these shadows consume a large share of the total scene fill rate, even though they are invisible.
3DMark05 introduced a new method of generating dynamic shadows, using the so-called LiSPSMs (Light Space Perspective Shadow Maps). 3DMark06 improves this technique further by using another type of shadows maps, called Cascaded Shadow Maps or CSMs. Using CSMs allows drawing shadows for all the objects on the screen irrespective of their angle of inclination.
This method divides the view frustum in 5 sections along the Z axis. Each section is then shadowed using a standard uniform shadow map with 2048x2048 resolution. If the GPU supports depth textures, a depth map in D24X8 or DF24 format is used. Otherwise a component of an R32F texture (floating-point 32-bit representation) is used as a depth map. Hardware shadowing is on by default (except for D24X8 in the SM3.0/HDR tests), but the user can turn it off.
Each method has its downsides. Although the resolution of depth maps is high, it may sometimes prove to be not high enough and, like in 3DMark05, flickering may occur on the boundary of the shadow, the so-called projection aliasing. This thing may happen when the direction of the normal maps is strictly or near perpendicular to the direction of lighting. It is currently next to impossible to avoid this effect without serious performance loss.
A 16-sample array (4x4) is used in the SM3.0/HDR tests to smooth out the edges of shadows. This array is rotated randomly for each pixel of the shadow boundary. Having 16 reference points improves the antialiasing quality but requires additional computational resources. Per-pixel sampling is used for hardware shadow mapping as well as for shadow maps in R32F format. In the SM2.0 tests a smaller, 2x2-pixel array is used, but if the GPU can only sample from the depth buffer in formats D24X8, DF24 or Fetch4, one bilinear sampling is only made. The antialiasing quality differs at that somewhat. In case the user wants to compare the rendering performance of different architectures, hardware shadow mapping may be disabled and dynamic shadows are then created using R32F depth maps and are anti-aliased using 4 samples.
Generating dynamic shadows with depth maps is quite appropriate in 3DMark06. According to Futuremark, this method is already used by game developers and will be getting ever more popular in the future. As for texture compression, all color maps in 3DMark06 are compressed with the DXT1 algorithm, alpha-maps with the DXT3 algorithm, and normal maps with the DXT5 algorithm. The 3Dc method, specific for ATI Radeon X700 and higher cards, is not supported.