52
May 8-11, 2017 | Silicon Valley www.esi-group.com Detlef Röttger, NVIDIA Andreas Mank, ESI Group 2017-05-08 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL MATERIALS S7185

S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

  • Upload
    hadang

  • View
    243

  • Download
    0

Embed Size (px)

Citation preview

Page 1: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

May 8-11, 2017 | Silicon Valley

www.esi-group.com

Detlef Röttger, NVIDIA

Andreas Mank, ESI Group

2017-05-08

LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL MATERIALS

S7185

Page 2: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

2

VISUALIZE REAL-WORLD LIGHTS AND MATERIALS

Page 3: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

3

Introduction

Evolution of the Renderer Architecture

Introduction to NVRTC

Shader Generation from MDL Materials

Integration into ESI IC.IDO

Live Demonstration

AGENDA

Page 4: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

4

INTRODUCTION

Page 5: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

5

Page 6: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

6

Page 7: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

7

MOTIVATION

Scene exchange among applications often loses material information

Use the NVIDIA Material Definition Language (MDL) to exchange materials

Take advantage of existing MDL material libraries

Create new MDL materials with available third-party tools

Renderer goal:Handle MDL materials at runtime on end-user target system

Page 8: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

8

MDL

A domain-specific language for abstract declarative material description

Independent of a specific rendering system

Procedural programming language to customize texture image lookups or procedural textures

MDL Handbook and Specifications:http://www.mdlhandbook.com

More Information:https://developer.nvidia.com/designworks

NVIDIA Material Definition Language

Page 9: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

9

OPTIX

High-level GPU accelerated ray-casting API

C-API to setup scene and data

Multiple program domains and per ray payload under developer‘s control

Flexible single ray programming model

Supports multi-GPU and progressive renderingon remote NVIDIA VCA cluster

Develop "to the algorithm"

NVIDIA GPU Ray Casting API

volume scattering and dispersion

hair intersection and shading

Page 10: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

10

EVOLUTION OF THERENDERER ARCHITECTURE

Page 11: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

11

RENDERER IMPLEMENTATIONGoal: Handle MDL Materials at Runtime

Represent complex layered material hierarchies as CUDA C++ code

Templated classes for layered material construction from "fixed-function" building blocks(BSDFs, EDFs, VDFs, Layers, Mixers, Modifiers, Conditionals)

Connect user defined parameter calculations with building blocks

Derive from generated "getter" classes which fill building block input parameters.All functions inlined into material hierarchy traverser function.

Generate high-level CUDA C++ code

Easy prototyping and debugging before writing the code generator.Benefit from all optimizations inside the CUDA compiler.

Page 12: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

12

ray_gen

lens shader

integrator

output

any_hit

material

traverser

cutout opacity?

closest_hit

material

traverser

eval EDF

sample BSDF

eval BSDF

sample light

direct lighting?

bounding_box

intersection

edf

edf_diffuse

edf_spot

edf_measured

light_constant

light_env

light_mesh

bsdf

backscattering

diffuse_reflection

diffuse_transmission

glossy

measured

specular

beckmann_smith

beckmann_vcavities

ggx_smith

ggx_vcavities

ward_geisler_moroder

pinhole

thin_lens

fisheye

sphere

miss_null

miss_constant

miss_env

* rectangles are fixed-function code

* round rectangles are bindless callable programs

Page 13: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

13

INTRODUCTION TO NVRTC

Page 14: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

14

NVRTC vs. NVCCCUDA Compilation

NVRTC standalone library

Translates CUDA C++ source to PTX device code

End-users do not need a full development environment (e.g. MSVS)

Three times faster compile times compared to NVCC

NVCC CUDA Compiler

Supports host and device code

Works in combination with a host compiler of a full development environment

Page 15: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

15

NVRTCAdvantages of Runtime Compilation

OptiX shaders can be compiled on-demand

Applications do not have to provide a large number of individual shaders upfront

Materials can be created and changed at runtime

Specialized shaders improve performance

No large „uber-shaders“ necessary

Shader code can be kept compact

Page 16: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

16

NVRTC APICUDA C++ Runtime Compilation to PTX

nvrtcProgram prog;nvrtcCreateProgram(&prog, src, NULL, 0, NULL, NULL);

nvrtcCompileProgram(prog, numOptions, options);

nvrtcGetProgramLogSize(prog, &logSize);if (1 < logSize){nvrtcGetProgramLog(prog, log);

}

nvrtcGetPTXSize(prog, &ptxSize);if (1 < ptxSize){nvrtcGetPTX(prog, ptx);

}

nvrtcDestroyProgram(&prog);

Input CUDA C++ code

Compiler options

Potential error log

Output PTX code

Page 17: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

17

NVRTCCompilation Options

const std::string cudaIncludes = std::string("-I") + m_cudaIncludePath;const std::string optixIncludes = std::string("-I") + m_optixIncludePath;const std::string rendererIncludes = std::string("-I") + m_rendererIncludePath;

