Date post: | 14-Dec-2015 |
Category: |
Documents |
Upload: | annette-sydney |
View: | 222 times |
Download: | 2 times |
DirectX Components
• DirectDraw
• Direct3D
• DirectSound
• DirectMusic
• DirectShow
• DirectInput
• DirectPlay
2D Graphics API
3D Graphics API
Sound API
Music API
Multimedia Streams API
Input API
Network API
Direct3D
• Hardware Abstraction Layer
• Classic Rendering Pipeline
• Vertex Shader
• Pixel Shader
• D3DX
Classic Rendering Pipeline
CreateVertexBuffer();
SetVertexShader();
SetStreamSource();
DrawPrimitive();
Vertex Shader
• Small assembly language program
• Replaces the Transformation and Lighting Engine
• Responsible for World and View transformations
• Is executed once per vertex
• Has no neighborhood information
• Prepares data for the Pixel Shader
Vertex Shader Architecture16 Input registers (r/o)
96 Constant registers (r/o)
12 Temp registers (r/w)
1 Address register (w/o)
Output registers
Max. 128 instructions
Vertex Shader Assembly
Input:vn
Vertex
c[n]Constants
anAddress
rn• Temp
Output:oPos
PositionoTn
TextureoDn
ColoroFog/oPts
Vertex Shader Instructions
mov r, s0 add r, s0, s1 sub r, s0, s1 mul r, s0, s1 mad r, s0, s1, s2 rcp r, s0.w rsq r, s0.w
; copy
; sum
; difference
; multiply
; multiply-add
; reciprocal
; reciprocal sqrt
Vertex Shader Instructions
dp3 r, s0, s1 dp4 r, s0, s1 min r, s0, s1 max r, s0, s1 slt r, s0, s1 sge r, s0, s1
; 3D dot product
; 4D dot product
; per component
; per component
; 1.0 if less than
; 1.0 if greater/equal
Vertex Shader Instructions
expp r, s0.w logp r, s0.w lit r, s0, s1 dst r, s0, s1
; partial prec.
; partial prec.
; lighting fn
; distance fn
Register modifier
Component Modifier r.{x} {y} {z} {w} r.[xyzw][xyzw][xyzw][xyzw] -r
DescriptionDestination mask
Source swizzle
Source negation
Sample Vertex Shader
vs.1.1m4x4 r0, v0, c[CV_WORLD_0]m4x4 oPos, r0, c[CV_VIEWPROJ_0]m3x3 r1, v3, c[CV_WORLD_0]
dp3 r1.x, r1, c[CV_LIGHT]max r1.1, r1.x, c[CV_ZERO].xmul r1, r1.x, c[CV_DIFUSE]add r1, r1, c[CV_AMBIENT]min r1, r1, c{CV_ONE].x
mov oD0.x, r1.xmov oD0.y, r1.xmov oD0.z, r1.x
Pixel Shader
• Small assembly language program
• Replaces the Texturing and Lighting Engine
• Is executed once per pixel
• Has no neighborhood information
• Does further calculations on the Vertex Shader’s output
• The output is the color of the pixel
Pixel Shader Architecture
TexAddrOp 0
TexAddrOp 1
TexAddrOp 2
TexAddrOp 3
TriangleRasterizer
8 Texture BlendOps
Specular / FogComputed
Alpha Blending
Dx8 Pixel Shaders
Pixel Shader Instructions
mov r, s0 add r, s0, s1 sub r, s0, s1 mul r, s0, s1 mad r, s0, s1, s2
; copy
; sum
; difference
; multiply
; multiply-add
Pixel Shader Instructions
dp3 r, s0, s1 lrp r, s0, s1, s2 cnd r, r0.a, s1, s2
sub r0, v0, v1_biascnd r0, r0.a, c0, c1
; 3D dot product
; lin. interp. blend
; r= r0.a>0.5 ? s1 : s2
; r= v0 > v1 ? c0 : c1
Texture Instructions
tex t texbem t texbeml t, s texcoord t texkill t texm3x2pad t, s texm3x2tex t, s texm3x3pad t, s texm3x3tex t, s texm3x3spec t, s0, s1 texm3x3vspec t, s texreg2ar t, s texreg2gb t, s
; normal sample; bumped env. mapping; … with Luminance; sample tex. coords.; black, if coords < 0; Matrix multiplications;;; ; … +refl. +env. map.;; use s.ar as coords.; use s.gb as coords.
Sample Texture Instructions
tex t
texm3x2pad t0, s texm3x2tex t1, s
tex t0 texm3x3pad t1, t0 texm3x3pad t2, t0 texm3x3spec t3, t0, c0
mov r0, t3
; put texture col. into t
; 3x2 matrix multiplication
; get normal vector from t0; eye-ray vector from c0; cube env. texture from t3; do env. mapping
; output color
Modifiers
Component Modifier r.{a} {rgb} 1-r -r r_bias r_bx2
DescriptionSource/Destination mask
Invert
Negate
-0.5
-0.5, *2
Modifiers
Instruction Modifier _x2 _x4 _d2 _sat
Descriptionmultiply result by 2
multiply result by 4
divide result by 2
cramp result
Sample Pixel Shader
ps.1.1
tex t1
mov r0, t1 ; use texture color
mov r0.a, v0 ; get diffuse lighting from
; vertex interpolation
D3DX Progressive Meshes
• different levels of detail (LOD)• half edge collapse• cloning by sharing of vertex buffers• streamable• save method
• OptimizeBaseLOD• TrimByVertices/TrimByFaces
D3DX Skinned Meshes
• vertex data, bone data with vertex indices• support for .X files• export filters for Maya, 3D Studio Max available• up to 4 indices per vertex• up to 12 indices per face• up to 256 bone palettes• ConvertToBlendedMesh() reduces to this constraints• ConvertToIndexBlendedMesh() same, but less subsets• Uses GeForce’s restricted skinning support by rendering a
prefix in hardware.
Conclusions
• very flexible tool
• hardware accelerated
• low level interface (assembly)
• vertex shaders theoretically applicable to point-sampled geometry
• rendering of shadows needs lots of work
References
• MSDN (Microsoft Developer Network)
• NVIDIA Whitepapers– Introduction to Vertex Shaders– Introdction to Pixel Shaders
http://msdn.microsoft.com/directx
http://partners.nvidia.com/Developer