AMD Publishes 6 New Direct3D 10 and 11 Demos: Quick Test and New Details About Tessellation
AMD has released 6 new Direct3D demos with complete source code and binaries. There are 3 Direct3D 10 demos and 3 Direct3D 11 demos.
Actually, all these demos are already included in Microsoft DirectX 11 SDK
The first funny thing is that all these demos are linked to D3D 9:
To get ride of this error, just install the latest DirectX runtimes and that should be enough.
All these demos are available HERE.
I tested all demos under Windows 7 64-bit with MSI’s R5770 Hawk (a quick test of this nice product will be available shortly).
Direct3D 10 Demos
Depth of Field
This sample presents a technique for combining multi-sample anti-aliasing (MSAA) with a depth-of-field effect. It utilizes Direct3D 10.1 APIs and hardware to retrieve depth values from a multi-sampled depth buffer.
The depth of field demo didn’t convince me. I wasn’t be able to get a realist DoF effect.
High Definition Ambient Occlusion
This sample presents an innovative technique for achieving High Definition Ambient Occlusion (HDAO). It utilizes Direct3D 10.1 APIs and hardware, making use of the new shader model 4.1 gather4 instruction, to greatly accelerate the performance of this technique.
HDAO buffer visualization
This sample presents a technique for achieving MSAA quality rendering for primitives that require transparency. It utilizes Direct3D 10.1 APIs and hardware to make use of the new fixed MSAA sample patterns, and the export of the coverage mask from the pixel shader.
Transparency Anti-Aliasing global view
Transparency Anti-Aliasing – Technique: Alpha Test
Transparency Anti-Aliasing – Technique: Alpha to coverage
Technique: Transparency Anti-Aliasing
Direct3D 11 Demos
This sample demonstrates the use of detail tessellation for improving the quality of material surfaces in real-time rendering applications. Detail Tessellation is typically a faster-performance and higher-quality alternative to per-pixel height map-tracing techniques such as Parallax Occlusion Mapping.
Detail Tessellation global view
Detail Tessellation – Tessellation factor 1.0
Detail Tessellation – Tessellation factor 5.0
Detail Tessellation – Tessellation factor 11.0
The developer has limited the max tessellation factor to 11.0 (it’s hardcoded in the source code – const float MAX_TESSELLATION_FACTOR = 11.0f;). I wonder why if the new programmable tessellation unit is used (I hope so).
From the doc that comes with the demo:
In its simplest form, detail tessellation is a combination of tessellation combined with displacement mapping. The Vertex Shader calculates position and tangent space light/view vectors before passing them to the Hull Shader along with texture coordinates. The Hull Shader triggers “pass-through” mode by outputting three control points that are a direct copy of the input data (position, texture coordinates and light/view vectors), while the HS Patch Constant function applies a uniform tessellation factor to triangle edges and its inside. The new vertices generated by the fixed-function tessellator are input to the Domain Shader, which calculates their position and displace them using the height map provided. All lighting is performed in the pixel shader using the interpolated tangent space light vector (and view vector if specular is enabled) and normal.
From this recent article, there should be two tessellation engines in Radeon HD 5000: the old (fixed – max factor limited to 15.0) and the new (programmable – max factor limited to 64.0). There’s something I missed somewhere…
This sample presents a technique for achieving smooth surfaces from the position and normal data of a low density mesh. It utilizes Direct3D 11 APIs and hardware to make use of the new tessellation stages of the pipeline.
PN-Triangles – Tessellation – overview
PN-Triangles – Tessellation factor=1.0
PN-Triangles – Tessellation factor=7.0
PN-Triangles – Tessellation factor=15.0
PN-Triangles – Tessellation factor=19.0
Did you notice the max tessellation factor of 19.0 ? This time the demo uses the new tessellation engine included in HD 5000 graphics cards. But in the doc that comes with the demo, the developer talks about a Fixed Function Tessellator:
The hull shader stage performs the usual pass through steps that you’d expect, such as, tessellation factors and input patch control points. In addition to this the shader generates the 7 cubic positional control points, and the 3 quadratic normal control points using the algorithm described in the whitepaper as above. Also this shader stage optionally handles distance based adaptive tessellation.
Fixed Function Tessellator
The fixed function HW tessellator stage produces new geometry based on the input tessellation factors, as barycentric coordinates in the patch domain.
The domain shader stage uses the positional and normal control points to weight the barycentric coordinates of the generated geometry, using the algorithm described in the whitepaper as above.
My conclusion about tessellation: The Radeon HD 5000 has two physsically separated tessellation units: the old one (max factor of 15.0 – Radeon HD 2000, 3000, 4000 and 5000) and the new one (max factor of 64.0 – Radeon HD 5000 only). In both cases, the hardware tessellator (or tessellation stage) is a fixed function. The difference between both tessellation units is that in HD 5000 the tessellation stage is between new programmable stages (hull and domain) whereas in HD 2000, 3000 and 4000 the tessellation stage is alone.
Contact Hardening Shadows
This sample presents a Direct3D 11/ Shader Model 5.0 accelerated technique that uses non-stationary/dynamic weight matrices for unique per-sample filter weights (these don’t necessarily represent a separable filter) for a contact hardening shadow effect. The effect is comparable to PCSS (Percentage-Closer Soft Shadows [Fer05]) but does not suffer from banding or noise artifacts.