const char* options[] ={"--gpu-architecture=compute_30","--use_fast_math","--device-as-default-execution-space","--relocatable-device-code=true","-D__x86_64",cudaIncludes.c_str(),optixIncludes.c_str(), rendererIncludes.c_str()

};

Page 18: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

18

SHADER GENERATION FROM MDL MATERIALS

Page 19: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

19

OPTIX SHADER GENERATIONUsing the MDL SDK and NVRTC

<name>.mdl MDL SDKCompiled

Material

Builder

Class

DAG

Nodes

Texture

References

Parameter

Interface

Parameter

MacrosHeader

Traverser

Function

Getter

Classes

Hierarchy

Typedefs

Material

Constructor

Description

<name>.txt

Traverser

(<hash>.cu)

NVRTC

CompilerTraverser

<hash>.ptx

Page 20: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

20

INTEGRATION INTO ESI IC.IDO

Page 21: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

21

“ESI Rendering Innovations with NVIDIA DesignWorks™”

Andreas Mank, Team Leader Visualization, ESI Group

Markus Tavenrath, Senior Developer Technology Engineer, NVIDIA

— Source: GTC 2016, s6306

“MDL Materials to GLSL Shaders – Theory and Practice”

Andreas Süßenbach , Senior Developer Technology Engineer, NVIDIA

Andreas Mank, Team Leader Visualization, ESI Group

— Source: GTC 2016, s6311

“Implementing MDL Materials with Support for IES Lights

and AxF Appearance Representations”

Detlef Roettger, Senior Developer Technology Engineer, NVIDIA

Andreas Dietrich, Senior Software Developer Visualization, ESI Group

— Source: GTCEU 2016, s6135

Page 22: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

22

Helios Rendering ArchitectureOverview

IC.IDO

RiXGL Back-End

(DLL) . . .OptiX Back-End

(DLL)

Helios

Application

Renderer

Page 23: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

23

Helios Rendering ArchitectureInterfaces

Application API

Load and unload rendering back-ends (DLLs can be loaded at run-time)

Switch between back-ends (e.g., ray tracing or rasterization based)

Render graph control (e.g., hybrid rendering, frame composition)

Provide original (unoptimized) scene data

Back-end API

Set scene geometry and transformations (flattened two-level scene graph)

Set rendering parameters (e.g., materials, lights, whitted ray tracing or GI)

Helios

Back-End

Page 24: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

24

Helios OptiX Back-End

OptiX Back-End

Helios

OptiXMDL SDK NVRTC

MDL Parser• Reads MDL files

• Generates material parameter lists

OptiX Builder• Generates material traversers (CUDA C++)

• Compiles bindless callable programs

Page 25: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

25

MDL IN CUSTOM RENDERERS

4/28/2017

28.04.2017

MATERIAL TWEAKINGMATERIAL

CONSTRUCTION

MATERIAL SHARING (LIBRARY)N

VID

IAIR

AY

DEFINITION

MD

L S

DK

IMPLEMENTATION

CUDA (Ray Tracer)

Page 26: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

26

LIVE DEMONSTRATION

Page 27: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

27

START SD6

Page 28: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

28

CREATE A NEW MDL MATERIAL

1.

Page 29: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

29

SET MDL MATERIAL PROPERTIES

1.

2.3.

Page 30: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

30

LOAD MESH

1.

2.

3.

Page 31: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

31

ACTIVE MESH

1.

Page 32: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

32

ASSIGN NEW MATERIAL

1.

Page 33: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

33

LOAD ADDITIONAL MATERIALS

1.

Page 34: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

34

SHOW ENVIRONMENT

2.

1.

3.

Page 35: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

35

EXPORT MDL MATERIAL

1.

2.

3.

Page 36: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

36

MDL FILE

1.

2.

Page 37: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

37

START ICIDO PROOF-OF-CONCEPT

Page 38: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

38

1.

Page 39: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

39

ENABLE GLOBAL ILLUMINATION

2.3.

1.

4.

Page 40: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

40

IMPORT LIBRARY

1.

Page 41: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

41

COMPILE

1.

2.

Page 42: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

42

ASSIGN MATERIALS FROM LIBRARY

1.

2.

Page 43: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

43

COMPARE

Page 44: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

44

CHANGE COLOR

1.

Page 45: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

45

1.

Page 46: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

46

1.

2.

3.

EXPORT MDL MATERIAL

Page 47: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

47

COMPILE

1.

Page 48: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

48

COMPILE

1.

Page 49: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

May 8-11, 2017 | Silicon Valley

www.esi-group.com

THANK YOU

[email protected]

[email protected]

Page 50: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

50

Page 51: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

51

Page 52: S7185 LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS …on-demand.gputechconf.com/.../s7185...optix-shaders-mdl-materials.pdf · LEVERAGING NVRTC FOR BUILDING OPTIX SHADERS FROM MDL

52

smooth_rubber_black

cast_metal_vintage_brass

aluminum_red_oxidized

paint_metallic_red_flakes

metal_hammered_russet_copper

titanium

silver