Contents
Introduction
In this section, Ralf Kornmann provides an introduction to Direct3D 10 and provides a discussion of the new features that are at your disposal. In addition to an extensive description of Direct3D 10, a discussion of the differences between Direct3D 9 and 10 is provided.
- Introduction
- What You Need
- Using the DirectX SDK
- Quick Start For Direct3D 9 Developer
- What's Lost
- What's Different
- What's New
- The Direct3D 10 Pipeline
- Input Assembler
- Vertex Shader
- Geometry Shader
- Stream Out
- Rasterizer
- Pixel Shader
- Output Merger
- Different Ways Through The Pipeline
- Resources
- Data Formats
- Resource Usage
- Resource Binding
- Buffer
- Texture 1D
- Texture 2D
- Texture 3D
- Resource Limitations
- Sub-Resources
- Update Resources
- Copy Between Resources
- Map Resources
- Views
- State Objects
- Input Layout
- Rasterizer
- Depth Stencil State
- Blend State
- Sampler State
- Shaders
- Common Shader Core
- HLSL
- HLSL Variable Types
- HLSL Functions
- HLSL Classes
- HLSL Flow Control Attributes
- Geometry Shader
- Pixel Shader
- Compile Shader
- Create Shader
- Reflect Shader
- The Direct3D 10 Device
- Drawing Commands
- Counter, Query
- Predications
- Checks
- Layers
- DXGI
- Factories, Adapters, and Displays
- Devices
- Swap Chains
- Resources
- The Effect Framework
- FX Files
- Compile Effects
- Create Effects
- Techniques
- Passes
- Variables
- Constant and Texture Buffers
- Annotation
- State Blocks
- What's Left
Environmental Effects
Jason Zink introduces and discusses a series of techniques for adding realism and complexity to a given scene rendering. The topics covered include screen space ambient occlusion, several forms of environment mapping, and dynamic GPU based particle systems.
- Screen Space Ambient Occlusion
- Introduction
- Algorithm Theory
- Implementation
- SSAO Demo
- Conclusion
- Single Pass Environment Mapping
- Introduction
- Algorithm Theory
- Sphere Mapping Parameterization
- Cube Mapping Parameterization
- Dual-Paraboloid Parameterization
- Implementation
- Sphere Mapping Implementation
- Cube Mapping Implementation
- Dual-Paraboloid Implementation
- Demo and Algorithm Performance
- Improving Sphere Mapping Implementation
- Improving Dual Paraboloid Mapping Implementation
- Conclusion
- Dynamic Particle Systems
- Introduction
- Particle Systems Background
- Implementation Difficulty
- GPU Based Particle Systems (D3D9)
- GPU Based Particle Systems (D3D10)
- Algorithm Theory
- Implementation
- Results
- Conclusion
Lighting
Jack Hoxley provides a thorough treatment of the various concepts behind modern lighting techniques. Beginning with an examination of the basic theory behind lighting and advancing through the most recent research in realtime rendering, this section is an excellent source of information and a prime resource on the topic.
- Foundation and theory
- What is lighting and why is it important
- Outline for this section of the book
- Prerequisite mathematics
- What are lighting models?
- Global and local illumination
- Emphasis on dynamic lighting
- BRDF’s and the rendering equation
- The Fresnel Term
- Where and when to compute lighting models
- Single or multi-pass rendering
- Sample Code
- References
- Direct Light Sources
- Attenuation
- Directional light sources
- Point light sources
- Spot light sources
- Area lights
- Performance
- References
- Techniques For Dynamic Per-Pixel Lighting
- Background
- Lighting resolution
- Choosing a resolution
- Creating the source data
- Storing the source data
- Moving from per-vertex to per-pixel
- Uncompressed storage
- Compress to 2-axis
- Compress to half-precision
- Compress to 8-bit integer
- Compute with the geometry shader
- Summary
- A framework for per-pixel lighting
- Simple normal mapping
- Parallax mapping with offset limiting
- Ray-traced
- Comparison of results
- References
- Background
- Phong and Blinn-Phong
- The Phong equation
- The Blinn-Phong equation
- Results
- References
- Cook-Torrance
- The Cook-Torrance Equation
- The geometric term
- The roughness term
- The Fresnel term
- Implementation
- Results
- References
- The Cook-Torrance Equation
- Oren-Nayar
- The Oren-Nayar Equation
- Implementation
- Results
- References
- Strauss
- Parameters to the Strauss model
- The Strauss Lighting Model
- Implementation
- Results
- References
- Ward
- Isotropic Equation
- Isotropic Implementation
- Anisotropic Equation
- Anisotropic Implementation
- Results
- References
- Ashikhmin-Shirley
- The equation
- The diffuse term
- The specular term
- The implementation
- Results
- References
- The equation
- Comparison and Summary
- Global versus local illumination
- Light sources and the lighting environment
- Architecture
- Lighting resolution
- Types of materials
- Lighting models
- Performance
Shadows
Niko Suni introduces the major techniques for generating renderings with shadows in this section. Starting with shadow volumes, then advancing to shadow mapping and ray traced shadows, this section will provide an excellent introduction to the theory behind shadow rendering.
- Introduction to Shadows
- Shadow Volumes
- Introduction
- Volumetric shadows
- Implementation theory
- Using geometry shaders to extrude the shadow volume
- Shadow Maps
- Introduction and theory
- Implementation
- Ray-traced Shadows
- Basic introduction and implementation
- D3D 10.1 Considerations for Shadows
Level Of Detail Techniques
In this section, Niko Suni investigates several aspects of how level of detail can be implemented. Concepts for managing scene level of detail are presented, followed by per-object level of detail with tesellation techniques.
- Managing Level of Detail
- Introduction
- Predicated rendering
- Culling with Geometry Shader
- Dynamic flow control in Pixel Shader
- Dynamic Patch Tessellation
- Basic technique - introduction, theory and implementation
- Displacement
- Practical considerations for current and future hardware
Procedural Synthesis
In this section, Niko Suni presents various methods of generating procedural content in the pixel shader as well as some general considerations for procedural content generation.
- Procedural Textures
- Introduction
- Simple procedural pixel shader
- Advanced pixel shader - snow flake
- D3D 10.1 Considerations for Procedural Shaders
Post Processing Pipeline
In this section, Wolfgang Engel provides a complete discussion of post processing in a realtime environment. Starting with the basic concepts and advancing through more advanced techniques and even providing several commonly used techniques, this is a mandatory section for anyone entering the post processing arena.