Download Output: rn - Computer Graphics Laboratory ETH Zurich

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
DirectX 8 and GeForce3
Christian Schär & Sacha Saxer
Overview
• DirectX
• Direct3D 8
Vertex Shader
Pixel Shader
Hardware Support
• Conclusions
• Future
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
Hardware Abstraction Layer
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
Modified Rendering Pipeline
Vertex Shader Architecture
16 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
oPos
Position
oTn
Texture
oDn
an
Address
rn
Output:
• Temp
Color
oFog/oPts
Vertex Shader Instructions







mov
add
sub
mul
mad
rcp
rsq
r,
r,
r,
r,
r,
r,
r,
s0
s0, s1
s0, s1
s0, s1
s0, s1, s2
s0.w
s0.w
;
;
;
;
;
;
;
copy
sum
difference
multiply
multiply-add
reciprocal
reciprocal sqrt
Vertex Shader Instructions






dp3
dp4
min
max
slt
sge
r,
r,
r,
r,
r,
r,
s0,
s0,
s0,
s0,
s0,
s0,
s1
s1
s1
s1
s1
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
logp
lit
dst
r,
r,
r,
r,
s0.w
s0.w
s0, s1
s0, s1
;
;
;
;
partial prec.
partial prec.
lighting fn
distance fn
Register modifier
Component Modifier
Description
 r.{x} {y} {z} {w}
 r.[xyzw][xyzw][xyzw][xyzw]
 -r
Destination mask
Source swizzle
Source negation
Sample Vertex Shader
vs.1.1
m4x4 r0, v0, c[CV_WORLD_0]
m4x4 oPos, r0, c[CV_VIEWPROJ_0]
m3x3 r1, v3, c[CV_WORLD_0]
dp3
max
mul
add
min
r1.x, r1, c[CV_LIGHT]
r1.1, r1.x, c[CV_ZERO].x
r1, r1.x, c[CV_DIFUSE]
r1, r1, c[CV_AMBIENT]
r1, r1, c{CV_ONE].x
mov
mov
mov
oD0.x, r1.x
oD0.y, r1.x
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
Modified Rendering Pipeline
Pixel Shader Architecture
TexAddrOp 0
Triangle
Rasterizer
TexAddrOp 1
TexAddrOp 2
TexAddrOp 3
Dx8 Pixel
Shaders
8 Texture
Blend
Ops
Specular / Fog
Computed
Alpha
Blending
Pixel Shader Assembly
Input:
vn
Output:
rn
Vertex color
tn
Temp
r0
Texture
cn
Constants
Output color
Pixel Shader Instructions





mov
add
sub
mul
mad
r,
r,
r,
r,
r,
s0
s0,
s0,
s0,
s0,
s1
s1
s1
s1, s2
;
;
;
;
;
copy
sum
difference
multiply
multiply-add
Pixel Shader Instructions
 dp3
 lrp
 cnd
r, s0, s1
r, s0, s1, s2
r, r0.a, s1, s2
; 3D dot product
; lin. interp. blend
; r= r0.a>0.5 ? s1 : s2
 sub
cnd
r0, v0, v1_bias
r0, r0.a, c0, c1
; 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
bumped
… with
sample
black,
Matrix
sample
env. mapping
Luminance
tex. coords.
if coords < 0
multiplications
… +refl. +env. map.
use s.ar as coords.
use s.gb as coords.
Sample Texture Instructions

tex t
; put texture col. into t


texm3x2pad t0, s
texm3x2tex t1, s
; 3x2 matrix multiplication




tex t0
texm3x3pad t1, t0
texm3x3pad t2, t0
texm3x3spec t3, t0, c0
;
;
;
;

mov r0, t3
; output color
get normal vector from t0
eye-ray vector from c0
cube env. texture from t3
do env. mapping
Modifiers
Component Modifier
Description





Source/Destination mask
Invert
Negate
-0.5
-0.5, *2
r.{a} {rgb}
1-r
-r
r_bias
r_bx2
Modifiers
Instruction Modifier
Description




multiply result by 2
multiply result by 4
divide result by 2
cramp result
_x2
_x4
_d2
_sat
Sample Pixel Shader
ps.1.1
tex
t1
mov
r0, t1
mov
r0.a, v0
; use texture color
; get diffuse lighting from
; vertex interpolation
D3DX Mesh Optimizing
•
•
•
•
adjacency required
sort by attribute
compact
progressive meshes
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
What’s next?
• subdivision surfaces in hardware
(TruForm technology by ATI)
• displacement maps
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