ppt title - PowerPoint PPT Presentation

1 / 80
About This Presentation
Title:

ppt title

Description:

... in mesh object as Attribute Buffer. Semantics of values is ... Incorporates refinements by Hugues Hoppe to accommodate normal and attribute space metrics ... – PowerPoint PPT presentation

Number of Views:55
Avg rating:3.0/5.0
Slides: 81
Provided by: spea2
Category:
Tags: attribute | ppt | title

less

Transcript and Presenter's Notes

Title: ppt title


1
D3DX 8.1 Anuj GosaliaDevelopment
LeadDirectX Graphics Microsoft Corporation
2
D3DX Releases
  • Shipped D3DX 8.0 with DirectX 8.0 SDK
  • D3DX 8.0b released to Web
  • Bug fixes to D3DX 8.0, no new features
  • D3DX 8.1
  • Includes new features
  • Now in Beta

3
Overview Of D3DX 8.1
  • Mesh Utilities
  • Effect Framework
  • Shader assemblers
  • Texture Utilities
  • Math Utilities
  • Miscellaneous Utilities
  • Authoring tool support

4
Mesh Library
  • Progressive meshes
  • N-Patch tessellation
  • Mesh optimization
  • Skinned meshes
  • Other mesh utilities
  • Bounding volume generation (sphere, box)
  • Ray intersections (mesh, sphere, box)
  • Mesh cleanup
  • More

5
Mesh Basics
  • Vertex Buffer, Index Buffer, and Attributes
  • Indexed Triangle lists
  • 16/32-bit indices supported
  • Supports file I/O (via .X)
  • Can be used independently of .X files
  • DrawSubset is only for convenience
  • Not the only way to draw a mesh
  • Manipulates adjacency if requested

6
Attributes Buffer? Table?
  • Mesh has 1 DWORD per triangle (face)
  • Stored in mesh object as Attribute Buffer
  • Semantics of values is up to the app
  • Need not be sequential
  • Attribute Table
  • A compact representation of the attribute buffer
  • Generated by Attribute Sorting a mesh
  • GetAttributeTable, no SetAttributeTable

7
Mesh Rendering
  • DrawSubset() draws all triangles of a given
    attribute
  • Needs Attribute Table
  • Else it does linear search per face
  • Efficient if attributes are sequential, starting
    from 0
  • Else it does search of attribute table
  • Uses Fixed Function FVF shader
  • Avoid unless all above conditions met

8
Mesh Adjacency In D3DX
  • Many mesh operations require adjacency
  • Array of 3 DWORDs per face
  • Each DWORD is a face index
  • 0xffffffff means no adjacent face
  • All mesh operations that change adjacency will
    optionally return updated adjacency
  • Load from .X returns adjacency

9
Point Representatives
  • Alternate way of encoding adjacency info
  • Keeps track of vertices which have the same
    position but replicated due to differing
    attributes (like normals, tex coords, etc.)
  • One DWORD per vertex
  • All vertices in a set of replicated vertices
    point to any one of them as a representative
  • Non-replicated vertices point to themselves

10
Meshes And Adjacency
  • Can convert from PRep to adjacency and back
  • Generating adjacency from scratch
  • Can use identity Prep, ignoring duplicates
  • Works in some cases
  • GenerateAdjacecncy() will identify vertices with
    same position (i.e., infer PRep)
  • Slower than above
  • Will get correct adjacency if epsilon is
    appropriate

11
Remap Arrays
  • Describes how mesh was rearranged
  • 1 DWORD for each destination face / vertex
  • Indicates which face / vertex of source it came
    from
  • Many-to-one mapping possible
  • Allows mesh related data outside mesh object to
    be updated with the mesh

12
Mesh Optimization
  • Stripify
  • Rearrange vertices of a mesh in strip order
  • Vertex cache optimize
  • Based on Hugues Hoppes Siggraph 99 paper
  • Hardware specific optimization
  • Both need adjacency information
  • ConvertPointRepsToAdjacency with NULL (identity)
    PRep array will suffice

13
Mesh Optimization
  • Attribute sort
  • Sorts faces and vertices on the attribute ids
  • Splits shared vertices if necessary
  • Generates Attribute Table
  • Compact Mesh
  • Eliminates vertices not referred to by the index
    array

14
Sharing Vertex Buffers
  • Typically Optimize re-arranges vertices and
    indices
  • If vertices already ordered by attribute, src
    dest mesh can share VBs
  • D3DXMESHOPT_SHAREVB
  • Useful for clones and optimizing

