Skip to content

Commit 5988645

Browse files
Initial translation from standard_surface to open_pbr_surface (#1934)
1. Authored an initial pass at the translation graph between standard surface and OpenPBR 2. Added units to standard surface thin film thickness documentation
1 parent 81a851b commit 5988645

2 files changed

Lines changed: 307 additions & 1 deletion

File tree

libraries/bxdf/standard_surface.mtlx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
<input name="coat_affect_roughness" type="float" value="0" uimin="0" uimax="1" uiname="Coat Affect Roughness" uifolder="Coat" uiadvanced="true"
8383
doc="Controls the roughness of the specular reflection in the layers below the clear-coat." />
8484
<input name="thin_film_thickness" type="float" value="0" uimin="0.0" uisoftmax="2000.0" uiname="Thin Film Thickness" uifolder="Thin Film" uiadvanced="true"
85-
doc="The thickness of the thin film layer on a surface. Use for materials such as multitone car paint or soap bubbles." />
85+
doc="The thickness of the thin film layer on a surface. Use for materials such as multitone car paint or soap bubbles (in nanometers)." />
8686
<input name="thin_film_IOR" type="float" value="1.5" uimin="0.0" uisoftmin="1.0" uisoftmax="3.0" uiname="Thin Film Index of Refraction" uifolder="Thin Film" uiadvanced="true"
8787
doc="The index of refraction of the medium surrounding the material." />
8888
<input name="emission" type="float" value="0" uimin="0.0" uisoftmax="1.0" uiname="Emission" uifolder="Emission"
Lines changed: 306 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,306 @@
1+
<?xml version="1.0"?>
2+
<materialx version="1.39">
3+
4+
<nodedef name="ND_standard_surface_to_open_pbr_surface" node="standard_surface_to_open_pbr_surface" nodegroup="translation">
5+
<input name="base" type="float" value="0.8" />
6+
<input name="base_color" type="color3" value="1.0, 1.0, 1.0" />
7+
<input name="diffuse_roughness" type="float" value="0" />
8+
<input name="metalness" type="float" value="0" />
9+
10+
<input name="specular" type="float" value="1" />
11+
<input name="specular_color" type="color3" value="1, 1, 1" />
12+
<input name="specular_roughness" type="float" value="0.2" />
13+
<input name="specular_IOR" type="float" value="1.5" />
14+
<input name="specular_anisotropy" type="float" value="0" />
15+
16+
<input name="transmission" type="float" value="0" />
17+
<input name="transmission_color" type="color3" value="1, 1, 1"/>
18+
<input name="transmission_depth" type="float" value="0" />
19+
<input name="transmission_scatter" type="color3" value="0, 0, 0" />
20+
<input name="transmission_scatter_anisotropy" type="float" value="0" />
21+
<input name="transmission_dispersion" type="float" value="0" />
22+
23+
<input name="subsurface" type="float" value="0" uimin="0.0" />
24+
<input name="subsurface_color" type="color3" value="1, 1, 1" />
25+
<input name="subsurface_radius" type="color3" value="1, 1, 1" />
26+
<input name="subsurface_scale" type="float" value="1" />
27+
<input name="subsurface_anisotropy" type="float" value="0" />
28+
29+
<input name="sheen" type="float" value="0" uimin="0.0" />
30+
<input name="sheen_color" type="color3" value="1, 1, 1" />
31+
<input name="sheen_roughness" type="float" value="0.3" />
32+
33+
<input name="coat" type="float" value="0" />
34+
<input name="coat_color" type="color3" value="1, 1, 1" />
35+
<input name="coat_roughness" type="float" value="0.1" />
36+
<input name="coat_anisotropy" type="float" value="0.0" />
37+
<input name="coat_IOR" type="float" value="1.5" />
38+
<input name="coat_affect_roughness" type="float" value="0" />
39+
40+
<input name="thin_film_thickness" type="float" value="0" />
41+
<input name="thin_film_IOR" type="float" value="1.5" />
42+
43+
<input name="emission" type="float" value="0" />
44+
<input name="emission_color" type="color3" value="1, 1, 1" />
45+
46+
<input name="opacity" type="color3" value="1, 1, 1" />
47+
<input name="thin_walled" type="boolean" value="false" />
48+
49+
<!--Outputs-->
50+
<output name="base_weight_out" type="float" />
51+
<output name="base_color_out" type="color3" />
52+
<output name="base_diffuse_roughness_out" type="float" />
53+
<output name="base_metalness_out" type="float" />
54+
55+
<output name="specular_weight_out" type="float" />
56+
<output name="specular_color_out" type="color3" />
57+
<output name="specular_roughness_out" type="float" />
58+
<output name="specular_ior_out" type="float" />
59+
<output name="specular_roughness_anisotropy_out" type="float" />
60+
61+
<output name="transmission_weight_out" type="float" />
62+
<output name="transmission_color_out" type="color3" />
63+
<output name="transmission_depth_out" type="float" />
64+
<output name="transmission_scatter_out" type="color3" />
65+
<output name="transmission_scatter_anisotropy_out" type="float" />
66+
<output name="transmission_dispersion_scale_out" type="float" />
67+
68+
<output name="subsurface_weight_out" type="float" />
69+
<output name="subsurface_color_out" type="color3" />
70+
<output name="subsurface_radius_out" type="float" />
71+
<output name="subsurface_radius_scale_out" type="color3" />
72+
<output name="subsurface_scatter_anisotropy_out" type="float" />
73+
74+
<output name="fuzz_weight_out" type="float" />
75+
<output name="fuzz_color_out" type="color3" />
76+
<output name="fuzz_roughness_out" type="float" />
77+
78+
<output name="coat_weight_out" type="float" />
79+
<output name="coat_color_out" type="color3" />
80+
<output name="coat_roughness_out" type="float" />
81+
<output name="coat_roughness_anisotropy_out" type="float" />
82+
<output name="coat_ior_out" type="float" />
83+
<output name="coat_darkening_out" type="float" />
84+
85+
<output name="thin_film_weight_out" type="float" />
86+
<output name="thin_film_thickness_out" type="float" />
87+
<output name="thin_film_ior_out" type="float" />
88+
89+
<output name="emission_luminance_out" type="float" />
90+
<output name="emission_color_out" type="color3" />
91+
92+
<output name="geometry_opacity_out" type="float" />
93+
<output name="geometry_thin_walled_out" type="boolean" />
94+
</nodedef>
95+
96+
<nodegraph name="NG_standard_surface_to_open_pbr_surface" nodedef="ND_standard_surface_to_open_pbr_surface">
97+
98+
<!--Base-->
99+
<dot name="baseWeight" type="float">
100+
<input name="in" type="float" interfacename="base" />
101+
</dot>
102+
<mix name="coatAttenuation" type="color3">
103+
<input name="fg" type="color3" interfacename="coat_color" />
104+
<input name="bg" type="color3" value="1.0, 1.0, 1.0" />
105+
<input name="mix" type="float" interfacename="coat" />
106+
</mix>
107+
<multiply name="baseColor" type="color3">
108+
<input name="in1" type="color3" interfacename="base_color" />
109+
<input name="in2" type="color3" nodename="coatAttenuation" />
110+
</multiply>
111+
<dot name="baseDiffuseRoughness" type="float">
112+
<input name="in" type="float" interfacename="diffuse_roughness" />
113+
</dot>
114+
<dot name="baseMetalness" type="float">
115+
<input name="in" type="float" interfacename="metalness" />
116+
</dot>
117+
118+
<!--Specular-->
119+
<ifgreater name="specWeight" type="float">
120+
<input name="value1" type="float" interfacename="metalness" />
121+
<input name="value2" type="float" value="0.0" />
122+
<input name="in1" type="float" value="1.0" />
123+
<input name="in2" type="float" interfacename="specular" />
124+
</ifgreater>
125+
<convert name="specVector" type="vector3">
126+
<input name="in" type="color3" interfacename="specular_color" />
127+
</convert>
128+
<dotproduct name="dotProd" type="float">
129+
<input name="in1" type="vector3" nodename="specVector" />
130+
<input name="in2" type="vector3" value="1.0, 1.0, 1.0" />
131+
</dotproduct>
132+
<!--intentionally ignoring the original specular_color input for metals, since the translation between these concepts will take more thought-->
133+
<ifequal name="specColor" type="color3">
134+
<input name="value1" type="float" value="0.0" />
135+
<input name="value2" type="float" nodename="dotProd" />
136+
<input name="in1" type="color3" value="1.0, 1.0, 1.0" />
137+
<input name="in2" type="color3" interfacename="specular_color" />
138+
</ifequal>
139+
<dot name="specRoughness" type="float">
140+
<input name="in" type="float" interfacename="specular_roughness" />
141+
</dot>
142+
<dot name="specIOR" type="float">
143+
<input name="in" type="float" interfacename="specular_IOR" />
144+
</dot>
145+
<dot name="specRoughnessAnisotropy" type="float">
146+
<input name="in" type="float" interfacename="specular_anisotropy" />
147+
</dot>
148+
149+
<!--Transmission-->
150+
<dot name="transmissionWeight" type="float">
151+
<input name="in" type="float" interfacename="transmission" />
152+
</dot>
153+
<dot name="transmissionColor" type="color3">
154+
<input name="in" type="color3" interfacename="transmission_color" />
155+
</dot>
156+
<dot name="transmissionDepth" type="float">
157+
<input name="in" type="float" interfacename="transmission_depth" />
158+
</dot>
159+
<dot name="transmissionScatter" type="color3">
160+
<input name="in" type="color3" interfacename="transmission_scatter" />
161+
</dot>
162+
<dot name="transmissionScatterAnisotropy" type="float">
163+
<input name="in" type="float" interfacename="transmission_scatter_anisotropy" />
164+
</dot>
165+
<dot name="transmissionDispersion" type="float">
166+
<input name="in" type="float" interfacename="transmission_dispersion" />
167+
</dot>
168+
169+
<!--Subsurface-->
170+
<dot name="subsurfaceWeight" type="float">
171+
<input name="in" type="float" interfacename="subsurface" />
172+
</dot>
173+
<dot name="subsurfaceColor" type="color3">
174+
<input name="in" type="color3" interfacename="subsurface_color" />
175+
</dot>
176+
<dot name="subsurfaceRadius" type="float">
177+
<input name="in" type="float" interfacename="subsurface_scale" />
178+
</dot>
179+
<dot name="subsurfaceRadiusScale" type="color3">
180+
<input name="in" type="color3" interfacename="subsurface_radius" />
181+
</dot>
182+
<dot name="subsurfaceAnisotropy" type="float">
183+
<input name="in" type="float" interfacename="subsurface_anisotropy" />
184+
</dot>
185+
186+
<!--Fuzz-->
187+
<dot name="fuzzWeight" type="float">
188+
<input name="in" type="float" interfacename="sheen" />
189+
</dot>
190+
<dot name="fuzzColor" type="color3">
191+
<input name="in" type="color3" interfacename="sheen_color" />
192+
</dot>
193+
<power name="fuzzRoughness" type="float">
194+
<input name="in1" type="float" interfacename="sheen_roughness" />
195+
<input name="in2" type="float" value="0.4" />
196+
</power>
197+
198+
<!--Coat-->
199+
<multiply name="coatMetallic" type="float">
200+
<input name="in1" type="float" interfacename="coat" />
201+
<input name="in2" type="float" interfacename="metalness" />
202+
</multiply>
203+
<ifgreater name="coatWeight" type="float">
204+
<input name="value1" type="float" nodename="coatMetallic" />
205+
<input name="value2" type="float" value="0.0" />
206+
<input name="in1" type="float" value="0.0" />
207+
<input name="in2" type="float" interfacename="coat" />
208+
</ifgreater>
209+
<dot name="coatColor" type="color3">
210+
<input name="in" type="color3" interfacename="coat_color" />
211+
</dot>
212+
<dot name="coatRoughness" type="float">
213+
<input name="in" type="float" interfacename="coat_roughness" />
214+
</dot>
215+
<dot name="coatAnisotropy" type="float">
216+
<input name="in" type="float" interfacename="coat_anisotropy" />
217+
</dot>
218+
<dot name="coatIOR" type="float">
219+
<input name="in" type="float" interfacename="coat_IOR" />
220+
</dot>
221+
<dot name="coatDarkening" type="float">
222+
<input name="in" type="float" interfacename="coat_affect_roughness" />
223+
</dot>
224+
225+
<!--ThinFilm-->
226+
<multiply name="thinFilmThicknessConversion" type="float">
227+
<input name="in1" type="float" interfacename="thin_film_thickness" />
228+
<input name="in2" type="float" value="0.001" />
229+
</multiply>
230+
<ifgreater name="thinFilmWeight" type="float">
231+
<input name="value1" type="float" nodename="thinFilmThicknessConversion" />
232+
<input name="value2" type="float" value="0.0" />
233+
<input name="in1" type="float" value="1.0" />
234+
<input name="in2" type="float" value="0.0" />
235+
</ifgreater>
236+
<dot name="thinFilmThickness" type="float">
237+
<input name="in" type="float" nodename="thinFilmThicknessConversion" />
238+
</dot>
239+
<dot name="thinFilmIOR" type="float">
240+
<input name="in" type="float" interfacename="thin_film_IOR" />
241+
</dot>
242+
243+
<!--Emission-->
244+
<dot name="emissionLuminance" type="float">
245+
<input name="in" type="float" interfacename="emission" />
246+
</dot>
247+
<dot name="emissionColor" type="color3">
248+
<input name="in" type="color3" interfacename="emission_color" />
249+
</dot>
250+
251+
<!--Geometry-->
252+
<extract name="geometryOpacity" type="float">
253+
<input name="in" type="color3" interfacename="opacity" />
254+
<input name="index" type="integer" value="0" />
255+
</extract>
256+
<dot name="geometryThinWalled" type="boolean">
257+
<input name="in" type="boolean" interfacename="thin_walled" />
258+
</dot>
259+
260+
<!--Outputs-->
261+
<output name="base_weight_out" type="float" nodename="baseWeight" />
262+
<output name="base_color_out" type="color3" nodename="baseColor" />
263+
<output name="base_diffuse_roughness_out" type="float" nodename="baseDiffuseRoughness" />
264+
<output name="base_metalness_out" type="float" nodename="baseMetalness" />
265+
266+
<output name="specular_weight_out" type="float" nodename="specWeight" />
267+
<output name="specular_color_out" type="color3" nodename="specColor" />
268+
<output name="specular_roughness_out" type="float" nodename="specRoughness" />
269+
<output name="specular_ior_out" type="float" nodename="specIOR" />
270+
<output name="specular_roughness_anisotropy_out" type="float" nodename="specRoughnessAnisotropy" />
271+
272+
<output name="transmission_weight_out" type="float" nodename="transmissionWeight" />
273+
<output name="transmission_color_out" type="color3" nodename="transmissionColor" />
274+
<output name="transmission_depth_out" type="float" nodename="transmissionDepth" />
275+
<output name="transmission_scatter_out" type="color3" nodename="transmissionScatter" />
276+
<output name="transmission_scatter_anisotropy_out" type="float" nodename="transmissionScatterAnisotropy" />
277+
<output name="transmission_dispersion_scale_out" type="float" nodename="transmissionDispersion" />
278+
279+
<output name="subsurface_weight_out" type="float" nodename="subsurfaceWeight" />
280+
<output name="subsurface_color_out" type="color3" nodename="subsurfaceColor" />
281+
<output name="subsurface_radius_out" type="float" nodename="subsurfaceRadius" />
282+
<output name="subsurface_radius_scale_out" type="color3" nodename="subsurfaceRadiusScale" />
283+
<output name="subsurface_scatter_anisotropy_out" type="float" nodename="subsurfaceAnisotropy" />
284+
285+
<output name="fuzz_weight_out" type="float" nodename="fuzzWeight" />
286+
<output name="fuzz_color_out" type="color3" nodename="fuzzColor" />
287+
<output name="fuzz_roughness_out" type="float" nodename="fuzzRoughness" />
288+
289+
<output name="coat_weight_out" type="float" nodename="coatWeight" />
290+
<output name="coat_color_out" type="color3" nodename="coatColor" />
291+
<output name="coat_roughness_out" type="float" nodename="coatRoughness" />
292+
<output name="coat_roughness_anisotropy_out" type="float" nodename="coatAnisotropy" />
293+
<output name="coat_ior_out" type="float" nodename="coatIOR" />
294+
<output name="coat_darkening_out" type="float" nodename="coatDarkening" />
295+
296+
<output name="thin_film_weight_out" type="float" nodename="thinFilmWeight" />
297+
<output name="thin_film_thickness_out" type="float" nodename="thinFilmThickness" />
298+
<output name="thin_film_ior_out" type="float" nodename="thinFilmIOR" />
299+
300+
<output name="emission_luminance_out" type="float" nodename="emissionLuminance" />
301+
<output name="emission_color_out" type="color3" nodename="emissionColor" />
302+
303+
<output name="geometry_opacity_out" type="float" nodename="geometryOpacity" />
304+
<output name="geometry_thin_walled_out" type="boolean" nodename="geometryThinWalled" />
305+
</nodegraph>
306+
</materialx>

0 commit comments

Comments
 (0)