[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50660] trunk/blender/intern/cycles/kernel /osl/bsdf_ashikhmin_velvet.cpp: OSL Fix for fireflies in velvet bsdf, ported over from SVM fix in r41738.
Lukas Toenne
lukas.toenne at googlemail.com
Sun Sep 16 15:17:39 CEST 2012
Revision: 50660
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50660
Author: lukastoenne
Date: 2012-09-16 13:17:39 +0000 (Sun, 16 Sep 2012)
Log Message:
-----------
OSL Fix for fireflies in velvet bsdf, ported over from SVM fix in r41738.
Revision Links:
--------------
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41738
Modified Paths:
--------------
trunk/blender/intern/cycles/kernel/osl/bsdf_ashikhmin_velvet.cpp
Modified: trunk/blender/intern/cycles/kernel/osl/bsdf_ashikhmin_velvet.cpp
===================================================================
--- trunk/blender/intern/cycles/kernel/osl/bsdf_ashikhmin_velvet.cpp 2012-09-16 12:33:39 UTC (rev 50659)
+++ trunk/blender/intern/cycles/kernel/osl/bsdf_ashikhmin_velvet.cpp 2012-09-16 13:17:39 UTC (rev 50660)
@@ -90,8 +90,11 @@
float cosNH = m_N.dot(H);
float cosHO = fabsf(omega_out.dot(H));
+ if(!(fabsf(cosNH) < 1.0f-1e-5f && cosHO > 1e-5f))
+ return Color3(0, 0, 0);
+
float cosNHdivHO = cosNH / cosHO;
- cosNHdivHO = max(cosNHdivHO, 0.00001f);
+ cosNHdivHO = max(cosNHdivHO, 1e-5f);
float fac1 = 2 * fabsf(cosNHdivHO * cosNO);
float fac2 = 2 * fabsf(cosNHdivHO * cosNI);
@@ -134,28 +137,32 @@
float cosNH = m_N.dot(H);
float cosHO = fabsf(omega_out.dot(H));
- float cosNHdivHO = cosNH / cosHO;
- cosNHdivHO = max(cosNHdivHO, 0.00001f);
+ if(fabsf(cosNO) > 1e-5f && fabsf(cosNH) < 1.0f-1e-5f && cosHO > 1e-5f) {
+ float cosNHdivHO = cosNH / cosHO;
+ cosNHdivHO = max(cosNHdivHO, 1e-5f);
- float fac1 = 2 * fabsf(cosNHdivHO * cosNO);
- float fac2 = 2 * fabsf(cosNHdivHO * cosNI);
+ float fac1 = 2 * fabsf(cosNHdivHO * cosNO);
+ float fac2 = 2 * fabsf(cosNHdivHO * cosNI);
- float sinNH2 = 1 - cosNH * cosNH;
- float sinNH4 = sinNH2 * sinNH2;
- float cotangent2 = (cosNH * cosNH) / sinNH2;
+ float sinNH2 = 1 - cosNH * cosNH;
+ float sinNH4 = sinNH2 * sinNH2;
+ float cotangent2 = (cosNH * cosNH) / sinNH2;
- float D = expf(-cotangent2 * m_invsigma2) * m_invsigma2 * float(M_1_PI) / sinNH4;
- float G = min(1.0f, min(fac1, fac2)); // TODO: derive G from D analytically
+ float D = expf(-cotangent2 * m_invsigma2) * m_invsigma2 * float(M_1_PI) / sinNH4;
+ float G = min(1.0f, min(fac1, fac2)); // TODO: derive G from D analytically
- float power = 0.25f * (D * G) / cosNO;
+ float power = 0.25f * (D * G) / cosNO;
- eval.setValue(power, power, power);
+ eval.setValue(power, power, power);
- // TODO: find a better approximation for the retroreflective bounce
- domega_in_dx = (2 * m_N.dot(domega_out_dx)) * m_N - domega_out_dx;
- domega_in_dy = (2 * m_N.dot(domega_out_dy)) * m_N - domega_out_dy;
- domega_in_dx *= 125;
- domega_in_dy *= 125;
+ // TODO: find a better approximation for the retroreflective bounce
+ domega_in_dx = (2 * m_N.dot(domega_out_dx)) * m_N - domega_out_dx;
+ domega_in_dy = (2 * m_N.dot(domega_out_dy)) * m_N - domega_out_dy;
+ domega_in_dx *= 125;
+ domega_in_dy *= 125;
+ }
+ else
+ pdf = 0;
}
else
pdf = 0;
More information about the Bf-blender-cvs
mailing list