15
Offline cache optimization
  • Best done at load time
  • Algorithm is fast
  • Default is Geforce 1,2
  • Works well on all cards
  • Optimize on above or card with no hardware TL

16
Meshes and Tri-Strips
  • D3DXConvertMeshSubsetToStrips
  • D3DXConvertMeshSubsetToSingleStrip
  • Returns new Index Buffer separate from the mesh
    object
  • Works on any mesh
  • Helps to optimize it for vertex cache or stripify
  • May be a performance win in some specific cases
  • Use OptimizeMesh sample to see what works best

17
Progressive MeshesOverview
  • Generate an ID3DXPMesh object from high
    poly-count mesh using ID3DXSPMesh object
  • Done either offline or load time
  • Render the ID3DXPMesh object at any LOD at
    runtime
  • Generate a bunch of ID3DXMesh objects from
    ID3DXPMesh object

18
Progressive MeshesMesh Simplification
  • Based on Garland-Heckbert quadric error metric
  • Incorporates refinements by Hugues Hoppe to
    accommodate normal and attribute space metrics
  • Needs accurate adjacency information

19
Progressive MeshesMesh Simplification(2)
  • API for simplification via ID3DXSPMesh object
  • No more batch files
  • Allows you to incorporate automated LOD
    generation in your internal tools
  • User controls to influence simplification process
  • Assigning weights to vertices
  • Weighing the importance of various vertex
    attributes

20
Progressive MeshesHalf-edge collapses
  • Chooses one of the two original vertices during
    each edge collapse
  • No significant quality degradation
  • Mesh vertices never change with LOD
  • Enables mixing PM and mesh deformation algorithms
    like morphing and skinning
  • Reduces the amount of information stored in a
    vertex split record
  • LOD changes are faster

21
Progressive MeshesDynamic LOD changes
  • ID3DXPMesh object allows dynamic LOD changes to
    arbitrary face/vertex counts
  • LOD changes are fast enough to do at runtime
  • Modifies the index buffer and the adjacency

22
Progressive MeshesCloning
  • Support sharing the vertex data across clones
  • Can clone multiple ID3DXMesh objects from a
    progressive mesh, all of which share the same VB
  • Can even optimize the resultant mesh while
    sharing the original VB

23
Progressive MeshesPersistency
  • Persist to IStream
  • Can embed PMs in any custom file format
  • ID3DXPMeshSave
  • D3DXCreatePMeshFromStream

24
Progressive MeshesOptimization
  • PMesh face ordering may not be cache optimal
  • Can at least make base mesh optimized
  • ID3DXPMeshOptimizeBaseLOD
  • Use multiple clones of PMesh with increasing
    base LODs
  • ID3DXPMeshTrimByVertices
  • ID3DXPMeshTrimByFaces
  • Can share VB across clones
  • Switch to PMesh with highest base LOD

25
N-Patch Tessellation
  • D3DX provides software N-Patch tessellation
  • Uses adjacency to share vertices in tessellated
    mesh
  • Assumes mesh is smooth
  • Any sharp edges due to normal discontinuity will
    cause cracks
  • Use D3DXWeldVertices to merge normals within
    epsilon
  • Improved in D3DX 8.1 to make welding normals lot
    easier

26
Other Mesh Utilities
  • Compute bounding box and sphere
  • Compute normals
  • Ray mesh intersection
  • Returns triangle index and barycentric
    coordinates of point of intersection if hit
  • Ray box and sphere intersection
  • Clean-up topology for simplification
  • Cloning for VB and IB format conversion

27
Mesh Library Improvements
  • D3DXSplitMesh
  • Use to split large 32-bit meshes into multiple
    16-bit meshes
  • Splits shared vertices
  • Minimized if mesh is vertex cache optimized
  • D3DXWeldVertices
  • Takes per component epsilons
  • Does partial welds

28
Mesh Intersection
  • Intersect ray with tri, mesh or mesh subset
  • Returns face and barycentric coordinates of
    intersection
  • Optionally returns list of all intersections
  • Needs no precomputation
  • Efficient algorithm for hit testing, etc
  • Not efficient for too many intersections for the
    same mesh

29
Compute Tangent Space
  • Create a per vertex coordinate system
  • Normal define one axis
  • Texture coordinate (u,v) gradients used to
    orient tangents
  • Use u to define one tangent compute binorm by
    cross product
  • Or use u v to define both tangents

30
Compute Tangent Space (2)
  • Mesh texture parameterizations can have
    orientation flips
  • Cross product binormal can be reverse from v
    space gradient in some parts
  • Solution Encode binormal sign per vertex
  • Use 4D vector for encoding per-vertex tangent
  • Put sign in 4th component
  • Invert computed binormal in vertex shader

31
Skinned Meshes
  • Plug-ins for authoring tools to export skinning
    data
  • 3D Studio Max and Character Studio
  • Maya (work in progress)
  • .X files extended to handle skinning data
  • D3DX functions to load skinned meshes
  • ID3DXSkinMesh independent of .X files

32
Skinned Mesh Object
  • Contains a mesh object plus skinning data
  • Skinning data supplied as a bone and a list of
    vertices it affects
  • And a weight corresponding to each vertex
  • Though not hardware friendly, this input method
    is simple and general
  • Can convert to optimized forms

33
Skinning Technique 1
  • Direct3D 7.0 style
  • Per vertex weights
  • Up to 4 bones (matrices) per triangle
  • Or patch if using R/T-Patches
  • ConvertToBlendedMesh generates a mesh with per
    vertex weights
  • Can cause mesh to have many subsets
  • Works with well N-Patch tessellation

34
Skinning Technique 2
  • Introduced in Direct3D 8.0
  • Per vertex indices refer to matrices from a
    palette that affect it
  • Up to 4 indices per vertex, 12 per face
  • Up to 256 matrices in a palette
  • Reduces API calls and matrix changes
  • ConvertToIndexedBlendedMesh generates mesh with
    per vertex weights and matrix indices

35
Skinning Technique 3
  • Software skinning in D3DX
  • Arbitrary number of influences per vertex
  • Useful for skinning curved surface control mesh
  • Useful for accessing post skinned mesh data
  • Hit testing skinned meshes
  • GenerateSkinnedMesh() / UpdateSkinnedMesh() does
    this

36
ConvertToBlendedMesh
  • Truncates bone influences when gt4 per triangle
    exists
  • Keeps the 4 most important weights
  • Uses adjacency info to avoid cracks
  • Orders bone combinations by increasing of
    influences
  • Enables using GeForces restricted skinned
    support by rendering a prefix of the mesh in
    hardware
  • Use software for the rest

37
ConvertToIndexedBlended
  • Will truncate if gt4 influences per vertex
  • Handles palette sizes lt num bones
  • But must be gt maxFaceInfl
  • Partitions mesh into subsets that fit in a
    palette
  • Output can be used with vertex shaders
  • Output mesh has only necessary of weights
  • Use Clone to pad extra weights if shader expects
    fixed

38
Skinning Performance
  • Minimize of bone combinations?
  • Can merge subset combinations
  • Increases of blends
  • Improve matrix coherence across combinations?
  • Cant prevent extra DrawPrim calls
  • Cant prevent matrix concatenation
  • Does not seem worthwhile

39
Skinning Performance (2)
  • Non-hardware TL devices
  • Indexed palette skinning using FF pipeline or
    vertex shaders is best
  • On GeForce 1,2 and Radeon, non-indexed skinning
    is fastest
  • On Geforce 3 indexed skinning using vertex shader
    is fastest ?
  • Disclaimer Your mileage may vary

40
SW Skinning Performace
  • Skin on CPU instead of GPU
  • CPU/GPU load balancing
  • Multipass rendering
  • 33 faster skinning in D3DX 8.1
  • Consider using multiple streams
  • Minimize data processed by CPU

41
Skinning PMeshes
  • Skinning causes mesh to be split into subsets,
    adversely affecting simplification quality
  • Using Indexed skinning reduces subsets (1 if
    palette size gt num bones)
  • Call ConvertTo and use result to create PMesh

42
Simplification And Skinning
  • Simplification ignores geometry changes due to
    skinning
  • Default pose of mesh (figure mode?) may not be
    best to simplify
  • Many joint (elbows, knees, etc.) are straight
  • Geometric error when simplifying across joints
    lower than would be when joint is bent
  • Choose some different pose for simplification
    (How?)

43
Skinning And NPatches
  • Tessellating indices is messy
  • Use software skinning of control point mesh
  • Use only if hardware is doing full tessellation
  • Use non-indexed skinning of tessellated mesh
  • ConvertToBlendedMesh first
  • Tessellate the result
  • Update bone combination table with new attribute
    table

