diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-03-10 18:09:22 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-03-10 20:05:01 +0300 |
commit | 7613ffc944ebc133f1f906ea737ab55718434cc4 (patch) | |
tree | e2c54a4b971fe955f4c7538db1fc086a997b8702 /intern/cycles/kernel/svm | |
parent | 8a76f8dac3475b1d24956e0d384d65295f15c76a (diff) |
Cycles: switch to squared roughness convention for all nodes.
This was already done for the Principled BSDF to be compatible with typical
baked roughness maps in PBR workflows.
Diffstat (limited to 'intern/cycles/kernel/svm')
-rw-r--r-- | intern/cycles/kernel/svm/svm_closure.h | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/intern/cycles/kernel/svm/svm_closure.h b/intern/cycles/kernel/svm/svm_closure.h index a54095ed127..886a1333fa3 100644 --- a/intern/cycles/kernel/svm/svm_closure.h +++ b/intern/cycles/kernel/svm/svm_closure.h @@ -468,10 +468,12 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float * break; } + float roughness = sqr(param1); + bsdf->N = N; bsdf->T = make_float3(0.0f, 0.0f, 0.0f); - bsdf->alpha_x = param1; - bsdf->alpha_y = param1; + bsdf->alpha_x = roughness; + bsdf->alpha_y = roughness; bsdf->ior = 0.0f; bsdf->extra = NULL; @@ -525,8 +527,9 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float * sd->flag |= bsdf_refraction_setup(bsdf); } else { - bsdf->alpha_x = param1; - bsdf->alpha_y = param1; + float roughness = sqr(param1); + bsdf->alpha_x = roughness; + bsdf->alpha_y = roughness; bsdf->ior = eta; if(type == CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID) @@ -557,7 +560,7 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float * /* fresnel */ float cosNO = dot(N, sd->I); float fresnel = fresnel_dielectric_cos(cosNO, eta); - float roughness = param1; + float roughness = sqr(param1); /* reflection */ #ifdef __CAUSTICS_TRICKS__ @@ -611,8 +614,9 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float * bsdf->extra = extra; bsdf->T = make_float3(0.0f, 0.0f, 0.0f); - bsdf->alpha_x = param1; - bsdf->alpha_y = param1; + float roughness = sqr(param1); + bsdf->alpha_x = roughness; + bsdf->alpha_y = roughness; float eta = fmaxf(param2, 1e-5f); bsdf->ior = (sd->flag & SD_BACKFACING)? 1.0f/eta: eta; @@ -648,7 +652,7 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float * bsdf->T = rotate_around_axis(bsdf->T, bsdf->N, rotation * M_2PI_F); /* compute roughness */ - float roughness = param1; + float roughness = sqr(param1); float anisotropy = clamp(param2, -0.99f, 0.99f); if(anisotropy < 0.0f) { |