integrating the nvidia material definition language mdl
play

Integrating the NVIDIA Material Definition Language MDL in Your - PowerPoint PPT Presentation

March 17-21, 2019 | Silicon Valley Integrating the NVIDIA Material Definition Language MDL in Your Application Lutz Kettner Director, Rendering Software and Material Definition Sandra Pappenguth Moritz Kroll Matthias Raab Kai Rohmer MDL


  1. March 17-21, 2019 | Silicon Valley Integrating the NVIDIA Material Definition Language MDL in Your Application Lutz Kettner Director, Rendering Software and Material Definition Sandra Pappenguth Moritz Kroll Matthias Raab Kai Rohmer

  2. MDL – a short introduction MDL SDK overview Loading and compiling materials Agenda Executing texturing functions Executing distribution functions Distilling materials to a fixed target model 2

  3. MDL – a short introduction 3

  4. NVIDIA Material Definition Language (MDL) What is this? Programming language to define physically-based materials A declarative material definition based on a powerful material model Procedurally programmable functions that compute values for the parameters of the material model Developed by NVIDIA 4

  5. MDL Key Features Independent of rendering algorithms -> purely descriptive material model Powerful set of elemental distribution functions plus modifiers and combiners Well defined module and package concept Designed for modern highly-parallel machine architectures 5

  6. MDL SDK overview 6

  7. MDL SDK 2019 Overview C++ Library to enable MDL support in your application Binary compatibility across shared library boundaries Access through abstract base classes with pure virtual member functions Reference counting for life-time control Shipped for Windows/Linux/Mac OS Open Source version on github 7

  8. MDL source MDL SDK 2019 MDL What you get Resolve, parse, store SDK Database of content Editor Compile Material Generate Renderer code Optimized DAG Bake view on material textures Samples API Docs Distill 8

  9. MDL source MDL SDK 2019 MDL What you get Resolve, parse, store SDK Database of content Editor Loading of MDL materials Compile Material MDL 1.4 support Generate Renderer code Optimized DAG Bake view on material textures Samples API Docs Distill 9

  10. MDL source MDL SDK 2019 MDL What you get Resolve, parse, store SDK Database of content Editor DB view on MDL definitions Compile Material MDL material/function editing and storage Generate Renderer code Optimized DAG Via transactions Bake view on material textures Samples API Docs Distill 10

  11. MDL source MDL SDK 2019 MDL What you get Resolve, parse, store SDK Database of content Editor MDL 1.4 core compiler Configuration, data Compile Material import and export, backend access Generate Renderer code Optimized DAG Bake view on material textures Samples API Docs Distill 11

  12. MDL source MDL SDK 2019 MDL What you get Resolve, parse, store SDK Database of content Editor Compact, optimized DAG representation of Compile Material a material instance 2 compilation modes Generate Renderer code Optimized DAG Bake view on material textures Samples API Docs Distill 12

  13. MDL source MDL SDK 2019 MDL What you get Resolve, parse, store SDK Database of content Editor Backends for code generation Compile Material CUDA PTX • Generate Renderer LLVM IR • code Optimized DAG Bake view on material HLSL • textures Samples GLSL • API Docs Distill x86-64 CPU • 13

  14. MDL source MDL SDK 2019 MDL What you get Resolve, parse, store SDK Database of content Editor Material distilling and baking Compile Material Generate Renderer code Optimized DAG Bake view on material textures Samples API Docs Distill 14

  15. MDL source MDL SDK 2019 MDL What you get Resolve, parse, store SDK Database of content Editor Example Code Documentation Compile Material Generate Renderer code Optimized DAG Bake view on material textures Samples API Docs Distill 15

  16. Loading and compiling materials 16

  17. Loading and compiling materials MDL source Resolve, parse, store Database of content Editor Compile Material Generate Renderer code Optimized DAG Bake view on textures material API Distill 17

  18. Steps towards a compiled material Load a module Create Load MDL Change Compile material module Arguments material instance // access MDL compiler Handle<IMdl_compiler> mdl_compiler( mdl_sdk->get_api_component<IMdl_compiler>()); // load MDL module mdl_compiler->load_module (transaction, "::example"); → examples/mdl_sdk/modules 18

  19. Steps towards a compiled material Create a material instance Create Load MDL Change Compile material module Arguments material instance // get material definition from database Handle<const IMaterial_definition> material_definition( transaction->access<IMaterial_definition>("mdl::example::my_material")); // instantiate material with default parameters and store in database Handle<IMaterial_instance> material_instance( material_definition->create_material_instance (/*args=*/ nullptr)); // store in database transaction->store(material_instance.get(), "my_material_instance"); → examples/mdl_sdk/instantiation 19

  20. Steps towards a compiled material Edit a material instance Create Load MDL Change Compile material module Arguments material instance // acquire MDL factory Handle<IMdl_factory> mdl_factory(mdl_sdk->get_api_component<IMdl_factory>()); // create argument editor Argument_editor arg_editor (transaction, “ my_material_instance", mdl_factory); // change the roughness parameter of the material instance arg_editor.set_value ("roughness", 0.8); // attach a function call to the "tint" parameter via DB name arg_editor.set_call ("tint", "uv_as_color"); → examples/mdl_sdk/instantiation 20

  21. Steps towards a compiled material Compile a material instance Create Load MDL Change Compile material module Arguments material instance // access material instance Handle<const IMaterial_instance> material_instance( transaction->access<const IMaterial_instance> ("my_material_instance"); // compile Handle<ICompiled_material> compiled_material( material_instance->create_compiled_material ( IMaterial_instance::CLASS_COMPILATION, ...)); → examples/mdl_sdk/compilation 21

  22. MDL Compilation Modes Instance Compilation Class Compilation All arguments are compiled into the Many arguments remain parameters resulting material of the compiled material PRO: Allows for best optimization PRO: Fast parameter updates, reuse of generated code for many variants of the same material CON: Every argument change requires CON: Less optimization potential full recompilation 22

  23. MDL Compilation Modes material glossy( float ru: min( a: 0.3, b: 0.8), float rv: 0.2 ) = material( surface : material_surface( scattering : simple_glossy_bsdf ( roughness_u: ru, roughness_v: rv) ) 0.3 ); 23

  24. MDL Compilation Modes material glossy( float ru: min( a: 0.3, b: 0.8), float rv: 0.2 ) surface.scattering = material( surface : material_surface( simple_glossy_bsdf scattering : roughness_u roughness_v simple_glossy_bsdf ( roughness_u: ru, roughness_v: rv) ) 0.3 0.2 instance ); compile 24

  25. 0.3 ru.a MDL Compilation Modes surface.scattering ru.b simple_glossy_bsdf 0.8 rv roughness_u roughness_v 0.2 min material glossy( b a float ru: min( a: 0.3, class b: 0.8), compile float rv: 0.2 ) surface.scattering = material( surface : material_surface( simple_glossy_bsdf scattering : roughness_u roughness_v simple_glossy_bsdf ( roughness_u: ru, roughness_v: rv) ) 0.3 0.2 instance ); compile 25

  26. Working with a compiled material MDL source Resolve, parse, store Database of content Editor Compile Material Generate Renderer code Optimized DAG Bake view on textures material API Distill 26

  27. Working with a compiled material Graph of compiled material Material model field material.surface.scattering 27

  28. Working with a compiled material Graph of compiled material Material model field material.surface.scattering weighted layer Distribution functions diffuse specular 28

  29. Working with a compiled material Graph of compiled material Material model field material.surface.scattering weighted layer Distribution functions diffuse specular tint tint weight roughness Texturing functions 29

  30. Working with a compiled material Inspect: Examine graph structure of compiled material Compile: Use MDL backends to generate target code for texturing functions • • distribution functions (not for GLSL) Distill: Use Distiller API to convert material to a fixed material model like UE4 • bake texturing functions into textures • 30

  31. Executing texturing functions 31

  32. Executing texturing functions MDL source Resolve, parse, store Database of content Editor Compile Material Generate Renderer code Optimized DAG Bake view on textures material API Distill 32

  33. Executing texturing functions Using a backend Select Configure Generate Execute backend backend code code // get a backend, e.g. the CUDA PTX backend Handle<IMdl_backend> backend( mdl_compiler->get_backend (IMdl_compiler:: MB_CUDA_PTX )); // set some backend specific options backend->set_option ("num_texture_results", "16"); backend->set_option ("tex_lookup_call_mode", "direct_call"); ... → examples/mdl_sdk/compilation 33

Recommend


More recommend