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

integrating the nvidia material definition language mdl
SMART_READER_LITE
LIVE PREVIEW

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


slide-1
SLIDE 1

March 17-21, 2019 | Silicon Valley

Lutz Kettner Director, Rendering Software and Material Definition Sandra Pappenguth Moritz Kroll Matthias Raab Kai Rohmer

Integrating the NVIDIA Material Definition Language MDL in Your Application

slide-2
SLIDE 2

2

Agenda

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

slide-3
SLIDE 3

3

MDL – a short introduction

slide-4
SLIDE 4

4

NVIDIA Material Definition Language (MDL)

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

What is this?

slide-5
SLIDE 5

5

MDL

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

Key Features

slide-6
SLIDE 6

6

MDL SDK overview

slide-7
SLIDE 7

7

MDL SDK 2019

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

Overview

slide-8
SLIDE 8

8

MDL SDK 2019

What you get

Editor Renderer API Samples Distill Optimized DAG view on material MDL source Database of content Generate code Bake textures Docs

MDL SDK

Compile Material Resolve, parse, store

slide-9
SLIDE 9

9

MDL SDK 2019

What you get

Loading of MDL materials MDL 1.4 support

Editor Renderer API Samples Distill Optimized DAG view on material Database of content Generate code Bake textures Docs Compile Material MDL source Resolve, parse, store

MDL SDK

slide-10
SLIDE 10

10

Editor Renderer API Samples Distill Optimized DAG view on material MDL source Database of content Generate code Bake textures Docs Compile Material Resolve, parse, store

MDL SDK 2019

What you get

DB view on MDL definitions MDL material/function editing and storage Via transactions

MDL SDK

slide-11
SLIDE 11

11

MDL SDK 2019

What you get

Editor Renderer API Samples Distill Optimized DAG view on material MDL source Database of content Generate code Bake textures Docs Resolve, parse, store Compile Material

MDL 1.4 core compiler

Configuration, data import and export, backend access

MDL SDK

slide-12
SLIDE 12

12

MDL SDK 2019

What you get

Compact, optimized DAG representation of a material instance 2 compilation modes

Editor Renderer API Samples Distill MDL source Database of content Generate code Bake textures Docs Compile Material Resolve, parse, store Optimized DAG view on material

MDL SDK

slide-13
SLIDE 13

13

MDL SDK 2019

What you get

Backends for code generation

  • CUDA PTX
  • LLVM IR
  • HLSL
  • GLSL
  • x86-64 CPU

Editor Renderer API Samples Distill MDL source Database of content Generate code Bake textures Docs Compile Material Resolve, parse, store Optimized DAG view on material

MDL SDK

slide-14
SLIDE 14

14

MDL SDK 2019

What you get

Material distilling and baking

Editor Renderer API Samples Distill Optimized DAG view on material MDL source Database of content Generate code Bake textures Docs Compile Material Resolve, parse, store

MDL SDK

slide-15
SLIDE 15

15

MDL SDK 2019

What you get

Example Code Documentation

Editor Renderer API Samples Distill MDL source Database of content Generate code Bake textures Docs Compile Material Resolve, parse, store Optimized DAG view on material

MDL SDK

slide-16
SLIDE 16

16

Loading and compiling materials

slide-17
SLIDE 17

17

Loading and compiling materials

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

slide-18
SLIDE 18

18

Steps towards a compiled material

Load a module

Create material instance Change Arguments Compile material Load MDL module

// 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

slide-19
SLIDE 19

19

Steps towards a compiled material

Create a material instance

Create material instance Change Arguments Compile material Load MDL module

// 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

slide-20
SLIDE 20

20

Steps towards a compiled material

Edit a material instance

Create material instance Change Arguments Compile material Load MDL module

// 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

slide-21
SLIDE 21

21

Steps towards a compiled material

Compile a material instance

Create material instance Change Arguments Compile material Load MDL module

// 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

slide-22
SLIDE 22

22

MDL Compilation Modes

All arguments are compiled into the resulting material PRO: Allows for best optimization CON: Every argument change requires full recompilation Many arguments remain parameters

  • f the compiled material

PRO: Fast parameter updates, reuse of generated code for many variants

  • f the same material

CON: Less optimization potential

Instance Compilation Class Compilation

slide-23
SLIDE 23

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

slide-24
SLIDE 24

24

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) ) );

surface.scattering simple_glossy_bsdf roughness_u roughness_v

0.3 0.2 instance compile

slide-25
SLIDE 25

