diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-02-03 20:06:37 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-02-03 20:08:34 +0400 |
commit | eff3bd4e9880efc0c767e3098baa86ab23d77bc7 (patch) | |
tree | 8497aae6c0065ac50d13fcc301aeea6457ed94f1 | |
parent | 8b1731e13dcd0d9ef98520f62fe0c841218bfd00 (diff) |
Fix T38439: allow IOR in range [0, inf] instead of [1, inf] in Cycles.
The same can be achieved by flipping normals on the mesh, but it can be
convenient to do this in the shader.
8 files changed, 9 insertions, 9 deletions
diff --git a/intern/cycles/kernel/shaders/node_fresnel.osl b/intern/cycles/kernel/shaders/node_fresnel.osl index ca463817840..8c59d5bb512 100644 --- a/intern/cycles/kernel/shaders/node_fresnel.osl +++ b/intern/cycles/kernel/shaders/node_fresnel.osl @@ -22,7 +22,7 @@ shader node_fresnel( normal Normal = N, output float Fac = 0.0) { - float f = max(IOR, 1.0 + 1e-5); + float f = max(IOR, 1e-5); float eta = backfacing() ? 1.0 / f: f; float cosi = dot(I, Normal); Fac = fresnel_dielectric_cos(cosi, eta); diff --git a/intern/cycles/kernel/shaders/node_glass_bsdf.osl b/intern/cycles/kernel/shaders/node_glass_bsdf.osl index c79785f2d65..96934199621 100644 --- a/intern/cycles/kernel/shaders/node_glass_bsdf.osl +++ b/intern/cycles/kernel/shaders/node_glass_bsdf.osl @@ -25,7 +25,7 @@ shader node_glass_bsdf( normal Normal = N, output closure color BSDF = 0) { - float f = max(IOR, 1.0 + 1e-5); + float f = max(IOR, 1e-5); float eta = backfacing() ? 1.0 / f: f; float cosi = dot(I, Normal); float Fr = fresnel_dielectric_cos(cosi, eta); diff --git a/intern/cycles/kernel/shaders/node_refraction_bsdf.osl b/intern/cycles/kernel/shaders/node_refraction_bsdf.osl index a4e9d0825db..f87b3a5dd86 100644 --- a/intern/cycles/kernel/shaders/node_refraction_bsdf.osl +++ b/intern/cycles/kernel/shaders/node_refraction_bsdf.osl @@ -24,7 +24,7 @@ shader node_refraction_bsdf( normal Normal = N, output closure color BSDF = 0) { - float f = max(IOR, 1.0 + 1e-5); + float f = max(IOR, 1e-5); float eta = backfacing() ? 1.0 / f: f; if (distribution == "Sharp") diff --git a/intern/cycles/kernel/svm/svm_closure.h b/intern/cycles/kernel/svm/svm_closure.h index 42e66a79978..2813e38d8f7 100644 --- a/intern/cycles/kernel/svm/svm_closure.h +++ b/intern/cycles/kernel/svm/svm_closure.h @@ -225,7 +225,7 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float * sc->N = N; sc->data0 = param1; - float eta = fmaxf(param2, 1.0f + 1e-5f); + float eta = fmaxf(param2, 1e-5f); sc->data1 = (sd->flag & SD_BACKFACING)? 1.0f/eta: eta; /* setup bsdf */ @@ -247,7 +247,7 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float * break; #endif /* index of refraction */ - float eta = fmaxf(param2, 1.0f + 1e-5f); + float eta = fmaxf(param2, 1e-5f); eta = (sd->flag & SD_BACKFACING)? 1.0f/eta: eta; /* fresnel */ diff --git a/intern/cycles/kernel/svm/svm_fresnel.h b/intern/cycles/kernel/svm/svm_fresnel.h index 0a3d576cfe1..5def52205eb 100644 --- a/intern/cycles/kernel/svm/svm_fresnel.h +++ b/intern/cycles/kernel/svm/svm_fresnel.h @@ -25,7 +25,7 @@ ccl_device void svm_node_fresnel(ShaderData *sd, float *stack, uint ior_offset, float eta = (stack_valid(ior_offset))? stack_load_float(stack, ior_offset): __uint_as_float(ior_value); float3 normal_in = stack_valid(normal_offset)? stack_load_float3(stack, normal_offset): sd->N; - eta = fmaxf(eta, 1.0f + 1e-5f); + eta = fmaxf(eta, 1e-5f); eta = (sd->flag & SD_BACKFACING)? 1.0f/eta: eta; float f = fresnel_dielectric_cos(dot(sd->I, normal_in), eta); diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c index 4b2a9cc3339..a59cbd6f46e 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c @@ -32,7 +32,7 @@ static bNodeSocketTemplate sh_node_bsdf_glass_in[] = { { SOCK_RGBA, 1, N_("Color"), 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f}, { SOCK_FLOAT, 1, N_("Roughness"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR}, - { SOCK_FLOAT, 1, N_("IOR"), 1.45f, 0.0f, 0.0f, 0.0f, 1.0f, 1000.0f}, + { SOCK_FLOAT, 1, N_("IOR"), 1.45f, 0.0f, 0.0f, 0.0f, 0.0f, 1000.0f}, { SOCK_VECTOR, 1, N_("Normal"), 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_NONE, SOCK_HIDE_VALUE}, { -1, 0, "" } }; diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_refraction.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_refraction.c index ce69707e855..5d1bcc81adb 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_refraction.c +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_refraction.c @@ -32,7 +32,7 @@ static bNodeSocketTemplate sh_node_bsdf_refraction_in[] = { { SOCK_RGBA, 1, N_("Color"), 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f}, { SOCK_FLOAT, 1, N_("Roughness"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR}, - { SOCK_FLOAT, 1, N_("IOR"), 1.45f, 0.0f, 0.0f, 0.0f, 1.0f, 1000.0f}, + { SOCK_FLOAT, 1, N_("IOR"), 1.45f, 0.0f, 0.0f, 0.0f, 0.0f, 1000.0f}, { SOCK_VECTOR, 1, N_("Normal"), 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_NONE, SOCK_HIDE_VALUE}, { -1, 0, "" } }; diff --git a/source/blender/nodes/shader/nodes/node_shader_fresnel.c b/source/blender/nodes/shader/nodes/node_shader_fresnel.c index adc51a06ce5..59d798dc80c 100644 --- a/source/blender/nodes/shader/nodes/node_shader_fresnel.c +++ b/source/blender/nodes/shader/nodes/node_shader_fresnel.c @@ -29,7 +29,7 @@ /* **************** Fresnel ******************** */ static bNodeSocketTemplate sh_node_fresnel_in[] = { - { SOCK_FLOAT, 1, N_("IOR"), 1.45f, 0.0f, 0.0f, 0.0f, 1.0f, 1000.0f}, + { SOCK_FLOAT, 1, N_("IOR"), 1.45f, 0.0f, 0.0f, 0.0f, 0.0f, 1000.0f}, { SOCK_VECTOR, 1, N_("Normal"), 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_NONE, SOCK_HIDE_VALUE}, { -1, 0, "" } }; |