View Categories

Kumaş gölgeleyici

3 dakika okuma

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&amp;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 &gt; 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 &gt; 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>

Tarafından desteklenmektedir BetterDocs

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir