nvidia turf effects
play

NVIDIA TURF EFFECTS: MASSIVE GRASS RENDERING WITH DYNAMIC SIMULATION - PowerPoint PPT Presentation

NVIDIA TURF EFFECTS: MASSIVE GRASS RENDERING WITH DYNAMIC SIMULATION EVGENY MAKAROV , DEVTECH NVIDIA OUTLINE Real-time grass rendering Turf Effects: grass rendering Turf Effects: dynamic simulation Grass authoring Q&A REAL-TIME GRASS


  1. NVIDIA TURF EFFECTS: MASSIVE GRASS RENDERING WITH DYNAMIC SIMULATION EVGENY MAKAROV , DEVTECH NVIDIA

  2. OUTLINE Real-time grass rendering Turf Effects: grass rendering Turf Effects: dynamic simulation Grass authoring Q&A

  3. REAL-TIME GRASS RENDERING

  4. PARTICLE BASED GRASS Billboards Top view Grass objects

  5. PARTICLE BASED GRASS Pros Good density Plausible rendering results Good performance Cons View dependent Complicated physical interaction

  6. GEOMETRY BASED GRASS

  7. GEOMETRY BASED GRASS

  8. GEOMETRY BASED GRASS Pros High density Looks good at any scale Simplified physical interaction Two-sided lighting and self-shadowing Cons High rendering complexity

  9. TURF EFFECTS: GEOMETRY BASED GRASS

  10. BREAK GRASS INTO A SET OF PATCHES

  11. RENDERING A GRASS BLADE + (u1,v1) u v Vertex Hull Domain shader shader shader

  12. PATCH INITIALIZATION Application provides a set of seed points Seed point Position Expansion Asset ID u 1 v

  13. SEED PARAMETERS Dispersal (coverage radius) LOW HIGH Bunching (radial alignment)

  14. GRASS PATCH RENDERING Build a list of visible patches Library renders data for a single asset type at once Render PatchesNum * AssetsNum  Need to minimize API state changes Use single API call per patch per asset  for (n = 0; n < patchPerAssetCount; n++) DrawInstanced (…, patchID); ~18.0 millions DrawInstanced() calls/sec* * i7 4770K 3.5GHz, GeForce GTX 960 driver 347.52

  15. OCCLUSION CULLING Per patch occlusion culling on GPU Use application provided depth with occluders information Rasterize per patch conservative boundary boxes with read-only depth i i j k OCCLUDER k

  16. OCCLUSION CULLING void DrawInstanced( UINT VertexCountPerInstance, UINT InstanceCount, UINT StartVertexLocation, UINT StartInstanceLocation ); … 0 0 0 . . . … 0 1 0 i i . . . … 0 0 k k-1 … 0 1 0 k … 0 0 k+1 . . .

  17. RENDERING WITH OCCLUSION CULLING Per asset: Write per patch blade count Call DrawInstancedIndirect() to render each patch Culled patches would still issue draw calls on CPU

  18. VARYING DENSITY Reduce blade count for distant patches Analytically defined Use fixed number of discrete LODs with smooth transitions density 1 d 0 distance level 0 level 1 level 2

  19. VARYING DENSITY

  20. VARYING DENSITY Close up patch view Distant patch view (<10% of original blades)

  21. DYNAMIC SIMULATION Grass interacts with dynamic scene objects

  22. DYNAMIC SIMULATION (2) Simulate collision with per-blade control points Use mass-spring model F2 m2 F1 m1

  23. EXTERNAL FORCES

  24. EXTERNAL FORCES RENDER VOLUME

  25. EXTERNAL FORCES RENDER VOLUME

  26. EXTERNAL FORCES v Δ F = k Δ F combined

  27. DYNAMIC SIMULATION

  28. SIMUALTION SUMMARY Encode dynamic objects in a form of deformation heightfield Patch-space distance to occluder Per-pixel movement speed Landscape is also a heightfield Per asset simulation parameters Stiffness Restitution Do not resolve collisions between individual grass blades

  29. GRASS AUTHORING Seed parameters Control blades distribution Asset parameters Control individual blade look

  30. ASSET PARAMETERS Width float4(w0, w1, w2, w3) Tip w3 w2 w1 w0 Root (1,1,1,1) (1,1,1,0) (0,1,1,1)

  31. VARYING SMOOTHNESS

  32. ASSET PARAMETERS (2) Edge offset Density falloff Shape variations A set of “barebones” used for particular grass type 2 user-defined CPs 3 user-defined CPs

  33. SUMMARY Turf Effects: real-time grass simulation and rendering Currently uses tessellation (D3D 11.0 or OpenGL 4.0) Can rely on existing content Convert existing particle-based grass into geometry

  34. Q&A

  35. THANK YOU

Recommend


More recommend