25

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) ) );

surface.scattering simple_glossy_bsdf roughness_u ru.a ru.b rv min a roughness_v b

0.3 0.8 0.2

surface.scattering simple_glossy_bsdf roughness_u roughness_v

0.3 0.2 class compile instance compile

slide-26
SLIDE 26

26

Working with a compiled material

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

slide-27
SLIDE 27

27

Working with a compiled material

Graph of compiled material

material.surface.scattering

Material model field

slide-28
SLIDE 28

28

Working with a compiled material

Graph of compiled material

weighted layer diffuse specular

Distribution functions

material.surface.scattering

Material model field

slide-29
SLIDE 29

29

Working with a compiled material

Graph of compiled material

weighted layer weight diffuse specular tint roughness tint

Distribution functions Texturing functions

material.surface.scattering

Material model field

slide-30
SLIDE 30

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
slide-31
SLIDE 31

31

Executing texturing functions

slide-32
SLIDE 32

32

Executing texturing functions

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

slide-33
SLIDE 33

33

Executing texturing functions

Using a backend

Configure backend Generate code Execute code Select backend

// 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

slide-34
SLIDE 34

34

Executing texturing functions

Generating target code

Configure backend Generate code Execute code Select backend

// translate function Handle<ITarget_code> code( backend->translate_material_expression( transaction, compiled_material, "surface.scattering.tint", "my_material_expression", context));

Path to texturing function within compiled material

→ examples/mdl_sdk/compilation

slide-35
SLIDE 35

35

Executing texturing functions

Executing target code

Configure backend Generate code Execute code Select backend

  • Access to shading state
  • Argument passing in class compilation mode
  • Runtime for resource access

→ examples/mdl_sdk/compilation

slide-36
SLIDE 36

36

Executing texturing functions

struct Shading_state_material { float3 normal; // state::normal() float3 geom_normal; // state::geom_normal() float3 position; // state::position() float animation_time; // state::animation_time() const float3 *text_coords; // state::texture_coordinate() table const float3 *tangent_u; // state::texture_tangent_u() table const float3 *tangent_v; // state::texture_tangent_v() table float4 *text_results; // used by _bsdf_init() const char *ro_data_segment; // read-only data segment const float4 *world_to_object; // world-to-object transform matrix const float4 *object_to_world; // object-to-world transform matrix int

  • bject_id; // state::object_id()

};

MDL shading state provided by the renderer

→ include/mi/neuraylib/target_code_types.h

slide-37
SLIDE 37

37

Executing texturing functions

// setup state Shading_state_material state = {...}; // arguments of class-compiled material Handle<ITarget_argument_block> arg_block_data = ...; // call function float3 result; target_code->execute( function_index, state, /*tex_handler=*/ nullptr, arg_block_data.get(), &result);

Calling your code on the CPU

→ examples/mdl_sdk/execution_native

slide-38
SLIDE 38

38

Executing texturing functions

Generated ITarget_code contains

  • ITarget_argument_block:

Parameter values of compiled material

  • ITarget_value_layout:

Layout of argument block

i-th element in layout corresponds to i-th parameter of compiled material

Passing arguments to class compiled materials

→ examples/mdl_sdk/execution_hlsl

slide-39
SLIDE 39

39

Executing texturing functions

Renderer manages resource data

  • MDL resources: textures, BSDF measurements, light profiles
  • Large constant data blocks

Renderer provides access functions to this data (“Runtime”)

  • Backend specific
  • Example implementations shipped with the SDK
  • Native backend provides optional built-in runtime

Providing a runtime for resource-access

→ examples/mdl_sdk/execution_*

slide-40
SLIDE 40

40

Executing texturing functions

PTX backend generates string of PTX code Can be linked to your kernel using cuLinkAddData()

Calling your code in CUDA

slide-41
SLIDE 41

41

Executing texturing functions

Calling your code in CUDA

// setup state const Shading_state_material state = {...}; // texture lookup handler const Resource_data res_data = {NULL, &my_texture_handler}; // arguments of class-compiled material const char *arg_block_data = ...; // call function float3 result; my_material_expression(&result, &state, &res_data, /*exception_state=*/ NULL, arg_block_data);

→ examples/mdl_sdk/execution_cuda

slide-42
SLIDE 42

42

Executing texturing functions

PTX backend generates string of PTX code MDL utility code shipped with the OptiX SDK examples

  • Creates callable programs
  • Includes a runtime for bitmap texture access (and data upload to OptiX buffers)

