İçindekiler

Genel Bakış #
Bu gölgelendirici, kumaş malzemelerinin görünümünü yeniden oluşturmayı amaçlamaktadır. Bu bir malzeme gölgelendiricisidir ve VRayOSLMtl malzemesiyle birlikte kullanılmalıdır . Gölgelendirici Derek Flood tarafından sağlanmıştır.
Shader koduna buradan ulaşabilirsiniz:
kumaş.fermuar
Gölgelendirici kodu #
Aşağıda shader kodu bulunmaktadır.
kumaş.osl #
</p>
<div>/*</div>
<div> *</div>
<div> * fabric.osl shader by Derek Flood (c)2015</div>
<div> * from http://docs.sharktacos.com/misc.php?action=help&hid=66</div>
<div> *</div>
<div> */</div>
<div></div>
<div>float fresnelReflectionFactor(normal bumped_normal, float ior)</div>
<div>{</div>
<div> float c = abs(dot(I, bumped_normal));</div>
<div> float g = ior * ior - 1.0 + c * c;</div>
<div> if (g > 0.0) {</div>
<div> g = sqrt (g);</div>
<div> float A = (g - c) / (g + c);</div>
<div> float B = (c * (g + c) - 1.0) / (c * (g - c) + 1.0);</div>
<div> return 0.5 * A * A * (1.0 + B * B);</div>
<div> }</div>
<div></div>
<div> return 1.0;</div>
<div>}</div>
<div></div>
<div>normal getBumpedNormal(color centerColor, color uColor, color vColor, float inverseBumpAmount)</div>
<div>{</div>
<div> vector worldTangent = normalize(dPdu);</div>
<div> vector worldBitangent = normalize(dPdv);</div>
<div> vector worldNormal = normalize(N);</div>
<div></div>
<div> vector average = vector(0.3333333);</div>
<div> float center = dot (average, vector(centerColor));</div>
<div> float ddu = center - dot(average, vector(uColor));</div>
<div> float ddv = center - dot(average, vector(vColor));</div>
<div></div>
<div> return normalize(ddu * worldTangent + ddv * worldBitangent + inverseBumpAmount * worldNormal);</div>
<div>}</div>
<div></div>
<div>surface fabric</div>
<div> [[ string description = "artist based fabric material" ]]</div>
<div>(</div>
<div> /* Diffuse section */</div>
<div> color Sheen_color = color(1.0, 1.0, 1.0) [[ string description = "Sheen color can be black for nylon sheen." ]],</div>
<div> float Sheen_opacity = 1.0 [[ string description = "Determines amount of sheen effect as fibres pick up light at incident angle." ]],</div>
<div> float Sheen_tint = 0.5 [[ string description = "Tints both the sheen and specular." ]],</div>
<div> int Sheen_ramp_type = 3</div>
<div> [[ string widget = "mapper",</div>
<div> string description = "Six types of interpolation for sheen. 1-3 (linear, exponential and smooth) are sharper, 4-6 (Sigmoid, square root and Fresnel) are softer.",</div>
<div> string options = "linear:1|exponential:2|Smooth:3|Sigmoid:4|Square_root:5|Fresnel:6" ]],</div>
<div></div>
<div> string Diffuse_color = "",</div>
<div> float Diffuse_weight = 0.8,</div>
<div> float Diffuse_roughness = 0.4,</div>
<div> /* Spec section */</div>
<div> color Spec_color = 1.0,</div>
<div> float Spec_amount = 0.5,</div>
<div> float Spec_glossiness = 0.6,</div>
<div> float IOR = 1.33 [[ string description = "Determines the strength of Fresnel reflections; fabric generally has low frontal reflections." ]],</div>
<div> int Subdivs = 8,</div>
<div> int Trace_reflections = 1</div>
<div> [[ string widget = "checkBox" ]],</div>
<div> int Fresnel = 1</div>
<div> [[ string widget = "checkBox" ]],</div>
<div></div>
<div> /* Anisotropy section */</div>
<div> float Anisotropy = 0.25, // Fabric is anisotropic due to weave.</div>
<div> float Aniso_rotation = 0,</div>
<div></div>
<div> /* Bump section */</div>
<div> string Bump_texture = "",</div>
<div> float Bump_amount = 1.0,</div>
<div> output color result = 1 )</div>
<div>{</div>
<div> /* Define Bump */</div>
<div> normal bumped_normal = N;</div>
<div> if (Bump_amount > 0.0)</div>
<div> {</div>
<div> float delta = 0.004;</div>
<div> color center = texture(Bump_texture, u, v);</div>
<div> color uColor = texture(Bump_texture, u + delta, v);</div>
<div> color vColor = texture(Bump_texture, u, v + delta);</div>
<div></div>
<div> bumped_normal = getBumpedNormal(center, uColor, vColor, 1.0 / Bump_amount);</div>
<div></div>
<div> }</div>
<div></div>
<div> /* Define Main color */</div>
<div> color MainColor = texture (Diffuse_color, u, v, "missingcolor", color(1,0,0));</div>
<div> MainColor = pow (MainColor, 2.2);</div>
<div></div>
<div> /* Define Edge color */</div>
<div> color TintBoost = transformc("hsl", MainColor);</div>
<div> TintBoost[2] = pow (TintBoost[2], 0.2);</div>
<div> TintBoost[2] = clamp(TintBoost[2],0,1);</div>
<div> TintBoost = transformc("hsl","rgb", TintBoost);</div>
<div></div>
<div> color EdgeColor = Sheen_color / 10;</div>
<div> color TintEdge = EdgeColor * TintBoost;</div>
<div> EdgeColor = mix (EdgeColor, TintEdge, Sheen_tint);</div>
<div> EdgeColor = clamp (EdgeColor, 0, 1);</div>
<div></div>
<div> /* Define Spec color */</div>
<div> color SpecColor = Spec_color;</div>
<div> color TintedSpec = SpecColor * TintBoost;</div>
<div> SpecColor = mix (SpecColor, TintedSpec, Sheen_tint);</div>
<div></div>
<div> /* Define Ramp */</div>
<div></div>
<div> float facingRatio = 1 - abs(dot(I, bumped_normal));</div>
<div></div>
<div> if( Sheen_ramp_type == 1) // linear</div>
<div> {facingRatio = facingRatio; }</div>
<div> if( Sheen_ramp_type == 2) // exponential (Down)</div>
<div> { facingRatio *= facingRatio; }</div>
<div> if( Sheen_ramp_type == 3) // smooth</div>
<div> { facingRatio = smoothstep (0,1, facingRatio ); }</div>
<div></div>
<div> if( Sheen_ramp_type == 4) // sigmoid S-curve</div>
<div> {</div>
<div> float Sigmoid = facingRatio / (1 + abs(facingRatio));</div>
<div> facingRatio = clamp( 2 * Sigmoid, 0, 1);</div>
<div> }</div>
<div> if( Sheen_ramp_type == 5) // square root</div>
<div> { facingRatio = sqrt (facingRatio); }</div>
<div></div>
<div> if( Sheen_ramp_type == 6) // fresnel</div>
<div> { facingRatio = 2 * fresnelReflectionFactor(bumped_normal, IOR); }</div>
<div></div>
<div></div>
<div> /* Fresnel */</div>
<div> if (Fresnel)</div>
<div> { SpecColor *= fresnelReflectionFactor(bumped_normal, IOR); }</div>
<div> if (Trace_reflections)</div>
<div> { MainColor *= (1.0 - SpecColor); }</div>
<div></div>
<div> /* BRDF Mixes*/</div>
<div> color SheenMix = EdgeColor * facingRatio * Sheen_opacity;</div>
<div> color EdgeMask = mix(1, Sheen_color, (facingRatio * Sheen_opacity) );</div>
<div> MainColor *= EdgeMask;</div>
<div> MainColor *= (1.0 - SheenMix);</div>
<div></div>
<div> closure color sheen_component = SheenMix * diffuse(bumped_normal, "roughness", Diffuse_roughness);</div>
<div> closure color diffuse_component = MainColor * Diffuse_weight * diffuse(bumped_normal, "roughness", Diffuse_roughness);</div>
<div> closure color specular_component = Spec_amount * SpecColor *</div>
<div> vray_blinn (bumped_normal, Spec_glossiness, Anisotropy, Aniso_rotation,</div>
<div> "subdivs", Subdivs, "trace_reflections", Trace_reflections);</div>
<div></div>
<div> closure color reflect_component = SpecColor * reflection(bumped_normal, IOR);</div>
<div> Ci = diffuse_component + specular_component + reflect_component + sheen_component;</div>
<div>}</div>
<p>
