[Bf-blender-cvs] [eff3bd4] master: Fix T38439: allow IOR in range [0, inf] instead of [1, inf] in Cycles.

Brecht Van Lommel noreply at git.blender.org
Mon Feb 3 17:10:01 CET 2014


Commit: eff3bd4e9880efc0c767e3098baa86ab23d77bc7
Author: Brecht Van Lommel
Date:   Mon Feb 3 17:06:37 2014 +0100
https://developer.blender.org/rBeff3bd4e9880efc0c767e3098baa86ab23d77bc7

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.

===================================================================

M	intern/cycles/kernel/shaders/node_fresnel.osl
M	intern/cycles/kernel/shaders/node_glass_bsdf.osl
M	intern/cycles/kernel/shaders/node_refraction_bsdf.osl
M	intern/cycles/kernel/svm/svm_closure.h
M	intern/cycles/kernel/svm/svm_fresnel.h
M	source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c
M	source/blender/nodes/shader/nodes/node_shader_bsdf_refraction.c
M	source/blender/nodes/shader/nodes/node_shader_fresnel.c

===================================================================

diff --git a/intern/cycles/kernel/shaders/node_fresnel.osl b/intern/cycles/kernel/shaders/node_fresnel.osl
index ca46381..8c59d5b 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 c79785f..9693419 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 a4e9d08..f87b3a5 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 42e66a7..2813e38 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 0a3d576..5def522 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 4b2a9cc..a59cbd6 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 ce69707..5d1bcc8 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 adc51a0..59d798d 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, ""	}
 };




More information about the Bf-blender-cvs mailing list