Calling your code in OptiX

mdl_helper = new Mdl_helper(optix_context); ...

  • ptix::Program tint_prog = mdl_helper->compile_expression(...);
  • ptix_material["my_material_expression"]->setProgramId(tint_prog);
slide-43
SLIDE 43

45

Executing texturing functions

HLSL backend generates string of HLSL code Can be used in your HLSL shader (e.g. DXR closest-hit)

Calling your code in HLSL

slide-44
SLIDE 44

46

Executing texturing functions

Calling your code in HLSL

#include “mdl_target_code_types.hlsli” #include “renderer_mdl_runtime.hlsli” [ insert generated code here ] [ ... ] // setup state Shading_state_material mdl_state = { ... }; // call function float3 result = my_material_expression(mdl_state);

→ examples/mdl_sdk/execution_hlsl

slide-45
SLIDE 45

47

Texture filtering

Texture filtering may require derivatives of UV-input with respect to screen-space coordinates for anti-aliasing UV-input typically driven by an expression of state::texture_coordinate() MDL SDK offers automatic computation of derivatives of such expressions and passes them to the texture runtime → Enable with backend option “texture_runtime_with_derivs”

Providing derivatives to texture functions

→ examples/mdl_sdk/df_cuda

slide-46
SLIDE 46

48

Texture filtering

Renderer needs to provide

  • Shading_state_material_with_derivs as state

Texture coordinates with derivatives struct type (float2 val, dx, dy)

  • tex_lookup_deriv_float4_2d / tex_lookup_deriv_float3_2d

Can call functions like tex2DGrad with provided derivatives

Providing derivatives to texture functions

→ examples/mdl_sdk/df_cuda

slide-47
SLIDE 47

49

Multiple texturing functions

Generating target code per expression may cause problems

  • Common utility code is compiled several times
  • Can cause name clashes if generated PTX/HLSL/GLSL code is used in a single program

Using a “link unit” solves this problem

  • Add multiple expressions to a link unit
  • Then translate link unit

Creating code for multiple texturing functions

slide-48
SLIDE 48

50

Optimizing render state access

GLSL backend offers a configurable state

  • Access via state field,
  • function (e.g. “normal()”),
  • shader input variables (“normal”),
  • r always zero

Native, PTX, and LLVM-IR backends allow customized access

  • Pass pointer to your state data
  • Provide accessor functions for all state fields as LLVM bitcode

Customized state

→ examples/mdl_sdk/user_modules

slide-49
SLIDE 49

51

Executing distribution functions

slide-50
SLIDE 50

52

Executing distribution functions

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

slide-51
SLIDE 51

53

From material to rendering code

Actual shading code for material description can be highly renderer specific

  • A renderer may analyze the declarative part of the compiled material instance

(in particular all BSDFs)

  • Renderer can implement its own building blocks for all of MDL’s df module
  • Renderer needs to wire up BSDF hierarchy and parameters within its own data

structures

  • Renderer can “interpret” that at runtime
  • Or we just let the MDL SDK create code for the BSDFs

Implementing the declarative part of the material

slide-52
SLIDE 52

54

Compiling BSDFs

Generating functions for BSDFs

// for a single material Handle<ITarget_code> target_code(backend->translate_material_df( transaction, compiled_material, "surface.scattering", "my_material", context));

Path to BSDF within compiled material

slide-53
SLIDE 53

55

Compiling BSDFs

init: Shared initialization for the current shading point evaluate: Evaluation of the BSDF for a given outgoing and incoming direction sample: Importance sampling of an incoming for a given outgoing direction pdf: Probability density computation of that importance sampling

Generates building blocks for a physically based renderer

my_module::my_material

void my_material_init(…) void my_material_evaluate(…) void my_material_sample(…) void my_material_pdf(…)

slide-54
SLIDE 54

56

Calling BSDFs

Function signatures

typedef void (Bsdf_init_function) (Shading_state_material *state, const Resource_data *res_data, const void *exception_state, const char *arg_block_data); typedef void (Bsdf_sample_function) (Bsdf_sample_data *data, const Shading_state_material *state, const Resource_data *res_data, const void *exception_state, const char *arg_block_data); typedef void (Bsdf_evaluate_function)(Bsdf_evaluate_data *data, ...); typedef void (Bsdf_pdf_function) (Bsdf_pdf_data *data, ...);

→ include/mi/neuraylib/target_code_types.h

slide-55
SLIDE 55

57

Using BSDFs

Initialization function “_init”

