April 4-7, 2016 | Silicon Valley ESI RENDERING INNOVATIONS WITH NVIDIA DESIGNWORKS ™ Andreas Mank (Andreas.Mank@esi-group.com) Team Leader Visualization, ESI Group Markus Tavenrath (mtavenrath@nvidia.com) Senior Developer Technology Engineer, NVIDIA 04/04/2016 www.esi-group.com
“ a pioneer and world-leading provider in Virtual Prototyping ” — www.esi-group.com/ 2
Everytime and everywhere Reliable behavior Distributed hardware High quality On demand Virtual Engineering Dynamic scenes Intuitive interaction Immersion 3
Remote Rendering Interactive Ray Tracing Abstract Material Definition Physically-Based Rendering HELIOS BY Hybrid Rendering High Performance Rendering 4
“ Tools and technologies for professional graphics and advanced rendering applications. ” https://developer.nvidia.com/designworks 5
DESIGNWORKS ™ Tools and Technologies in Virtual Engineering MDL SDK / VMATERIALS 6
RASTERIZER RAY TRACER DEMO: MATERIAL CONSISTENCY WITH MDL 7
DESIGNWORKS ™ Tools and Technologies in Virtual Engineering MDL SDK / VMATERIALS OPTIX 8
GLOBAL ILLUMINATION WITH OPTIX 9
DEMO: INTERACTIVE GI WITH VCAS 10
DESIGNWORKS ™ Tools and Technologies in Virtual Engineering MDL SDK / VMATERIALS OPTIX GRID SDK 11
PLATFORM AS A SERVICE WITH GRID 12
DESIGNWORKS ™ Tools and Technologies in Virtual Engineering MDL SDK / VMATERIALS OPTIX GRID SDK NVPRO-PIPELINE 13
NVPRO-PIPELINE Benefits in Virtual Engineering Modern OpenGL features Modern shader features with GLSL Not CPU-bound with shaders Not CPU-bound with complex scene graphs Efficient updates for dynamic geometries 14
SceniX RiX 2 FPS 20 FPS DEMO: DYNAMIC MESH ANIMATIONS WITH RIX 15
PERFORMANCE x 6 Chart Title 350 360 300 250 200 SceniX x 1.1 150 RiX Frames per second x 3 100 120 x 10 50 60 20 0 Dynamic Nodes Materials Fixed 16
DESIGNWORKS NV PRO Pipeline CPU load Framerate Framerate Quadro GPU load Quadro Low- Mid- High- Low- Mid- High- end range end end range end 4/4/2016 17
A LOOK INTO THE PAST SceniX 7 RENDERER DESIGN SceniX 7 used a dirty bit/renderlist cache scheme for rendering G0 material layer M0 M1 T0 T1 -> full rebuild transform layer T0 T2 T3 S0 G1 geometry layer S0 S1 S2 T2 T3 We had a few cases where rebuilt could be avoided Incremental updates were still not fast enough S1 S2 4/4/2016 18
A LOOK INTO THE PAST Renderer bottlenecks Profiling revealed multiple bottlenecks in renderer for (material : materials) // HashMap -> pointer chasing if (cam->isVisible(material)) // virtual function call -> pointer chasing process material(); // virtual function call for (transform : material.transforms) // HashMap if (cam->isVisible(transform)) // virtual function call process Transform(); // virtual function call for (shape : transform.shapes) // HashMap if (cam->isVisible(shape) // virtual function fall (20% time) process(shape) // switch(OC) -> branch misprediction 4/4/2016 19
NV PRO PIPELINE SceniX 6 -> SceniX 7 got up to 6x faster each interation if drawcall limited Still so many bottlenecks in our SceneGraph rendering Our partners like ESI needed just a fast renderer, not a SceneGraph SceneGraph->SceneGraph->Rendering worked mostly out Took a lot of resources and wasted CPU time due to the additional layer Research platform was required how to resolve all those bottlenecks NV PRO Pipeline was born Focus on CPU efficient rendering without any compatibility restriction 4/4/2016 20
NV PRO PIPELINE RiX::GL Developers who want to write an OpenGL renderer face one problem: OpenGL has a million ways to do the same thing, what‘s the best way? Parameters Uniforms, UBOs, SSBOs Bindless Combinatorial explosion Geometry immediate mode, display list, vbo/ibo, vao, vab Bindless 4/4/2016 21
NV PRO PIPELINE RiX::GL How to abstract all the differences in an efficient way? S2 S2 Monitor T3 M1 T3 M1 render(group of objects) S0 S2 M0 T0 S1 render(group of objects, order) S1 S1 T2‘ M1 RiX API to abstract rendering of groups of objects S0 S2 S1 T2 M1 4/4/2016 22
NV PRO PIPELINE SceneGraph RiX SceneGraph [dp::rix] [dp::sg] How to get from SceneGraph to group with incremental updates? G0 S2 T3 M1 T0 T1 S0 M0 T0 S0 G1 Referenced twice S1 T2 T3 T2‘ M1 S2 S1 S2 S1 T3 M1 T2 M1 4/4/2016 23
PIPELINE SceneGraph SceneGraph SceneTree Renderer RiX::GL [dp::sg] [dp::sg::xbar] [dp::sg::rdr::rix::gl] [dp::rix::gl] Events Events Translate S0 S1 S2 S0 S1 S2 G0 G0 T0 T2 T3 T0 T2 T3 S1‘ S1‘ S2‘ S2‘ T0 T1 T0 T1 T1‘ T2‘ T1‘ T2‘ S0 G1 S0 G1 G1‘ Events are fully incremental T2 T3 T2 T3 T2‘ T3‘ S1 S2 S1 S2 S1‘ S2‘ Needs to be done by your application if not using reference SceneGraph 4/4/2016 24
NV PRO PIPELINE Material System Basic pipeline ready SceneGraph -> group of objects -> RiX Next step: Support for GLSL Problem: uniforms, ubos, ssbos, different GLSL versions all required a different shader header We needed a material system, independent from SceneGraph 4/4/2016 25
NV PRO PIPELINE Material System Material system [dp::fx] was born Interface allows enumeration of Materials (shader pipelines) and corresponding set of parameter groups Allows multiple backends in parallel XML (public), MDL (on request) Material system can generate shaders for all parameter techniques Uniforms, UBOs, SSBOs, -> write shader only once 4/4/2016 26
NV PRO PIPELINE Results SceneTree RiX::GL SceneGraph Renderer [dp::sg] [dp::sg::xbar] [dp::sg::rdr::rix::gl] [dp::rix::gl] Efficient pipeline with another ~6x speedup over SceniX 7 for draw-call limited scenes Achieves 6-7mio drawcalls/s on 2.4Ghz system when using bindless Started with new features Frustum culling TransformTree extraction from SceneTree 4/4/2016 27
NV PRO PIPELINE Frustum Culling Frustum culling is important to reduce #draw calls per frame Don‘t render hidden objects NV PRO Pipeline has efficient frustum culling system (10k objects get culled in ~100us) works on groups and returns delta since last call -> don‘t process unchanged data [dp::culling] is the module 4/4/2016 28
NV PRO PIPELINE Transform Tree TransformTree is responsible to compute work transform for each object Currently tighly bound to xbar which translates from SceneGraph to Renderer Working on TransformTree as indepdenent module Currently ~15M transforms/s on CPU and up to 300M transforms/s on GPU For more information visit my Talk: S6131 - Nvpro-Pipeline: Handling Massive Transform Updates in a SceneGraph Tuesday, 14:30 – 14:55 4/4/2016 29
NV PRO PIPELINE Results NV PRO PIPELINE is our open source research rendering pipeline, it‘s not a product Demonstrates techniques to reduce CPU cost of rendering Shows that big speedups are possible when leaving traditional SceneGraph traversal ESI proof that the concepts do work in real world applications Working on modularization so that even more modules can be used in other projects Interested? Grab your copy here: https://developer.nvidia.com/nvidia-pro-pipeline 4/4/2016 30
April 4-7, 2016 | Silicon Valley THANK YOU https://developer.nvidia.com/nvidia-pro-pipeline www.esi-group.com
HELIOS - CURRENTLY Back-Ends RiX::GL ICIDO RASTERIZER Culling HELIOS Transform Multi-Cast Viewer OptiX RAY TRACER VCA 04.04.2016 4/4/2016 32
HELIOS - WHAT’S NEXT? OPENGL dp::fx ICIDO HELIOS OPTIX MDL SDK COMPOSITER VRify VULKAN GRID SDK 04.04.2016 4/4/2016 33
Recommend
More recommend