diff options
author | Pascal Schoen <pascal_schoen@gmx.net> | 2016-09-27 09:53:18 +0300 |
---|---|---|
committer | Pascal Schoen <pascal_schoen@gmx.net> | 2016-09-27 09:53:18 +0300 |
commit | d0530a8af0e076c0aca4c9a61b0a64cada45ac4d (patch) | |
tree | 0c4ab68c91c95a5cc88a0e794b7671de282c2555 | |
parent | 3f4fc826bd9c1f47c694c0f6b2947daf5b524b1a (diff) |
Cleanup the Disney BSDF implementation and removing unneeded files.
-rw-r--r-- | intern/cycles/kernel/CMakeLists.txt | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/closure/bsdf.h | 22 | ||||
-rw-r--r-- | intern/cycles/kernel/closure/bsdf_disney_clearcoat.h | 200 | ||||
-rw-r--r-- | intern/cycles/kernel/closure/bsdf_disney_specular.h | 286 | ||||
-rw-r--r-- | intern/cycles/kernel/osl/bsdf_disney_clearcoat.cpp | 98 | ||||
-rw-r--r-- | intern/cycles/kernel/osl/bsdf_disney_diffuse.cpp | 100 | ||||
-rw-r--r-- | intern/cycles/kernel/osl/bsdf_disney_specular.cpp | 102 | ||||
-rw-r--r-- | intern/cycles/kernel/osl/osl_closures.cpp | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/osl/osl_closures.h | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/shaders/stdosl.h | 2 |
10 files changed, 0 insertions, 816 deletions
diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt index 80c732b42cd..a0e2b28fd88 100644 --- a/intern/cycles/kernel/CMakeLists.txt +++ b/intern/cycles/kernel/CMakeLists.txt @@ -109,8 +109,6 @@ set(SRC_CLOSURE_HEADERS closure/volume.h closure/bsdf_disney_diffuse.h closure/bsdf_disney_sheen.h - closure/bsdf_disney_specular.h - closure/bsdf_disney_clearcoat.h ) set(SRC_SVM_HEADERS diff --git a/intern/cycles/kernel/closure/bsdf.h b/intern/cycles/kernel/closure/bsdf.h index ac4f52818c9..97bdf9c4560 100644 --- a/intern/cycles/kernel/closure/bsdf.h +++ b/intern/cycles/kernel/closure/bsdf.h @@ -29,8 +29,6 @@ #include "../closure/bsdf_hair.h" #include "../closure/bsdf_disney_diffuse.h" #include "../closure/bsdf_disney_sheen.h" -#include "../closure/bsdf_disney_specular.h" -#include "../closure/bsdf_disney_clearcoat.h" #ifdef __SUBSURFACE__ # include "../closure/bssrdf.h" #endif @@ -144,14 +142,6 @@ ccl_device_inline int bsdf_sample(KernelGlobals *kg, label = bsdf_disney_sheen_sample(sc, ccl_fetch(sd, Ng), ccl_fetch(sd, I), ccl_fetch(sd, dI).dx, ccl_fetch(sd, dI).dy, randu, randv, eval, omega_in, &domega_in->dx, &domega_in->dy, pdf); break; - /*case CLOSURE_BSDF_DISNEY_SPECULAR_ID: - label = bsdf_disney_specular_sample(sc, ccl_fetch(sd, Ng), ccl_fetch(sd, I), ccl_fetch(sd, dI).dx, ccl_fetch(sd, dI).dy, randu, randv, - eval, omega_in, &domega_in->dx, &domega_in->dy, pdf); - break;*/ - case CLOSURE_BSDF_DISNEY_CLEARCOAT_ID: - label = bsdf_disney_clearcoat_sample(sc, ccl_fetch(sd, Ng), ccl_fetch(sd, I), ccl_fetch(sd, dI).dx, ccl_fetch(sd, dI).dy, randu, randv, - eval, omega_in, &domega_in->dx, &domega_in->dy, pdf); - break; #endif #ifdef __VOLUME__ case CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID: @@ -251,12 +241,6 @@ float3 bsdf_eval(KernelGlobals *kg, case CLOSURE_BSDF_DISNEY_SHEEN_ID: eval = bsdf_disney_sheen_eval_reflect(sc, ccl_fetch(sd, I), omega_in, pdf); break; - /*case CLOSURE_BSDF_DISNEY_SPECULAR_ID: - eval = bsdf_disney_specular_eval_reflect(sc, ccl_fetch(sd, I), omega_in, pdf); - break;*/ - case CLOSURE_BSDF_DISNEY_CLEARCOAT_ID: - eval = bsdf_disney_clearcoat_eval_reflect(sc, ccl_fetch(sd, I), omega_in, pdf); - break; #endif #ifdef __VOLUME__ case CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID: @@ -333,12 +317,6 @@ float3 bsdf_eval(KernelGlobals *kg, case CLOSURE_BSDF_DISNEY_SHEEN_ID: eval = bsdf_disney_sheen_eval_transmit(sc, ccl_fetch(sd, I), omega_in, pdf); break; - /*case CLOSURE_BSDF_DISNEY_SPECULAR_ID: - eval = bsdf_disney_specular_eval_transmit(sc, ccl_fetch(sd, I), omega_in, pdf); - break;*/ - case CLOSURE_BSDF_DISNEY_CLEARCOAT_ID: - eval = bsdf_disney_clearcoat_eval_transmit(sc, ccl_fetch(sd, I), omega_in, pdf); - break; #endif #ifdef __VOLUME__ case CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID: diff --git a/intern/cycles/kernel/closure/bsdf_disney_clearcoat.h b/intern/cycles/kernel/closure/bsdf_disney_clearcoat.h deleted file mode 100644 index cdb8b3e0cff..00000000000 --- a/intern/cycles/kernel/closure/bsdf_disney_clearcoat.h +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Adapted from Open Shading Language with this license: - * - * Copyright (c) 2009-2010 Sony Pictures Imageworks Inc., et al. - * All Rights Reserved. - * - * Modifications Copyright 2011, Blender Foundation. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Sony Pictures Imageworks nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __BSDF_DISNEY_CLEARCOAT_H__ -#define __BSDF_DISNEY_CLEARCOAT_H__ - -CCL_NAMESPACE_BEGIN - -typedef ccl_addr_space struct DisneyClearcoatBsdf { - SHADER_CLOSURE_BASE; - - float clearcoat, clearcoatGloss, clearcoatRoughness; - float3 N; -} DisneyClearcoatBsdf; - -ccl_device int bsdf_disney_clearcoat_setup(DisneyClearcoatBsdf *bsdf) -{ - /* clearcoat roughness */ - bsdf->clearcoatRoughness = 0.1f * (1.0f - bsdf->clearcoatGloss) + 0.001f * bsdf->clearcoatGloss; // lerp(0.1f, 0.001f, sc->data1/*clearcoatGloss*/); // - - bsdf->type = CLOSURE_BSDF_DISNEY_CLEARCOAT_ID; - return SD_BSDF|SD_BSDF_HAS_EVAL; -} - -ccl_device float3 bsdf_disney_clearcoat_eval_reflect(const ShaderClosure *sc, const float3 I, - const float3 omega_in, float *pdf) -{ - const DisneyClearcoatBsdf *bsdf = (const DisneyClearcoatBsdf *)sc; - - if (bsdf->clearcoat > 0.0f) { - float alpha = bsdf->clearcoatRoughness; - float3 N = bsdf->N; - - if (alpha <= 1e-4f) - return make_float3(0.0f, 0.0f, 0.0f); - - float cosNO = dot(N, I); - float cosNI = dot(N, omega_in); - - if (cosNI > 0 && cosNO > 0) { - /* get half vector */ - float3 m = normalize(omega_in + I); - float alpha2 = alpha * alpha; - float D, G1o, G1i; - - /* isotropic - * eq. 20: (F*G*D)/(4*in*on) - * eq. 33: first we calculate D(m) */ - float cosThetaM = dot(N, m); - float cosThetaM2 = cosThetaM * cosThetaM; - D = (alpha2 - 1) / (M_PI_F * logf(alpha2) * (1 + (alpha2 - 1) * cosThetaM2)); - - /* eq. 34: now calculate G1(i,m) and G1(o,m) */ - G1o = 2 / (1 + safe_sqrtf(1 + 0.0625f * (1 - cosNO * cosNO) / (cosNO * cosNO))); - G1i = 2 / (1 + safe_sqrtf(1 + 0.0625f * (1 - cosNI * cosNI) / (cosNI * cosNI))); - - float G = G1o * G1i; - - /* eq. 20 */ - float common = D * 0.25f / cosNO; - - float FH = schlick_fresnel(dot(omega_in, m)); - float3 F = (0.04f * (1.0f - FH) + 1.0f * FH) * 0.25f * bsdf->clearcoat * make_float3(1.0f, 1.0f, 1.0f); // lerp(make_float3(0.04f, 0.04f, 0.04f), make_float3(1.0f, 1.0f, 1.0f), FH); - - float3 out = F * G * common; - - /* eq. 2 in distribution of visible normals sampling - * pm = Dw = G1o * dot(m, I) * D / dot(N, I); */ - - /* eq. 38 - but see also: - * eq. 17 in http://www.graphics.cornell.edu/~bjw/wardnotes.pdf - * pdf = pm * 0.25 / dot(m, I); */ - *pdf = G1o * common; - - return out; - } - } - - return make_float3(0.0f, 0.0f, 0.0f); -} - -ccl_device float3 bsdf_disney_clearcoat_eval_transmit(const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf) -{ - return make_float3(0.0f, 0.0f, 0.0f); -} - -ccl_device int bsdf_disney_clearcoat_sample(const ShaderClosure *sc, - float3 Ng, float3 I, float3 dIdx, float3 dIdy, float randu, float randv, - float3 *eval, float3 *omega_in, float3 *domega_in_dx, - float3 *domega_in_dy, float *pdf) -{ - const DisneyClearcoatBsdf *bsdf = (const DisneyClearcoatBsdf *)sc; - - if (bsdf->clearcoat > 0.0f) { - float alpha = bsdf->clearcoatRoughness; - float3 N = bsdf->N; - - float cosNO = dot(N, I); - if (cosNO > 0) { - float3 X, Y, Z = N; - - make_orthonormals(Z, &X, &Y); - - /* importance sampling with distribution of visible normals. vectors are - * transformed to local space before and after */ - float3 local_I = make_float3(dot(X, I), dot(Y, I), cosNO); - float3 local_m; - float3 m; - float G1o; - - local_m = importance_sample_microfacet_stretched(local_I, alpha, alpha, - randu, randv, false, &G1o); - - m = X*local_m.x + Y*local_m.y + Z*local_m.z; - float cosThetaM = local_m.z; - - /* reflection or refraction? */ - float cosMO = dot(m, I); - - if (cosMO > 0) { - /* eq. 39 - compute actual reflected direction */ - *omega_in = 2 * cosMO * m - I; - - if (dot(Ng, *omega_in) > 0) { - if (alpha <= 1e-4f) { - /* some high number for MIS */ - *pdf = 1e6f; - *eval = make_float3(1e6f, 1e6f, 1e6f); - } - else { - /* microfacet normal is visible to this ray */ - /* eq. 33 */ - float alpha2 = alpha * alpha; - float D, G1i; - - float cosThetaM2 = cosThetaM * cosThetaM; - D = (alpha2 - 1) / (M_PI_F * logf(alpha2) * (1 + (alpha2 - 1) * cosThetaM2)); - - /* eval BRDF*cosNI */ - float cosNI = dot(N, *omega_in); - - /* eq. 34: now calculate G1(i,m) */ - G1o = 2 / (1 + safe_sqrtf(1 + 0.0625f * (1 - cosNO * cosNO) / (cosNO * cosNO))); - G1i = 2 / (1 + safe_sqrtf(1 + 0.0625f * (1 - cosNI * cosNI) / (cosNI * cosNI))); - - /* see eval function for derivation */ - float common = (G1o * D) * 0.25f / cosNO; - *pdf = common; - - float FH = schlick_fresnel(dot(*omega_in, m)); - float3 F = make_float3(0.04f, 0.04f, 0.04f) * (1.0f - FH) + make_float3(1.0f, 1.0f, 1.0f) * FH; // lerp(make_float3(0.04f, 0.04f, 0.04f), make_float3(1.0f, 1.0f, 1.0f), FH); - - *eval = G1i * common * F * 0.25f * bsdf->clearcoat; - } - -#ifdef __RAY_DIFFERENTIALS__ - *domega_in_dx = (2 * dot(m, dIdx)) * m - dIdx; - *domega_in_dy = (2 * dot(m, dIdy)) * m - dIdy; -#endif - } - } - } - } - - return LABEL_REFLECT|LABEL_GLOSSY; -} - -CCL_NAMESPACE_END - -#endif /* __BSDF_DISNEY_CLEARCOAT_H__ */ - diff --git a/intern/cycles/kernel/closure/bsdf_disney_specular.h b/intern/cycles/kernel/closure/bsdf_disney_specular.h deleted file mode 100644 index b83bb2920fa..00000000000 --- a/intern/cycles/kernel/closure/bsdf_disney_specular.h +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Adapted from Open Shading Language with this license: - * - * Copyright (c) 2009-2010 Sony Pictures Imageworks Inc., et al. - * All Rights Reserved. - * - * Modifications Copyright 2011, Blender Foundation. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Sony Pictures Imageworks nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __BSDF_DISNEY_SPECULAR_H__ -#define __BSDF_DISNEY_SPECULAR_H__ - -CCL_NAMESPACE_BEGIN - -typedef ccl_addr_space struct DisneySpecularExtra { - float3 T, baseColor, cspec0; - bool alpha_x, alpha_y, rough_g, ior; -} DisneySpecularExtra; - -typedef ccl_addr_space struct DisneySpecularBsdf { - SHADER_CLOSURE_BASE; - - float specular, specularTint, roughness, metallic, anisotropic; - float3 N; - DisneySpecularExtra *extra; -} DisneySpecularBsdf; - -ccl_device int bsdf_disney_specular_setup(DisneySpecularBsdf *bsdf) -{ - float m_cdlum = 0.3f * bsdf->extra->baseColor.x + 0.6f * bsdf->extra->baseColor.y + 0.1f * bsdf->extra->baseColor.z; // luminance approx. - - float3 m_ctint = m_cdlum > 0.0f ? bsdf->extra->baseColor / m_cdlum : make_float3(1.0f, 1.0f, 1.0f); // normalize lum. to isolate hue+sat - - float3 tmp_col = make_float3(1.0f, 1.0f, 1.0f) * (1.0f - bsdf->specularTint) + m_ctint * bsdf->specularTint; // lerp(make_float3(1.0f, 1.0f, 1.0f), m_ctint, sc->data2/*specularTint*/); - bsdf->extra->cspec0 = (bsdf->specular * 0.08f * tmp_col) * (1.0f - bsdf->metallic) + bsdf->extra->baseColor * bsdf->metallic; // lerp(sc->data1/*specular*/ * 0.08f * tmp_col, sc->color0/*baseColor*/, sc->data0/*metallic*/); - - float aspect = safe_sqrtf(1.0f - bsdf->anisotropic * 0.9f); - float r2 = sqr(bsdf->roughness); - - /* ax */ - bsdf->extra->alpha_x = fmaxf(0.001f, r2 / aspect); - - /* ay */ - bsdf->extra->alpha_y = fmaxf(0.001f, r2 * aspect); - - /* rough_g */ - bsdf->extra->rough_g = sqr(bsdf->roughness * 0.5f + 0.5f); - - bsdf->type = CLOSURE_BSDF_DISNEY_SPECULAR_ID; - return SD_BSDF|SD_BSDF_HAS_EVAL; -} - -ccl_device float3 bsdf_disney_specular_eval_reflect(const ShaderClosure *sc, const float3 I, - const float3 omega_in, float *pdf) -{ - const DisneySpecularBsdf *bsdf = (const DisneySpecularBsdf *)sc; - - float3 N = bsdf->N; - - if (bsdf->extra->alpha_x*bsdf->extra->alpha_y <= 1e-7f) - return make_float3(0.0f, 0.0f, 0.0f); - - float cosNO = dot(N, I); - float cosNI = dot(N, omega_in); - - if (cosNI > 0 && cosNO > 0) { - /* get half vector */ - float3 m = normalize(omega_in + I); - float alpha2 = bsdf->extra->alpha_x * bsdf->extra->alpha_y; - float D, G1o, G1i; - - if (bsdf->extra->alpha_x == bsdf->extra->alpha_y) { - /* isotropic - * eq. 20: (F*G*D)/(4*in*on) - * eq. 33: first we calculate D(m) */ - float cosThetaM = dot(N, m); - float cosThetaM2 = cosThetaM * cosThetaM; - float cosThetaM4 = cosThetaM2 * cosThetaM2; - float tanThetaM2 = (1 - cosThetaM2) / cosThetaM2; - D = alpha2 / (M_PI_F * cosThetaM4 * (alpha2 + tanThetaM2) * (alpha2 + tanThetaM2)); - - /* eq. 34: now calculate G1(i,m) and G1(o,m) */ - G1o = 2 / (1 + safe_sqrtf(1 + alpha2 * (1 - cosNO * cosNO) / (cosNO * cosNO))); - G1i = 2 / (1 + safe_sqrtf(1 + alpha2 * (1 - cosNI * cosNI) / (cosNI * cosNI))); - } - else { - /* anisotropic */ - float3 X, Y, Z = N; - make_orthonormals_tangent(Z, bsdf->extra->T, &X, &Y); - - // distribution - float3 local_m = make_float3(dot(X, m), dot(Y, m), dot(Z, m)); - float slope_x = -local_m.x/(local_m.z*bsdf->extra->alpha_x); - float slope_y = -local_m.y/(local_m.z*bsdf->extra->alpha_y); - float slope_len = 1 + slope_x*slope_x + slope_y*slope_y; - - float cosThetaM = local_m.z; - float cosThetaM2 = cosThetaM * cosThetaM; - float cosThetaM4 = cosThetaM2 * cosThetaM2; - - D = 1 / ((slope_len * slope_len) * M_PI_F * alpha2 * cosThetaM4); - - /* G1(i,m) and G1(o,m) */ - float tanThetaO2 = (1 - cosNO * cosNO) / (cosNO * cosNO); - float cosPhiO = dot(I, X); - float sinPhiO = dot(I, Y); - - float alphaO2 = (cosPhiO*cosPhiO)*(bsdf->extra->alpha_x*bsdf->extra->alpha_x) + (sinPhiO*sinPhiO)*(bsdf->extra->alpha_y*bsdf->extra->alpha_y); - alphaO2 /= cosPhiO*cosPhiO + sinPhiO*sinPhiO; - - G1o = 2 / (1 + safe_sqrtf(1 + alphaO2 * tanThetaO2)); - - float tanThetaI2 = (1 - cosNI * cosNI) / (cosNI * cosNI); - float cosPhiI = dot(omega_in, X); - float sinPhiI = dot(omega_in, Y); - - float alphaI2 = (cosPhiI*cosPhiI)*(bsdf->extra->alpha_x*bsdf->extra->alpha_x) + (sinPhiI*sinPhiI)*(bsdf->extra->alpha_y*bsdf->extra->alpha_y); - alphaI2 /= cosPhiI*cosPhiI + sinPhiI*sinPhiI; - - G1i = 2 / (1 + safe_sqrtf(1 + alphaI2 * tanThetaI2)); - } - - float G = G1o * G1i; - - /* eq. 20 */ - float common = D * 0.25f / cosNO; - - float FH = schlick_fresnel(dot(omega_in, m)); - float3 F = bsdf->extra->cspec0 * (1.0f - FH) + make_float3(1.0f, 1.0f, 1.0f) * FH; // lerp(sc->custom_color0, make_float3(1.0f, 1.0f, 1.0f), FH); - - float3 out = F * G * common; - - /* eq. 2 in distribution of visible normals sampling - * pm = Dw = G1o * dot(m, I) * D / dot(N, I); */ - - /* eq. 38 - but see also: - * eq. 17 in http://www.graphics.cornell.edu/~bjw/wardnotes.pdf - * pdf = pm * 0.25 / dot(m, I); */ - *pdf = G1o * common; - - return out; - } - - return make_float3(0.0f, 0.0f, 0.0f); -} - -ccl_device float3 bsdf_disney_specular_eval_transmit(const ShaderClosure *sc, const float3 I, - const float3 omega_in, float *pdf) -{ - return make_float3(0.0f, 0.0f, 0.0f); -} - -ccl_device int bsdf_disney_specular_sample(const ShaderClosure *sc, - float3 Ng, float3 I, float3 dIdx, float3 dIdy, float randu, float randv, - float3 *eval, float3 *omega_in, float3 *domega_in_dx, - float3 *domega_in_dy, float *pdf) -{ - const DisneySpecularBsdf *bsdf = (const DisneySpecularBsdf *)sc; - - float3 N = bsdf->N; - - float cosNO = dot(N, I); - if(cosNO > 0) { - float3 X, Y, Z = N; - - if (bsdf->extra->alpha_x == bsdf->extra->alpha_y) - make_orthonormals(Z, &X, &Y); - else - make_orthonormals_tangent(Z, bsdf->extra->T, &X, &Y); - - /* importance sampling with distribution of visible normals. vectors are - * transformed to local space before and after */ - float3 local_I = make_float3(dot(X, I), dot(Y, I), cosNO); - float3 local_m; - float G1o; - - local_m = importance_sample_microfacet_stretched(local_I, bsdf->extra->alpha_x, bsdf->extra->alpha_y, - randu, randv, false, &G1o); - - float3 m = X*local_m.x + Y*local_m.y + Z*local_m.z; - float cosThetaM = local_m.z; - - float cosMO = dot(m, I); - - if(cosMO > 0) { - /* eq. 39 - compute actual reflected direction */ - *omega_in = 2 * cosMO * m - I; - - if(dot(Ng, *omega_in) > 0) { - if (bsdf->extra->alpha_x*bsdf->extra->alpha_y <= 1e-7f) { - /* some high number for MIS */ - *pdf = 1e6f; - *eval = make_float3(1e6f, 1e6f, 1e6f); - } - else { - /* microfacet normal is visible to this ray */ - /* eq. 33 */ - float alpha2 = bsdf->extra->alpha_x * bsdf->extra->alpha_y; - float D, G1i; - - if (bsdf->extra->alpha_x == bsdf->extra->alpha_y) { - float cosThetaM2 = cosThetaM * cosThetaM; - float cosThetaM4 = cosThetaM2 * cosThetaM2; - float tanThetaM2 = 1/(cosThetaM2) - 1; - D = alpha2 / (M_PI_F * cosThetaM4 * (alpha2 + tanThetaM2) * (alpha2 + tanThetaM2)); - - /* eval BRDF*cosNI */ - float cosNI = dot(N, *omega_in); - - /* eq. 34: now calculate G1(i,m) */ - G1i = 2 / (1 + safe_sqrtf(1 + alpha2 * (1 - cosNI * cosNI) / (cosNI * cosNI))); - } - else { - /* anisotropic distribution */ - float slope_x = -local_m.x / (local_m.z*bsdf->extra->alpha_x); - float slope_y = -local_m.y / (local_m.z*bsdf->extra->alpha_y); - float slope_len = 1 + slope_x*slope_x + slope_y*slope_y; - - float cosThetaM = local_m.z; - float cosThetaM2 = cosThetaM * cosThetaM; - float cosThetaM4 = cosThetaM2 * cosThetaM2; - - D = 1 / ((slope_len * slope_len) * M_PI_F * alpha2 * cosThetaM4); - - /* calculate G1(i,m) */ - float cosNI = dot(N, *omega_in); - - float tanThetaI2 = (1 - cosNI * cosNI) / (cosNI * cosNI); - float cosPhiI = dot(*omega_in, X); - float sinPhiI = dot(*omega_in, Y); - - float alphaI2 = (cosPhiI*cosPhiI)*(bsdf->extra->alpha_x*bsdf->extra->alpha_x) + (sinPhiI*sinPhiI)*(bsdf->extra->alpha_y*bsdf->extra->alpha_y); - alphaI2 /= cosPhiI*cosPhiI + sinPhiI*sinPhiI; - - G1i = 2 / (1 + safe_sqrtf(1 + alphaI2 * tanThetaI2)); - } - - /* see eval function for derivation */ - float common = (G1o * D) * 0.25f / cosNO; - *pdf = common; - - float FH = fresnel_dielectric_cos(dot(*omega_in, m), bsdf->extra->ior); - //float FH = schlick_fresnel(dot(*omega_in, m)); - float3 F = bsdf->extra->cspec0 * (1.0f - FH) + make_float3(1.0f, 1.0f, 1.0f) * FH; // lerp(sc->custom_color0, make_float3(1.0f, 1.0f, 1.0f), FH); - - *eval = G1i * common * F; - } - -#ifdef __RAY_DIFFERENTIALS__ - *domega_in_dx = (2 * dot(m, dIdx)) * m - dIdx; - *domega_in_dy = (2 * dot(m, dIdy)) * m - dIdy; -#endif - } - } - } - - return LABEL_REFLECT|LABEL_GLOSSY; -} - -CCL_NAMESPACE_END - -#endif /* __BSDF_DISNEY_SPECULAR_H__ */ - diff --git a/intern/cycles/kernel/osl/bsdf_disney_clearcoat.cpp b/intern/cycles/kernel/osl/bsdf_disney_clearcoat.cpp deleted file mode 100644 index 4786ece9832..00000000000 --- a/intern/cycles/kernel/osl/bsdf_disney_clearcoat.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Adapted from Open Shading Language with this license: - * - * Copyright (c) 2009-2010 Sony Pictures Imageworks Inc., et al. - * All Rights Reserved. - * - * Modifications Copyright 2011, Blender Foundation. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Sony Pictures Imageworks nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*#include <OpenImageIO/fmath.h> - -#include <OSL/genclosure.h> - -#include "kernel_compat_cpu.h" -#include "osl_closures.h" - -#include "kernel_types.h" -#include "closure/bsdf_disney_clearcoat.h" - -CCL_NAMESPACE_BEGIN - -using namespace OSL; - -class DisneyClearcoatClosure : public CBSDFClosure { -public: - DisneyClearcoatClosure() : CBSDFClosure(LABEL_REFLECT|LABEL_GLOSSY) - {} - - void setup() - { - sc.prim = this; - m_shaderdata_flag = bsdf_disney_clearcoat_setup(&sc); - } - - void blur(float roughness) - { - } - - float3 eval_reflect(const float3 &omega_out, const float3 &omega_in, float& pdf) const - { - return bsdf_disney_clearcoat_eval_reflect(&sc, omega_out, omega_in, &pdf); - } - - float3 eval_transmit(const float3 &omega_out, const float3 &omega_in, float& pdf) const - { - return bsdf_disney_clearcoat_eval_transmit(&sc, omega_out, omega_in, &pdf); - } - - int sample(const float3 &Ng, - const float3 &omega_out, const float3 &domega_out_dx, const float3 &domega_out_dy, - float randu, float randv, - float3 &omega_in, float3 &domega_in_dx, float3 &domega_in_dy, - float &pdf, float3 &eval) const - { - return bsdf_disney_clearcoat_sample(&sc, Ng, omega_out, domega_out_dx, domega_out_dy, - randu, randv, &eval, &omega_in, &domega_in_dx, &domega_in_dy, &pdf); - } -}; - -ClosureParam *closure_bsdf_disney_clearcoat_params() -{ - static ClosureParam params[] = { - CLOSURE_FLOAT3_PARAM(DisneyClearcoatClosure, sc.N), - CLOSURE_FLOAT_PARAM(DisneyClearcoatClosure, sc.data0), // clearcoat - CLOSURE_FLOAT_PARAM(DisneyClearcoatClosure, sc.data1), // clearcoatGloss - CLOSURE_STRING_KEYPARAM(DisneyClearcoatClosure, label, "label"), - CLOSURE_FINISH_PARAM(DisneyClearcoatClosure) - }; - return params; -} - -CCLOSURE_PREPARE(closure_bsdf_disney_clearcoat_prepare, DisneyClearcoatClosure) - -CCL_NAMESPACE_END*/ - diff --git a/intern/cycles/kernel/osl/bsdf_disney_diffuse.cpp b/intern/cycles/kernel/osl/bsdf_disney_diffuse.cpp deleted file mode 100644 index 4d6503ad215..00000000000 --- a/intern/cycles/kernel/osl/bsdf_disney_diffuse.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Adapted from Open Shading Language with this license: - * - * Copyright (c) 2009-2010 Sony Pictures Imageworks Inc., et al. - * All Rights Reserved. - * - * Modifications Copyright 2011, Blender Foundation. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Sony Pictures Imageworks nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*#include <OpenImageIO/fmath.h> - -#include <OSL/genclosure.h> - -#include "kernel_compat_cpu.h" -#include "osl_closures.h" - -#include "kernel_types.h" -#include "kernel_montecarlo.h" -#include "closure/bsdf_disney_diffuse.h" - -CCL_NAMESPACE_BEGIN - -using namespace OSL; - -class DisneyDiffuseClosure : public CBSDFClosure { -public: - DisneyDiffuseClosure() : CBSDFClosure(LABEL_DIFFUSE) - {} - - void setup() - { - sc.prim = this; - m_shaderdata_flag = bsdf_disney_diffuse_setup(&sc); - } - - void blur(float roughness) - { - } - - float3 eval_reflect(const float3 &omega_out, const float3 &omega_in, float& pdf) const - { - return bsdf_disney_diffuse_eval_reflect(&sc, omega_out, omega_in, &pdf); - } - - float3 eval_transmit(const float3 &omega_out, const float3 &omega_in, float& pdf) const - { - return bsdf_disney_diffuse_eval_transmit(&sc, omega_out, omega_in, &pdf); - } - - int sample(const float3 &Ng, const float3 &omega_out, const float3 &domega_out_dx, - const float3 &domega_out_dy, float randu, float randv, float3 &omega_in, - float3 &domega_in_dx, float3 &domega_in_dy, float &pdf, float3 &eval) const - { - return bsdf_disney_diffuse_sample(&sc, Ng, omega_out, domega_out_dx, domega_out_dy, - randu, randv, &eval, &omega_in, &domega_in_dx, &domega_in_dy, &pdf); - } -}; - -ClosureParam *closure_bsdf_disney_diffuse_params() -{ - static ClosureParam params[] = { - CLOSURE_FLOAT3_PARAM(DisneyDiffuseClosure, sc.N), - CLOSURE_FLOAT3_PARAM(DisneyDiffuseClosure, sc.color0), // base color - CLOSURE_FLOAT_PARAM(DisneyDiffuseClosure, sc.data0), // subsurface - CLOSURE_FLOAT_PARAM(DisneyDiffuseClosure, sc.data1), // roughness - CLOSURE_FLOAT_PARAM(DisneyDiffuseClosure, sc.data2), // sheen - CLOSURE_FLOAT_PARAM(DisneyDiffuseClosure, sc.data3), // sheenTint - CLOSURE_STRING_KEYPARAM(DisneyDiffuseClosure, label, "label"), - CLOSURE_FINISH_PARAM(DisneyDiffuseClosure) - }; - return params; -} - -CCLOSURE_PREPARE(closure_bsdf_disney_diffuse_prepare, DisneyDiffuseClosure) - -CCL_NAMESPACE_END*/ - diff --git a/intern/cycles/kernel/osl/bsdf_disney_specular.cpp b/intern/cycles/kernel/osl/bsdf_disney_specular.cpp deleted file mode 100644 index af4737f0585..00000000000 --- a/intern/cycles/kernel/osl/bsdf_disney_specular.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Adapted from Open Shading Language with this license: - * - * Copyright (c) 2009-2010 Sony Pictures Imageworks Inc., et al. - * All Rights Reserved. - * - * Modifications Copyright 2011, Blender Foundation. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Sony Pictures Imageworks nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*#include <OpenImageIO/fmath.h> - -#include <OSL/genclosure.h> - -#include "kernel_compat_cpu.h" -#include "osl_closures.h" - -#include "kernel_types.h" -#include "kernel_montecarlo.h" -#include "closure/bsdf_disney_specular.h" - -CCL_NAMESPACE_BEGIN - -using namespace OSL; - -class DisneySpecularClosure : public CBSDFClosure { -public: - DisneySpecularClosure() : CBSDFClosure(LABEL_REFLECT|LABEL_GLOSSY) - {} - - void setup() - { - sc.prim = this; - m_shaderdata_flag = bsdf_disney_specular_setup(&sc); - } - - void blur(float roughness) - { - } - - float3 eval_reflect(const float3 &omega_out, const float3 &omega_in, float& pdf) const - { - return bsdf_disney_specular_eval_reflect(&sc, omega_out, omega_in, &pdf); - } - - float3 eval_transmit(const float3 &omega_out, const float3 &omega_in, float& pdf) const - { - return bsdf_disney_specular_eval_transmit(&sc, omega_out, omega_in, &pdf); - } - - int sample(const float3 &Ng, const float3 &omega_out, const float3 &domega_out_dx, - const float3 &domega_out_dy, float randu, float randv, float3 &omega_in, - float3 &domega_in_dx, float3 &domega_in_dy, float &pdf, float3 &eval) const - { - return bsdf_disney_specular_sample(&sc, Ng, omega_out, domega_out_dx, domega_out_dy, - randu, randv, &eval, &omega_in, &domega_in_dx, &domega_in_dy, &pdf); - } -}; - -ClosureParam *closure_bsdf_disney_specular_params() -{ - static ClosureParam params[] = { - CLOSURE_FLOAT3_PARAM(DisneySpecularClosure, sc.N), - CLOSURE_FLOAT3_PARAM(DisneySpecularClosure, sc.T), - CLOSURE_FLOAT3_PARAM(DisneySpecularClosure, sc.color0), // base color - CLOSURE_FLOAT_PARAM(DisneySpecularClosure, sc.data0), // metallic - CLOSURE_FLOAT_PARAM(DisneySpecularClosure, sc.data1), // specular - CLOSURE_FLOAT_PARAM(DisneySpecularClosure, sc.data2), // specularTint - CLOSURE_FLOAT_PARAM(DisneySpecularClosure, sc.data3), // roughness - CLOSURE_FLOAT_PARAM(DisneySpecularClosure, sc.data4), // anisotropic - CLOSURE_STRING_KEYPARAM(DisneySpecularClosure, label, "label"), - CLOSURE_FINISH_PARAM(DisneySpecularClosure) - }; - return params; -} - -CCLOSURE_PREPARE(closure_bsdf_disney_specular_prepare, DisneySpecularClosure) - -CCL_NAMESPACE_END*/ - diff --git a/intern/cycles/kernel/osl/osl_closures.cpp b/intern/cycles/kernel/osl/osl_closures.cpp index 8f22218673f..e79ddbd9b5b 100644 --- a/intern/cycles/kernel/osl/osl_closures.cpp +++ b/intern/cycles/kernel/osl/osl_closures.cpp @@ -61,8 +61,6 @@ #include "closure/bsdf_hair.h" #include "closure/bsdf_disney_diffuse.h" #include "closure/bsdf_disney_sheen.h" -#include "closure/bsdf_disney_specular.h" -#include "closure/bsdf_disney_clearcoat.h" #include "closure/volume.h" CCL_NAMESPACE_BEGIN diff --git a/intern/cycles/kernel/osl/osl_closures.h b/intern/cycles/kernel/osl/osl_closures.h index e924541a31d..ae0ba7704aa 100644 --- a/intern/cycles/kernel/osl/osl_closures.h +++ b/intern/cycles/kernel/osl/osl_closures.h @@ -62,7 +62,6 @@ OSL::ClosureParam *closure_bsdf_microfacet_ggx_aniso_fresnel_params(); OSL::ClosureParam *closure_bsdf_microfacet_multi_ggx_fresnel_params(); OSL::ClosureParam *closure_bsdf_microfacet_multi_ggx_glass_fresnel_params(); OSL::ClosureParam *closure_bsdf_microfacet_multi_ggx_aniso_fresnel_params(); -OSL::ClosureParam *closure_bsdf_disney_specular_params(); void closure_emission_prepare(OSL::RendererServices *, int id, void *data); void closure_background_prepare(OSL::RendererServices *, int id, void *data); @@ -84,7 +83,6 @@ void closure_bsdf_microfacet_ggx_aniso_fresnel_prepare(OSL::RendererServices *, void closure_bsdf_microfacet_multi_ggx_fresnel_prepare(OSL::RendererServices *, int id, void *data); void closure_bsdf_microfacet_multi_ggx_glass_fresnel_prepare(OSL::RendererServices *, int id, void *data); void closure_bsdf_microfacet_multi_ggx_aniso_fresnel_prepare(OSL::RendererServices *, int id, void *data); -void closure_bsdf_disney_specular_prepare(OSL::RendererServices *, int id, void *data); #define CCLOSURE_PREPARE(name, classname) \ void name(RendererServices *, int id, void *data) \ diff --git a/intern/cycles/kernel/shaders/stdosl.h b/intern/cycles/kernel/shaders/stdosl.h index 23f5db2313e..ed2ea2d065b 100644 --- a/intern/cycles/kernel/shaders/stdosl.h +++ b/intern/cycles/kernel/shaders/stdosl.h @@ -547,8 +547,6 @@ closure color holdout() BUILTIN; closure color ambient_occlusion() BUILTIN; closure color disney_diffuse(normal N, color baseColor, float roughness) BUILTIN; closure color disney_sheen(normal N, color baseColor, float sheen, float sheenTint) BUILTIN; -closure color disney_specular(normal N, normal T, color baseColor, float metallic, float specular, float specularTint, - float roughness, float anisotropic) BUILTIN; closure color disney_clearcoat(normal N, float clearcoat, float clearcoatGloss) BUILTIN; // BSSRDF |