44
Call To Action
  • Try out new features in DirectX 8.1
  • Give us feedback
  • Tell us about bugs and performance issues
  • What else would you like to see?
  • Hang around for the next talk

45
Acknowledgements
  • Thanks to Origin Systems for permission to use
    Unicorn model
  • Thanks to NewTek for permission to use the
    monster model

46
Questions ?
47
D3DX 8.1 Anuj GosaliaDevelopment
LeadDirectX Graphics Microsoft Corporation
48
Overview Of D3DX 8.1
  • Mesh Utilities
  • Effect Framework
  • Shader assemblers
  • Texture Utilities
  • Math Utilities
  • Miscellaneous Utilities
  • Authoring tool support

49
Effect Framework
  • Encapsulation of device state
  • Enables scalable rendering techniques
  • Allows controlled fallback
  • Cant just switch to multi-pass
  • Older hardware cant do more passes since alpha
    blending fill rate is less
  • Helps rapid prototyping
  • Runtime interpretation of text-based effect
    definition

50
Effect FrameworkFallback Techniques
  • Uses controlled effect fallbacksEffect
  • Technique
  • Pass
  • Implementation
  • Simple text file (.fx) to define effects

51
Effect FrameworkFallback Techniques
  • Techniques are grouped by their quality or LOD
  • Techniques can be chosen based on what hardware
    creates successfully
  • Can test performance in back buffer
  • User responsible for drawing geometry

52
Effect FrameworkCreating Effects
  • D3DXCompileEffectFromFile
  • Parses text file
  • D3DXCreateEffect
  • Use compiled effect to create an effect object
  • State for each pass is encoded as state blocks

53
Effect Data types
  • DWORD, FLOAT
  • VECTOR, MATRIX
  • TEXTURE
  • VERTEXSHADER, PIXELSHADER
  • STRING
  • Enables user-data associated with effects
  • Not used to program device state

54
Parameterized Effects
  • Effects can have parameters of various types
  • Parameters augment static state description in
    the .fx files
  • How (and which) parameters get used defined by
    the effect

55
Effect Improvemets
  • Support for longer names
  • No longer limited to FourCC
  • Enable ordinal or string based parameter
    resolution
  • Block comment / / support
  • Merge ID3DXEffect and ID3DXTechnique
  • Need to carry around only 1 pointer
  • OnLost() and OnReset() methods

56
Effect FrameworkShader Assemblies
  • In-line or load from file
  • Vertex
  • D3DXAssembleVertexShader()
  • D3DXAssembleVertexShaderFromFile()
  • Pixel
  • D3DXAssemblePixelShader()
  • D3DXAssemblePixelShaderFromFile()

57
Shape Library
  • Regular polygon
  • Box
  • Cylinder/Cone
  • Sphere
  • Torus
  • And, of course, the teapot
  • Optional adjacency info available

58
2D Text
  • Draw text to surface using GDI
  • Render to off screen DC
  • Blit to an internal texture
  • Render using quad
  • Cache output by rendering to a texture
  • Supports all GDI features italics, kerning,
    international fonts, etc.
  • ID3DXFontDrawText

59
Dynamic 2D text
  • Using GDI every time can be slow
  • Render alphabet to a texture
  • Render a quad per character
  • Texture coordinates into the texture depend on
    the character
  • Works well with simple fonts
  • Not for international fonts, kerning, etc.
  • CD3DFont in sample framework does this

60
3D Text
  • D3DXCreateText
  • Extrudes a string rendered using a TrueType font
  • Returns a mesh object
  • Does not handle
  • Kerning, etc.
  • International font spacing

61
Sprites (not point sprites!)
  • Draws image in a texture to screen
  • Using a textured quad
  • Alpha blending
  • Rotation, scales
  • Arbitrary transforms warps
  • For performance
  • Draw multiple sprites between Begin/End
  • Draw mutiple sprites from same texture

62
Rendering to Textures
  • ID3DXRenderToSurface abstraction
  • Begin
  • Setup render targets, viewports
  • Use intermediate surface if necessary
  • call BeginScene
  • End
  • Cleanup
  • Call EndScene
  • Blit to dest if necessary

63
Texture Utilities
  • Image file loaders
  • JPG, PNG, TGA, BMP, PPM, DDS
  • Supports files in memory
  • Format conversion
  • Image re-sampling
  • Better filtering options
  • Supports wrap modes
  • Mip-map generation
  • Color-key to alpha conversion

