AVSim/simulation-package
Simulation runtime: the third-party half of the AVSim data generation package This repository holds the third-party runtime of the Simulation data generation package, version 3: the pieces the pipeline needs that were not written by the authors. It contains no code and no data of the authors. It is not usable on its own: the private half of the package, AVSim/simulation, downloads this repository into the same directory at a pinned revision with its fetch_runtime.sh script and… See the full description on the dataset page: https://huggingface.co/datasets/AVSim/simulation-package.
03.7k
1/******************************************************************************2 * Copyright 2024 NVIDIA Corporation. All rights reserved.3 ******************************************************************************4 5Permission is hereby granted by NVIDIA Corporation ("NVIDIA"), free of charge,6to any person obtaining a copy of the sample definition code that uses our 7Material Definition Language (the "MDL Materials"), to reproduce and distribute8the MDL Materials, including without limitation the rights to use, copy, merge,9publish, distribute, and sell modified and unmodified copies of the MDL 10Materials, and to permit persons to whom the MDL Materials is furnished to do11so, in all cases solely for use with NVIDIA's Material Definition Language,12subject to the following further conditions:13 141. The above copyright notices, this list of conditions, and the disclaimer15that follows shall be retained in all copies of one or more of the MDL16Materials, including in any software with which the MDL Materials are bundled,17redistributed, and/or sold, and included either as stand-alone text files,18human-readable headers or in the appropriate machine-readable metadata fields19within text or binary files as long as those fields can be easily viewed by the20user, as applicable.212. The name of NVIDIA shall not be used to promote, endorse or advertise any 22Modified Version without specific prior written permission, except a) to comply23 with the notice requirements otherwise contained herein; or b) to acknowledge24the contribution(s) of NVIDIA.25 26THE MDL MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS27OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,28FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,29TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE FOR 30ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, 31INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF 32CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE33THE MDL MATERIALS OR FROM OTHER DEALINGS IN THE MDL MATERIALS.34*/35 36mdl 1.7;37 38import ::anno::*;39import ::base::*;40import ::df::*;41import ::math::*;42import ::state::*;43import ::tex::*;44import ::nvidia::core_definitions::dimension;45import ::nvidia::core_definitions::blend_colors;46 47 48const string COPYRIGHT = 49" Copyright 2024 NVIDIA Corporation. All rights reserved.\n"50" MDL MATERIALS ARE PROVIDED PURSUANT TO AN END USER LICENSE AGREEMENT,\n"51" WHICH WAS ACCEPTED IN ORDER TO GAIN ACCESS TO THIS FILE. IN PARTICULAR,\n" 52" THE MDL MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n"53" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\n"54" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\n" 55" COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL NVIDIA\n"56" CORPORATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY\n"57" GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN\n"58" AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR\n"59" INABILITY TO USE THE MDL MATERIALS OR FROM OTHER DEALINGS IN THE MDL MATERIALS.\n";60 61const string DESCRIPTION = "A plain chiffon silk material with creases.";62 63annotation preview_scale( float f);64 65int lowbias32(int x)66{67 x ^= x >>> 16;68 x *= 0x7feb352d;69 x ^= x >>> 15;70 x *= 0x846ca68b;71 x ^= x >>> 16;72 return x;73}74 75float remap(float input, float low_1, float high_1, float low_2, float high_2)76{77 return low_2 + ((input - low_1) * (high_2 - low_2))/(high_1 - low_1);78}79 80float f_n(float n, float a, float h, float l) {81 float k = ::math::fmod(n + h * 12.f, 12.f);82 83 return l - a * ::math::max(-1.0f, ::math::min(::math::min(k-3.0f, 9.0f-k), 1.0f));84}85 86float2x2 invert_2x2(float2x2 M)87{88 float det = M[0][0]*M[1][1] - M[0][1]*M[1][0];89 //https://www.chilimath.com/lessons/advanced-algebra/inverse-of-a-2x2-matrix/90 return (1.0 / det) * float2x2(M[1][1], -M[0][1], -M[1][0], M[0][0]);91}92 93float uint2float(int x)94{95 return float(x & 0x7FFFFFFF) + (x < 0 ? 2147483648.0 : 0.0);96}97 98float2 rnd22(int2 p) {99 float2 ret_val = float2(100 uint2float(lowbias32(p[0] + lowbias32(p[1]))) / 4294967296.f,101 uint2float(lowbias32(p[0] + 32000 + lowbias32(p[1]))) / 4294967296.f102 );103 return ret_val;104} 105 106float histogram_range(float input, float range = 1.0f, float position = 0.5f)107{ 108 float low = ::math::clamp(1.0 - ::math::min(((1.0 - position) + range * 0.5), (1.0 - position) * 2), 0.0, 1.0);109 float high = ::math::clamp(::math::min((position + range * 0.5 ), position * 2.0), 0.0, 1.0);110 return ::math::lerp(low, high, input);111}112 113float histogram_scan_big(float input, float width, float position)114{115 return ::math::clamp(116 remap(input,117 ::math::lerp(-width, 1.0, position),118 ::math::lerp(0.0, 1.0 + width, position),119 0.0,120 1.0),121 0.0,122 1.0);123}124 125float3 rgb2hsl(float3 c)126[[127 ::anno::description("Converts a color value to HSL. The function outputs the hue to \n"128 "lie in the range from 0.0-1.0."),129 ::anno::author("NVIDIA vMaterials")130]]131{132 float3 hsl;133 float cMax = ::math::max(::math::max(c.x, c.y), c.z);134 float cMin = ::math::min(::math::min(c.x, c.y), c.z);135 float delta = cMax - cMin;136 137 hsl.z = (cMax + cMin) / 2.0; 138 hsl.x = ((cMax == cMin) ? 0 :139 (cMax == c.x) ? (c.y - c.z) / delta + ((c.z > c.y) ? 6.0f : 0.0f):140 (cMax == c.y) ? (c.z - c.x) / delta + 2.0 : (c.x - c.y) / delta + 4.0) / 6.0f;141 hsl.y = (hsl.z == 0.0 || hsl.z == 1.0) ? 0.0 : delta / (1.0 - ::math::abs(2.0 * hsl.z - 1.0));142 return hsl;143}144 145color hsl2rgb(float3 hsl)146[[147 ::anno::description("Converts a HSL value back to a color. Note that the hue is expected to \n"148 "lie in the range from 0.0-1.0."),149 ::anno::author("NVIDIA vMaterials")150]]151{152 float h = hsl.x, s = hsl.y, l = hsl.z;153 float a = s * ::math::min(l, 1.0f - l);154 return color(f_n(0.0, a, h, l),155 f_n(8.0, a, h, l),156 f_n(4.0, a, h, l)); 157}158 159struct vm_coordinates{160 float2 uv;161 float rotation;162 int uv_space_index;163 float4 carry;164};165 166enum vm_mono_select 167[[168 ::anno::description("Modes for the creation of a gray-scale value from a color."),169 ::anno::hidden()170]]171{172 mono_r = 0,173 mono_g = 1,174 mono_b = 2,175 mono_a = 3,176 mono_average = 4177};178 179vm_coordinates vm_coord180(181 float2 translation = float2(0.0f, 0.0) [[182 ::anno::display_name("Translation"),183 ::anno::description("Translates the coordinates.")184 ]],185 float rotation = 0.0f [[186 ::anno::display_name("Rotation"),187 ::anno::description("Rotates the coordinates in degrees.")188 ]],189 float2 scaling = float2(1.0f, 1.0f) [[190 ::anno::display_name("Scaling"),191 ::anno::description("Scales the coordinates.")192 ]], 193 uniform int uv_space = 0 [[194 ::anno::display_name("UV Space"),195 ::anno::description("Chose the UV space.")196 ]]197)198[[199 ::anno::display_name("vm Transform"),200 ::anno::description("Generates coordinates to be used in vm_lookup functions.")201]]202{203 vm_coordinates uv;204 ::base::texture_coordinate_info info = ::base::coordinate_source( ::base::texture_coordinate_uvw, uv_space);205 uv.rotation = (rotation * 3.1415926535897932384626433832f) / 180.f;206 uv.uv = float2(info.position.x, info.position.y);207 float sine = ::math::sin(uv.rotation);208 float cosine = ::math::cos(uv.rotation);209 float2x2 rot = float2x2(cosine, -sine, sine, cosine);210 uv.uv = rot * uv.uv;211 uv.uv /= scaling;212 uv.uv += translation;213 // Translation before or after rotation?214 return uv;215}216 217vm_coordinates vm_coord_post_scale(218 vm_coordinates uv = vm_coord(),219 float2 scale = float2(1.0f)220)221{222 uv.uv /= scale;223 return uv;224}225 226vm_coordinates vm_coord_warp(227 float warp_value,228 vm_coordinates uv_in,229 float warp_intensity = 0.1f,230 bool warp_u_direction = true,231 bool warp_v_direction = true232 233)234{235 vm_coordinates uv = uv_in;236 uv.uv = uv_in.uv + float2(warp_u_direction?1.0:0.0, warp_v_direction?1.0:0.0) * warp_value * warp_intensity;237 return uv;238}239 240 241::base::texture_return vm_tex_lookup(242 uniform texture_2d tex,243 vm_coordinates uv = vm_coord(),244 uniform vm_mono_select mono_source = mono_a,245 float4 scale = float4(1.0f))246{247 float mono;248 float4 lookup = ::tex::lookup_float4(tex, uv.uv, ::tex::wrap_repeat, ::tex::wrap_repeat) * scale;249 switch( mono_source ) {250 case mono_r: mono = lookup.x;251 break;252 case mono_g: mono = lookup.y;253 break;254 case mono_b: mono = lookup.z;255 break;256 case mono_a: mono = lookup.w;257 break;258 case mono_average: mono = ::math::average(float3(lookup.x, lookup.y, lookup.z));259 break;260 }261 return ::base::texture_return(color(lookup.x, lookup.y, lookup.z), mono);262}263 264float3 vm_tex_normal_lookup(265 uniform texture_2d tex,266 vm_coordinates uv = vm_coord(),267 float strength = 1.0f268)269{270 float rot = uv.rotation;271 // Lookup and convert normal texture to -1 ... 1 range272 float3 norm = (::tex::lookup_float3(tex, uv.uv, ::tex::wrap_repeat, ::tex::wrap_repeat) - float3(.5f)) * 2.0f;273 norm = ::math::normalize(norm * float3(strength, strength, 1.0));274 // if any rotation happened prior to the lookup, compensate for it275 norm = float3(::math::cos(rot) * norm.x - ::math::sin(rot) * norm.y,276 ::math::sin(rot) * norm.x + ::math::cos(rot) * norm.y,277 norm.z);278 return norm.x * ::state::texture_tangent_u(uv.uv_space_index) +279 norm.y * ::state::texture_tangent_v(uv.uv_space_index) +280 norm.z * ::state::normal();281}282 283// Returns the normal n in tangent space, given n is in internal space.284float3 transform_internal_to_tangent(float3 n)285[[ 286 anno::hidden() 287]]288{289 return290 n.x* float3(state::texture_tangent_u(0).x,state::texture_tangent_v(0).x,state::normal().x)+291 n.y* float3(state::texture_tangent_u(0).y,state::texture_tangent_v(0).y,state::normal().y)+292 n.z* float3(state::texture_tangent_u(0).z,state::texture_tangent_v(0).z,state::normal().z);293}294 295// Returns the normal n in internal space, given n is in tangent space.296float3 transform_tangent_to_internal(float3 n)297[[ 298 anno::hidden() 299]]300{301 return state::texture_tangent_u(0) * n.x +302 state::texture_tangent_v(0) * n.y +303 state::normal() * n.z ;304}305 306float3 add_detail_normal(float3 nd = state::normal(), float3 n = state::normal())307{308 // http://blog.selfshadow.com/publications/blending-in-detail/309 float3 n_t = transform_internal_to_tangent(n);310 float3 nd_t = transform_internal_to_tangent(nd);311 312 n_t=n_t + float3(0.,0.,1.);313 nd_t = nd_t * float3(-1.,-1.,1.);314 n = n_t*math::dot(n_t, nd_t)/n_t.z - nd_t;315 return ::math::normalize(transform_tangent_to_internal(n));316}317 318 319float3 vm_tex_infinite_normal(320 uniform texture_2d tex = texture_2d(),321 vm_coordinates uv = vm_coord(),322 float3 average_color = float3(0.5f),323 float patch_size = 1.0,324 float normal_strength = 1.0325)326{327 float2 uv_in = uv.uv;328 329 float3 O = float3(0.f);330 float2x2 M0 = float2x2(1.f,0.f, 0.5f, ::math::sqrt(3.f)/2.f);331 float2x2 M = invert_2x2(M0); // transform matrix <-> tilted space332 333 float2 U = uv_in;334 float2 V = M * (uv.uv / patch_size); //pre-tilted hexa coordinates335 int2 I = int2(::math::floor(V))+int2(935); // hexa-tile id336 337 // The mean color needs to be determined in Photoshop then to make the338 // average color work out, take the float value and calculate the apropriate339 // mean value as (value^(1/2.2))340 341 float3 m = average_color;342 343 float3 F = float3(::math::frac(V)[0], ::math::frac(V)[1], 0.f), W;344 F[2] = 1.0 - F[0] - F[1]; // local hexa coordinates345 346 if( F[2] > 0.f )347 O = (W[0] = F[2]) * (( ::tex::lookup_float3(tex, U-rnd22(I))) - m)348 + (W[1] = F[1]) * (( ::tex::lookup_float3(tex, U-rnd22(I+int2(0,1)))) - m)349 + (W[2] = F[0]) * (( ::tex::lookup_float3(tex, U-rnd22(I+int2(1,0)))) - m);350 else351 O = (W[0] = -F[2]) * (( ::tex::lookup_float3(tex, U-rnd22(I+int2(1)))) - m)352 + (W[1] = 1.f - F[1]) * (( ::tex::lookup_float3(tex, U-rnd22(I+int2(1, 0)))) - m)353 + (W[2] = 1.f - F[0]) * (( ::tex::lookup_float3(tex, U-rnd22(I+int2(0, 1)))) - m);354 O = m + O/::math::length(W);355 O = ::math::clamp( (O), 0.0, 1.0);356 357 float3 norm = (O - float3(.5f)) * 2.0f;358 norm = ::math::normalize(norm * float3(normal_strength, normal_strength, 1.0));359 // if any rotation happened prior to the lookup, compensate for it360 norm = float3(::math::cos(uv.rotation) * norm.x - ::math::sin(uv.rotation) * norm.y,361 ::math::sin(uv.rotation) * norm.x + ::math::cos(uv.rotation) * norm.y,362 norm.z);363 return norm.x * ::state::texture_tangent_u(uv.uv_space_index) +364 norm.y * ::state::texture_tangent_v(uv.uv_space_index) +365 norm.z * ::state::normal(); 366}367 368export material Silk_Plain_Chiffon(369 color fabric_color = color(0.830770f, 0.830770f, 0.830770f) [[370 ::anno::description("Sets the color of the fabric."),371 ::anno::display_name("Color"),372 ::anno::in_group("Appearance"),373 ::anno::ui_order(0)374 ]],375 float roughness = 0.32f [[376 ::anno::description("Higher roughness values lead to bigger highlights and blurrier reflections."),377 ::anno::display_name("Roughness"),378 ::anno::in_group("Appearance"),379 ::anno::hard_range(0.f, 1.f),380 ::anno::ui_order(1)381 ]],382 float fabric_reflection = 0.6f [[383 ::anno::description("Amount of reflection, higher numbers provide more reflection."),384 ::anno::display_name("Reflection Weight"),385 ::anno::in_group("Appearance"),386 ::anno::hard_range(0.f, 1.f),387 ::anno::ui_order(2)388 ]],389 float sheen_weight = 0.95f [[390 ::anno::description("Adds a fuzzy, soft appearance around the material when viewed at grazing angles."),391 ::anno::display_name("Sheen Weight"),392 ::anno::in_group("Appearance"),393 ::anno::hard_range(0.f, 1.f),394 ::anno::ui_order(3)395 ]],396 float translucency_amount = 0.4f [[397 ::anno::description("A value of 0 makes the material completely opaque. Increasing the parameter value lets more light pass through the material."),398 ::anno::display_name("Translucency Amount"),399 ::anno::in_group("Appearance"),400 ::anno::hard_range(0.f, 1.f),401 ::anno::ui_order(4)402 ]],403 float fabric_bump_strength = 1.f [[404 ::anno::description("Specifies the strength of the bump."),405 ::anno::display_name("Bump Strength"),406 ::anno::in_group("Appearance"),407 ::anno::hard_range(0.f, 2.f),408 ::anno::soft_range(0.f, 1.f),409 ::anno::ui_order(5)410 ]],411 float secondary_bump_size = 0.5f [[412 ::anno::description("The strength of the wrinkles bump map."),413 ::anno::display_name("Wrinkles Bump Strength"),414 ::anno::in_group("Appearance"),415 ::anno::soft_range(0.f, 1.f),416 ::anno::ui_order(6)417 ]],418 float wrinkles_bump_scale = 1.0f [[419 ::anno::description("Controls the size of the wrinkles that appear on the fabric surface."),420 ::anno::display_name("Wrinkles Bump Scale"),421 ::anno::in_group("Appearance"),422 ::anno::hard_range(0.f, 2.f),423 ::anno::ui_order(7)424 ]],425 float warp_intensity = 0.f [[426 ::anno::description("Adds a little bit of distortion to break up the perfectly regular appearance of the weaving."),427 ::anno::display_name("Warp Intensity"),428 ::anno::in_group("Appearance"),429 ::anno::soft_range(0.f, 1.f),430 ::anno::ui_order(8)431 ]],432 float2 texture_translate = float2(0.f) [[433 ::anno::description("Controls the position of the texture."),434 ::anno::display_name("Texture Translate"),435 ::anno::in_group("Transform"),436 ::anno::ui_order(9)437 ]],438 float texture_rotate = 0.f [[439 ::anno::description("Rotates angle of the texture in degrees."),440 ::anno::display_name("Texture Rotate"),441 ::anno::in_group("Transform"),442 ::anno::soft_range(0.f, 360.f),443 ::anno::ui_order(10)444 ]],445 float2 texture_scale = float2(1.0f) [[446 ::anno::description("Larger numbers increase the size."),447 ::anno::display_name("Texture Scale"),448 ::anno::in_group("Transform"),449 ::nvidia::core_definitions::dimension(float2(1.0f, 1.0f)),450 ::preview_scale(float(3.5f)),451 ::anno::ui_order(11)452 ]],453 uniform int uv_space_index = 0 [[454 ::anno::description("Uses selected UV space for material."),455 ::anno::display_name("UV Space Index"),456 ::anno::in_group("Transform"),457 ::anno::ui_order(12)458 ]],459 uniform bool roundcorners_enable = false [[460 ::anno::description("Enables the round corner effect. Comes at a slight performance cost as additional raytracing calls are required to evaluate the round corner effect."),461 ::anno::display_name("Enable Round Corners"),462 ::anno::in_group("Round Corners"),463 ::anno::ui_order(13)464 ]],465 uniform float roundcorners_radius_mm = 1.f [[466 ::anno::description("Radius of the rounded corners in millimeters."),467 ::anno::display_name("Round Corner Radius (mm)"),468 ::anno::in_group("Round Corners"),469 ::anno::soft_range(0.f, 10.f),470 ::anno::ui_order(14)471 ]],472 uniform bool roundcorners_across_materials = false [[473 ::anno::description("Applies the round corner effect across different materials when enabled."),474 ::anno::display_name("Across Materials"),475 ::anno::in_group("Round Corners"),476 ::anno::ui_order(15)477 ]])478[[479 ::anno::author("NVIDIA vMaterials"),480 ::anno::contributor("Rüdiger Raab"),481 ::anno::display_name("Silk Plain Chiffon - White"),482 ::anno::description(DESCRIPTION),483 ::anno::copyright_notice(COPYRIGHT),484 ::anno::thumbnail("./.thumbs/Silk_Plain_Chiffon.Silk_Plain_Chiffon.png"),485 ::anno::key_words(string[]("fabric", "translucent", "silk", "woven", "chiffon", "transparent", "translucent", "fashion", "design", "white", "light", "neutral"))486]]487 = 488 let {489 bool tmp0 = false;490 float2 texture_rescale = texture_scale * 0.11f; // texture covers 11 cm, scale up so it covers 1m per default491 492 texture_2d multi_tex = texture_2d("./textures/silk_plain_chiffon_R_rough_G_ao_B_height.jpg", ::tex::gamma_linear);493 texture_2d warp_tex = texture_2d("./textures/french_terry_fabric_warp.png", ::tex::gamma_linear);494 texture_2d norm_tex = texture_2d("./textures/silk_plain_chiffon_norm.jpg", ::tex::gamma_linear);495 texture_2d diff_tex = texture_2d("./textures/silk_plain_chiffon_R_diff.jpg", ::tex::gamma_linear);496 texture_2d norm2_tex = texture_2d("./textures/silk_plain_chiffon_norm2.jpg", ::tex::gamma_linear);497 498 material_surface tmp1(::df::custom_curve_layer(0.179999992f, 1.f, 3.01999998f, fabric_reflection * 0.3f, ::df::microfacet_ggx_smith_bsdf(histogram_range(::math::pow(float3(vm_tex_lookup(multi_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), mono_a, float4(1.f)).tint).x, 1.f), 0.98999995f, roughness * 0.300000012f + 0.600000024f) * histogram_range(::math::pow(float3(vm_tex_lookup(multi_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), mono_a, float4(1.f)).tint).x, 1.f), 0.98999995f, roughness * 0.300000012f + 0.600000024f), histogram_range(::math::pow(float3(vm_tex_lookup(multi_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), mono_a, float4(1.f)).tint).x, 1.f), 0.98999995f, roughness * 0.300000012f + 0.600000024f) * histogram_range(::math::pow(float3(vm_tex_lookup(multi_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), mono_a, float4(1.f)).tint).x, 1.f), 0.98999995f, roughness * 0.300000012f + 0.600000024f), color(1.f, 1.f, 1.f), color(1.f, 1.f, 1.f), ::state::texture_tangent_u(0), ::df::scatter_reflect), ::df::weighted_layer(sheen_weight, ::df::sheen_bsdf(0.0700000003f, hsl2rgb(rgb2hsl(float3(fabric_color)) * float3(1.f, 0.74000001f, 1.f)), color(1.f, 1.f, 1.f), ::df::weighted_layer(translucency_amount * 0.200000003f, ::df::diffuse_transmission_bsdf(nvidia::core_definitions::blend_colors(hsl2rgb(float3(rgb2hsl(float3(fabric_color)).x, ::math::min(rgb2hsl(float3(fabric_color)).y, ::math::pow(rgb2hsl(float3(fabric_color)).z, 0.149999991f)), rgb2hsl(float3(fabric_color)).z)), color(::math::pow(histogram_scan_big(1.f - float3(vm_tex_lookup(multi_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), mono_a, float4(1.f)).tint).z, 0.810000002f, 0.319999993f), 2.20000005f)), ::base::color_layer_multiply, 1.f, true).tint), ::df::weighted_layer(1.f, ::df::diffuse_reflection_bsdf(::math::pow(nvidia::core_definitions::blend_colors(nvidia::core_definitions::blend_colors(fabric_color, color(::math::lerp(1.f, vm_tex_lookup(diff_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), mono_r, float4(1.f)).mono, 0.479999989f)), ::base::color_layer_overlay, 1.f, true).tint, color(histogram_scan_big(float3(vm_tex_lookup(multi_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), mono_a, float4(1.f)).tint).y, 0.680000007f, 0.229999989f)), ::base::color_layer_multiply, fabric_bump_strength, true).tint, 1.86000001f), 0.f), bsdf(), add_detail_normal(vm_tex_normal_lookup(norm_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), fabric_bump_strength), vm_tex_infinite_normal(norm2_tex, vm_coord_post_scale(vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), float2(wrinkles_bump_scale * 3.f + 0.300000012f)), float3(0.5f, 0.5f, 1.f), 3.f, secondary_bump_size * 2.5f))), add_detail_normal(vm_tex_normal_lookup(norm_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), fabric_bump_strength), vm_tex_infinite_normal(norm2_tex, vm_coord_post_scale(vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), float2(wrinkles_bump_scale * 3.f + 0.300000012f)), float3(0.5f, 0.5f, 1.f), 3.f, secondary_bump_size * 2.5f)))), ::df::weighted_layer(translucency_amount * 0.200000003f, ::df::diffuse_transmission_bsdf(nvidia::core_definitions::blend_colors(hsl2rgb(float3(rgb2hsl(float3(fabric_color)).x, ::math::min(rgb2hsl(float3(fabric_color)).y, ::math::pow(rgb2hsl(float3(fabric_color)).z, 0.149999991f)), rgb2hsl(float3(fabric_color)).z)), color(::math::pow(histogram_scan_big(1.f - float3(vm_tex_lookup(multi_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), mono_a, float4(1.f)).tint).z, 0.810000002f, 0.319999993f), 2.20000005f)), ::base::color_layer_multiply, 1.f, true).tint), ::df::weighted_layer(1.f, ::df::diffuse_reflection_bsdf(::math::pow(nvidia::core_definitions::blend_colors(nvidia::core_definitions::blend_colors(fabric_color, color(::math::lerp(1.f, vm_tex_lookup(diff_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), mono_r, float4(1.f)).mono, 0.479999989f)), ::base::color_layer_overlay, 1.f, true).tint, color(histogram_scan_big(float3(vm_tex_lookup(multi_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), mono_a, float4(1.f)).tint).y, 0.680000007f, 0.229999989f)), ::base::color_layer_multiply, fabric_bump_strength, true).tint, 1.86000001f), 0.f), bsdf(), add_detail_normal(vm_tex_normal_lookup(norm_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), fabric_bump_strength), vm_tex_infinite_normal(norm2_tex, vm_coord_post_scale(vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), float2(wrinkles_bump_scale * 3.f + 0.300000012f)), float3(0.5f, 0.5f, 1.f), 3.f, secondary_bump_size * 2.5f))), add_detail_normal(vm_tex_normal_lookup(norm_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), fabric_bump_strength), vm_tex_infinite_normal(norm2_tex, vm_coord_post_scale(vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), float2(wrinkles_bump_scale * 3.f + 0.300000012f)), float3(0.5f, 0.5f, 1.f), 3.f, secondary_bump_size * 2.5f))), add_detail_normal(vm_tex_normal_lookup(norm_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), fabric_bump_strength), vm_tex_infinite_normal(norm2_tex, vm_coord_post_scale(vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.1f, false, true), float2(wrinkles_bump_scale * 3.f + 0.3f)), float3(0.5f, 0.5f, 1.f), 3.f, secondary_bump_size * 2.5f))), add_detail_normal(vm_tex_normal_lookup(norm_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.1f, false, true), fabric_bump_strength), vm_tex_infinite_normal(norm2_tex, vm_coord_post_scale(vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), float2(wrinkles_bump_scale * 3.f + 0.300000012f)), float3(0.5f, 0.5f, 1.f), 3.f, secondary_bump_size * 2.5f))), material_emission(emission: edf(), intensity: color(0.f, 0.f, 0.f), mode: intensity_radiant_exitance));499 material_surface tmp2 = material_surface(scattering: bsdf(), emission: material_emission(emission: edf(), intensity: color(0.f, 0.f, 0.f), mode: intensity_radiant_exitance));500 color tmp3 = color(1.f, 1.f, 1.f);501 material_volume tmp4 = material_volume(scattering: vdf(), absorption_coefficient: color(0.f, 0.f, 0.f), scattering_coefficient: color(0.f, 0.f, 0.f), emission_intensity: color(0.f, 0.f, 0.f));502 material_geometry tmp5(float3(0.f), histogram_scan_big(::math::pow(vm_tex_lookup(diff_tex, vm_coord_warp(vm_tex_lookup(warp_tex, vm_coord(float2(0.f), 0.f, texture_rescale * float2(4.6500001f, 4.50999975f), 0), mono_a, float4(1.f)).mono, vm_coord(texture_translate, texture_rotate, texture_rescale, uv_space_index), warp_intensity * 0.100000001f, false, true), mono_r, float4(1.f)).mono, 2.f), 0.14f, 0.18f), roundcorners_enable ? ::state::rounded_corner_normal(roundcorners_radius_mm * 0.001f, roundcorners_across_materials, 1.f) : ::state::normal());503 hair_bsdf tmp6 = hair_bsdf();504 } in material(505 thin_walled: tmp0,506 surface: tmp1, 507 backface: tmp2,508 ior: tmp3,509 volume: tmp4,510 geometry: tmp5,511 hair: tmp6);512 513 514export material Silk_Plain_Chiffon_Shiny(*)515[[516 ::anno::author("NVIDIA vMaterials"),517 ::anno::contributor("Rüdiger Raab"),518 ::anno::display_name("Silk Plain Chiffon - Shiny"),519 ::anno::description(DESCRIPTION),520 ::anno::copyright_notice(COPYRIGHT),521 ::anno::thumbnail("./.thumbs/Silk_Plain_Chiffon.Silk_Plain_Chiffon_Shiny.png"),522 ::anno::key_words(string[]("fabric", "translucent", "silk", "woven", "chiffon", "architecture", "translucent", "fashion", "design", "shiny", "white", "light", "neutral"))523]] = Silk_Plain_Chiffon(524 fabric_color: color(0.830770f, 0.830770f, 0.830770f),525 roughness: 0.01f,526 fabric_reflection: 0.98f,527 sheen_weight: 0.75f,528 translucency_amount: 0.12f,529 fabric_bump_strength: 1.0f,530 secondary_bump_size: 0.19f,531 wrinkles_bump_scale: 1.0f,532 warp_intensity: 0.0f,533 texture_translate: float2(0.0f),534 texture_rotate: 0.0f,535 texture_scale: float2(1.0f),536 uv_space_index: 0,537 roundcorners_enable: false,538 roundcorners_radius_mm: 1.0f,539 roundcorners_across_materials: false540);541 542 543export material Silk_Plain_Chiffon_Natural(*)544[[545 ::anno::author("NVIDIA vMaterials"),546 ::anno::contributor("Rüdiger Raab"),547 ::anno::display_name("Silk Plain Chiffon - Natural"),548 ::anno::description(DESCRIPTION),549 ::anno::copyright_notice(COPYRIGHT),550 ::anno::thumbnail("./.thumbs/Silk_Plain_Chiffon.Silk_Plain_Chiffon_Natural.png"),551 ::anno::key_words(string[]("fabric", "translucent", "silk", "woven", "chiffon", "architecture", "translucent", "fashion", "design", "natural", "white", "light", "warm"))552]] = Silk_Plain_Chiffon(553 fabric_color: color(0.830770f, 0.830770f, 0.830770f),554 roughness: 0.01f,555 fabric_reflection: 0.98f,556 sheen_weight: 0.75f,557 translucency_amount: 0.12f,558 fabric_bump_strength: 1.0f,559 secondary_bump_size: 0.19f,560 wrinkles_bump_scale: 1.0f,561 warp_intensity: 0.0f,562 texture_translate: float2(0.0f),563 texture_rotate: 0.0f,564 texture_scale: float2(1.0f),565 uv_space_index: 0,566 roundcorners_enable: false,567 roundcorners_radius_mm: 1.0f,568 roundcorners_across_materials: false569);