Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2014-02-03 20:06:37 +0400
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2014-02-03 20:08:34 +0400
commiteff3bd4e9880efc0c767e3098baa86ab23d77bc7 (patch)
tree8497aae6c0065ac50d13fcc301aeea6457ed94f1 /intern
parent8b1731e13dcd0d9ef98520f62fe0c841218bfd00 (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.
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/kernel/shaders/node_fresnel.osl2
-rw-r--r--intern/cycles/kernel/shaders/node_glass_bsdf.osl2
-rw-r--r--intern/cycles/kernel/shaders/node_refraction_bsdf.osl2
-rw-r--r--intern/cycles/kernel/svm/svm_closure.h4
-rw-r--r--intern/cycles/kernel/svm/svm_fresnel.h2
5 files changed, 6 insertions, 6 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);