Often there are multiple calls to evaluate and / or calls to both evaluate and sample for the same shading point No need to compute texturing functions more than once BSDF init function caches those results in state->text_results Size of array configurable, excess texturing functions get recomputed Further replaces state->normal by MDL’s material_geometry.normal

slide-56
SLIDE 56

58

Using BSDFs

Evaluation function “_evaluate”

struct Bsdf_evaluate_data { // Input fields float3 ior1; // IOR current medium float3 ior2; // IOR other side float3 k1; // outgoing direction float3 k2; // incoming direction // Output fields float3 bsdf; // bsdf * dot(normal, k2) float pdf; // pdf (non-projected hemisphere) };

k1 k2

→ include/mi/neuraylib/target_code_types.h

slide-57
SLIDE 57

59

Using BSDFs

Probability density function “_pdf”

struct Bsdf_pdf_data { // Input fields float3 ior1; // IOR current medium float3 ior2; // IOR other side float3 k1; // outgoing direction float3 k2; // incoming direction // Output fields float pdf; // pdf (non-projected hemisphere) };

k1 k2

→ include/mi/neuraylib/target_code_types.h

slide-58
SLIDE 58

60

Using BSDFs

Importance sampling function “_sample”

struct { // Input fields float3 ior1; // IOR current medium float3 ior2; // IOR other side float3 k1; // outgoing direction float3 xi; // pseudo-random sample // number // Output fields float3 k2; // incoming direction float pdf; // pdf (non-projected hemisphere) float3 bsdf_over_pdf; // bsdf * dot(normal, k2) / pdf Bsdf_event_type event_type; // the type of event for the generated sample // (e.g. BSDF_EVENT_GLOSSY_REFLECTION or // BSDF_EVENT_ABSORB)

};

k1 k2

→ include/mi/neuraylib/target_code_types.h

slide-59
SLIDE 59

61

Using BSDFs

Simplistic path tracer example

// init my_material_init(&state, ...); // light sampling: evaluate for (int l = 0; l < num_light_sources; ++l) { eval_data.k2 = get_light_direction(l, ...); contrib += current_weight * my_material_evaluate(&eval_data, &state, ...) * get_light_contribution(l, ...); } // continue path: importance sample BSDF sample_data.xi = ...; my_material_sample(&sample_data, &state, ...); if (sample_data.event == BSDF_EVENT_ABSORB){ absorb(...); return; } current_weight *= sample_data.bsdf_over_pdf; ray.direction = sample_data.k2; ...

→ examples/mdl_sdk/df_cuda

slide-60
SLIDE 60

62

Using EDFs

Analogously to using BSDFs

Same building block functions: init, evaluate, pdf, sample with similar parameters: Edf_evaluate_data, Edf_sample_data, Edf_pdf_data

struct Edf_evaluate_data { // Input fields float3 k1; // outgoing direction // Output fields float cos; // dot(normal, k1) float3 edf; // emission float pdf; // pdf (non-projected hemisphere)

};

k1

→ include/mi/neuraylib/target_code_types.h

slide-61
SLIDE 61

63

Using BSDFs, EDFs and texturing functions

Bundle functions that belong to one material to use one argument block

material glowing(color glow_int: color(10.0)) = material( surface: material_surface( scattering: simple_glossy_bsdf(roughness_u: 0.1), emission: material_emission( emission: diffuse_edf(), intensity: glow_int)));

// add all functions of interest at once Target_function_description descs[3] = { Target_function_description("surface.scattering"), Target_function_description("surface.emission.emission"), Target_function_description("surface.emission.intensity")}; link_unit->add_material(compiled_material, descs, 3, context));

slide-62
SLIDE 62

64

Using DFs

SDK Examples

Simple mini-renderer in CUDA, computing direct light on a sphere using

  • BSDF importance sampling
  • BSDF evaluation of importance sampled environment light
  • Combined via multiple importance sampling
  • Evaluate EDF and emission intensity

OptiX example included in OptiX SDK

  • Includes utility code to generate callable programs for BSDF functions
slide-63
SLIDE 63

65

Using DFs

Live demo DXR path tracer

  • Using BSDFs in HLSL
  • GLTF model loading
  • Interactive material

parameter editing

