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@pandora.be>2011-11-10 18:32:16 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-11-10 18:32:16 +0400
commit5b1a42cb17e13af08803a61eb65ce7e068ecb127 (patch)
tree51e109c55322f67b82ca6f906d90ed5a7fc69795 /intern
parentcf6a1320a8ba5e8952766ad97da6c6a5aaa5472e (diff)
Cycles:
* Fix excessive fireflies in Velvet BSDF (patch by David). * Disable some unused SSE code * Remove RTTI disabling flags for now, this is giving some compile issues and was only needed of OSL which we're not using yet.
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/CMakeLists.txt3
-rw-r--r--intern/cycles/SConscript5
-rw-r--r--intern/cycles/kernel/kernel_compat_cpu.h4
-rw-r--r--intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h45
-rw-r--r--intern/cycles/util/util_types.h3
5 files changed, 37 insertions, 23 deletions
diff --git a/intern/cycles/CMakeLists.txt b/intern/cycles/CMakeLists.txt
index c0992aae7da..d1ee5e0050d 100644
--- a/intern/cycles/CMakeLists.txt
+++ b/intern/cycles/CMakeLists.txt
@@ -32,6 +32,9 @@ if(UNIX AND NOT APPLE)
set(RTTI_DISABLE_FLAGS "-fno-rtti -DBOOST_NO_RTTI -DBOOST_NO_TYPEID")
endif()
+# not needed yet, is for open shading language
+set(RTTI_DISABLE_FLAGS "")
+
# Definitions and Includes
add_definitions(${BOOST_DEFINITIONS} ${OPENIMAGEIO_DEFINITIONS})
diff --git a/intern/cycles/SConscript b/intern/cycles/SConscript
index 5ecd52d369f..e2c81edea37 100644
--- a/intern/cycles/SConscript
+++ b/intern/cycles/SConscript
@@ -24,11 +24,12 @@ defs.append('WITH_MULTI')
defs.append('WITH_CUDA')
if env['OURPLATFORM'] in ('win32-mingw'):
- cxxflags.append('-fno-rtti'.split())
if env['WITH_BF_RAYOPTIMIZATION']:
cxxflags.append('-ffast-math -msse -msse2 -msse3'.split())
ccflags.append('-ffast-math -msse -msse2 -msse3'.split())
- defs.append('BOOST_NO_RTTI BOOST_NO_TYPEID'.split())
+ # not needed yet, is for open shading language
+ # cxxflags.append('-fno-rtti'.split())
+ # defs.append('BOOST_NO_RTTI BOOST_NO_TYPEID'.split())
incs.extend('. bvh render device kernel kernel/osl kernel/svm util subd'.split())
incs.extend('#intern/guardedalloc #source/blender/makesrna #source/blender/makesdna'.split())
diff --git a/intern/cycles/kernel/kernel_compat_cpu.h b/intern/cycles/kernel/kernel_compat_cpu.h
index cee0710492f..fd96148968f 100644
--- a/intern/cycles/kernel/kernel_compat_cpu.h
+++ b/intern/cycles/kernel/kernel_compat_cpu.h
@@ -43,7 +43,7 @@ template<typename T> struct texture {
return data[index];
}
- __m128 fetch_m128(int index)
+ /*__m128 fetch_m128(int index)
{
kernel_assert(index >= 0 && index < width);
return ((__m128*)data)[index];
@@ -53,7 +53,7 @@ template<typename T> struct texture {
{
kernel_assert(index >= 0 && index < width);
return ((__m128i*)data)[index];
- }
+ }*/
float interp(float x)
{
diff --git a/intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h b/intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h
index e16efebf5bb..2e9343647b8 100644
--- a/intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h
+++ b/intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h
@@ -68,8 +68,11 @@ __device float3 bsdf_ashikhmin_velvet_eval_reflect(const ShaderData *sd, const S
float cosNH = dot(m_N, H);
float cosHO = fabsf(dot(I, H));
+ if(!(fabsf(cosNH) < 1.0f-1e-5f && cosHO > 1e-5f))
+ return make_float3(0, 0, 0);
+
float cosNHdivHO = cosNH / cosHO;
- cosNHdivHO = fmaxf(cosNHdivHO, 0.00001f);
+ cosNHdivHO = fmaxf(cosNHdivHO, 1e-5f);
float fac1 = 2 * fabsf(cosNHdivHO * cosNO);
float fac2 = 2 * fabsf(cosNHdivHO * cosNI);
@@ -86,6 +89,7 @@ __device float3 bsdf_ashikhmin_velvet_eval_reflect(const ShaderData *sd, const S
*pdf = 0.5f * M_1_PI_F;
return make_float3(out, out, out);
}
+
return make_float3(0, 0, 0);
}
@@ -116,31 +120,36 @@ __device int bsdf_ashikhmin_velvet_sample(const ShaderData *sd, const ShaderClos
float cosNH = dot(m_N, H);
float cosHO = fabsf(dot(sd->I, H));
- float cosNHdivHO = cosNH / cosHO;
- cosNHdivHO = fmaxf(cosNHdivHO, 0.00001f);
+ if(fabsf(cosNO) > 1e-5f && fabsf(cosNH) < 1.0f-1e-5f && cosHO > 1e-5f) {
+ float cosNHdivHO = cosNH / cosHO;
+ cosNHdivHO = fmaxf(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 * M_1_PI_F / sinNH4;
- float G = min(1.0f, min(fac1, fac2)); // TODO: derive G from D analytically
+ float D = expf(-cotangent2 * m_invsigma2) * m_invsigma2 * M_1_PI_F / 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 = make_float3(power, power, power);
+ *eval = make_float3(power, power, power);
#ifdef __RAY_DIFFERENTIALS__
- // TODO: find a better approximation for the retroreflective bounce
- *domega_in_dx = (2 * dot(m_N, sd->dI.dx)) * m_N - sd->dI.dx;
- *domega_in_dy = (2 * dot(m_N, sd->dI.dy)) * m_N - sd->dI.dy;
- *domega_in_dx *= 125.0f;
- *domega_in_dy *= 125.0f;
+ // TODO: find a better approximation for the retroreflective bounce
+ *domega_in_dx = (2 * dot(m_N, sd->dI.dx)) * m_N - sd->dI.dx;
+ *domega_in_dy = (2 * dot(m_N, sd->dI.dy)) * m_N - sd->dI.dy;
+ *domega_in_dx *= 125.0f;
+ *domega_in_dy *= 125.0f;
#endif
- } else
+ }
+ else
+ *pdf = 0.0f;
+ }
+ else
*pdf = 0.0f;
return LABEL_REFLECT|LABEL_DIFFUSE;
diff --git a/intern/cycles/util/util_types.h b/intern/cycles/util/util_types.h
index af5b91c963a..2c0ae13ad2a 100644
--- a/intern/cycles/util/util_types.h
+++ b/intern/cycles/util/util_types.h
@@ -46,12 +46,13 @@
/* SIMD Types */
+/* not needed yet, will be for qbvh
#ifndef __KERNEL_GPU__
#include <emmintrin.h>
#include <xmmintrin.h>
-#endif
+#endif*/
#ifndef _WIN32
#ifndef __KERNEL_GPU__