64
DXTn Encode Quality
  • New high quality compression algorithm
  • Fast enough for load-time compression
  • 75-95 of earlier algorithm
  • Dithers while encoding
  • Avoids blocking of smooth gradients
  • Improved encoding for alpha images

65
DXTn Encoding examples
66
Texture utilities update
  • D3DXGetImageInfoFrom()
  • Info about image before loading it
  • Include file format info
  • Enables calling appropriate load function
  • D3DXLoadSurfaceFromSurface performance
  • Will use hardware if possible
  • Support for dynamic textures

67
Image Save
  • D3DXSaveSurfaceToFile
  • BMPs
  • 8-bit paletted
  • 24-bit RGB
  • DDS
  • All formats
  • Mip-maps, cube-maps, volumes

68
New scratch pool
  • D3DPOOL_SCRATCH
  • Allows creation of resources that are not limited
    by device capabilities
  • Create-Destroy, Lock-Unlock
  • Can set to device, use in rendering
  • Use with D3DX to convert to something useable
  • e.g., Load high-prec height field and convert to
    device prec normal map

69
Texture Fill
  • Texture fill functions
  • D3DXFillTexture
  • D3DXFillCubeTexture
  • D3DXFillVolumeTexture
  • Handles mip-maps
  • Callback function gets a 2D/3D location and size
    of texel
  • Encode functions as look-up tables for pixel
    shaders

70
Bump Mapping
  • D3DXComputeNormalMap
  • Converts a height field to a normal map
  • Looks at 8 neighbors to calculate slope
  • Calculates occlusion term in alpha
  • Rough estimate of what fraction of the hemisphere
    at that location in the height field is sky
  • Smooth gradients can have aliasing
  • Use high-precision height field
  • D3DX now supports 16-bit formats

71
Math Library Improvements
  • D3DXQuaternionSqaudSetup
  • Use with D3DXQuaternionSqaud
  • D3DXMatrixMultiplyTranspose
  • For matrices in vertex shaders
  • D3DXFresnelTerm
  • Useful along with texture fill functions

72
Math library optimization
  • CPU specific optimizations for most important
    functions
  • 3DNow, SSE and SSE2
  • Vector, matrix, quaternion, interpolation,
  • Auto-detect CPU type
  • First call to an optimized math function detects
    CPU
  • Patches jump table so no additional overhead for
    subsequent calls

73
Aligned Matrices
  • Support for 16-byte aligned matrices
  • D3DXMATRIXA16
  • Uses declspec(align16) on new compilers
  • Visual C 6 processor pack
  • Visual C 7 (future product)
  • Not in Visual C 6 service packs
  • Aligns on stack, members, globals
  • Overloaded new / delete for aligned heap
    allocations
  • Use with care when embedding in structs

74
Authoring Tool Support
  • Feature adoption gated by art pipeline
  • Longer lead times for content creation
  • Tool evolution rate
  • Duplicated effort for custom tools
  • Every shop writes own export plug-ins
  • We will provide source and samples
  • To help reduce learning curve
  • Look under extras directory in SDK

75
Authoring Tool Plug-Ins
  • Meshes
  • Patches
  • Transform hierarchy
  • Materials and Textures
  • Skinning
  • Animation

76
3D Studio Max 3.x, 4.0
  • Support Character Studio 2.x, 3.0
  • Biped animations stored as sampled matrices
  • Physique skinning exported
  • Might need to re-apply physique to old data files
    like babyenv.max
  • COM Skin support planned
  • Patch export
  • Work in progress
  • Cannot export patches created by surface modifier

77
AW Maya 2.x, 3.x
  • Support Rigid and Smooth skinning
  • Maya 2.x only has NURBS
  • Can convert to patches using a script
  • Use this before calling the exporter
  • Supports export of skinned patches
  • Maya 3.x has patches
  • Do not have export option yet

78
Future thoughts
  • Improved PM simplification
  • Ray-mesh intersection with precomputation
  • Rasterize geometry attributes to textures
  • Generate normal and displacement maps from high
    poly meshes

79
Call To Action
  • Try out new features in DirectX 8.1
  • Give us feedback
  • Tell us about bugs and performance issues
  • What else would you like to see?
  • Hang around for the next talk

80
Acknowledgements
  • Thanks to Origin Systems for permission to use
    Unicorn model
  • Thanks to NewTek for permission to use the
    monster model

81
Questions ?
Write a Comment
User Comments (0)
About PowerShow.com