  • Image-based lighting
slide-64
SLIDE 64

66

Distilling to a fixed target model

slide-65
SLIDE 65

67

Distilling to a fixed target model

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

slide-66
SLIDE 66

68

Distilling to a fixed target model

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

slide-67
SLIDE 67

69

MDL distilling → Adapts MDL for realtime applications Term rewriting system with rule sets to simplify expressions Available models: diffuse, diffuse/glossy, UE4, specular/glossy, transmissive PBR

Distilling to a fixed material model

Overview

Fixed Material Model MDL Material

Complex BSDF layering Complex procedurals Simple BSDF structure One texture per parameter

distill

slide-68
SLIDE 68

70

Distilling to a fixed material model

Overview

  • riginal

diffuse diffuse/glossy UE4

Distilling a metal

slide-69
SLIDE 69

71

Distilling to a fixed material model

Overview

Original: Iray MDL Projection: Dassault Stellar with Enterprise PBR using trans- missive PBR

slide-70
SLIDE 70

72

Distilling to a fixed material model

Overview

surface.scattering material

? ? ? ?

slide-71
SLIDE 71

73

Distilling to a fixed material model

Overview

simple_glossy_bsdf diffuse_reflection_bsdf tint … ior fresnel_layer tint … base layer surface.scattering material surface.scattering material

? ? ? ? Distill to Diffuse/Glossy

slide-72
SLIDE 72

74

Distilling to a fixed material model

Overview

surface.scattering material

? ? ? ? Distill to Diffuse/Glossy

diffuse_reflection_bsdf tint … surface.scattering material simple_glossy_bsdf tint … surface.scattering material

slide-73
SLIDE 73

75

Distilling to a fixed material model

Code

Distill Material Gather Expressions Process Expressions Get Distiller API

// Acquire distilling API used for material distilling and baking Handle<IMdl_distiller_api> distiller_api( mdl_sdk->get_api_component<IMdl_distiller_api>()); // Distill the compiled material to the diffuse_glossy material model Handle<const ICompiled_material> distiller_material( distiller_api->distill_material(compiled_material.get(), "diffuse_glossy"));

→ examples/distilling

slide-74
SLIDE 74

76

Distilling to a fixed material model

Code

Distill Material Gather Expressions Process Expressions Get Distiller API

// Get diffuse color const char* diffuse_path; switch(get_call_semantic(distilled_material, "surface.scattering")){ case DS_INTRINSIC_DF_DIFFUSE_REFLECTION_BSDF: diffuse_path = "surface.scattering.tint"; break; case DS_INTRINSIC_DF_FRESNEL_LAYER: diffuse_path = "surface.scattering.base.tint"; break; … }

→ examples/distilling

slide-75
SLIDE 75

77

Distilling to a fixed material model

Code

Distill Material Gather Expressions Process Expressions Get Distiller API

// Bake … Handle<const IBaker> baker(distiller_api->create_baker( distilled_material.get(), diffuse_path)); Handle<ICanvas> canvas = ... baker->bake_texture(canvas.get()); // … or generate code link_unit->add_material_expression( compiled_material.get(), diffuse_path, "get_diffuse");

→ examples/distilling_glsl

slide-76
SLIDE 76

78

Distilling to a fixed material model

SDK Examples

Simple console application

  • Distills a material to the desired target model
  • Analyses result and bakes expressions to textures

Simple OpenGL example

  • Distills input material to UE4
  • Generates GLSL code for all relevant texturing functions
  • Integrates generated code with a UE4 like GLSL shader
  • Renders an IBL lit sphere
slide-77
SLIDE 77

79

  • Download from https://developer.nvidia.com/mdl-sdk
  • An introduction to MDL can be found at www.mdlhandbook.com

MDL SDK

How to get

slide-78
SLIDE 78

80

Further Information on MDL

Documents

NVIDIA Material Definition Language

฀ Technical Introduction ฀ Handbook ฀ Language Specification

GTC On-Demand

  • n-demand-gtc.gputechconf.com

www.nvidia.com/mdl raytracing-docs.nvidia.com/mdl/index.html MDL@GTC

Mon 9 AM SJCC 230B

Sharing Physically Based Materials Between Renderers with MDL Integrating the NVIDIA Material Definition Language MDL in Your Application A New PBR Material Serving Mobile, Web, Real-Time Engines and Ray Tracing Multi-Platform Photo-Real Rendering: Utilizing NVIDIA'S MDL and Allegorithmic's Substance Suite for Product Imaging Real-Time Ray Tracing with MDL Materials

Mon 10 AM SJCC 230B Mon 11 AM Hilton Hotel Almaden 2 Tue 9 AM Hilton Hotel Almaden 2 Thu 10 AM SJCC 230C