SVM and OSL are both working for the simple version of the Disney BRDF
This commit is contained in:
@@ -14,7 +14,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "../closure/bsdf_util.h"
|
||||
#include "../closure/bsdf_ashikhmin_velvet.h"
|
||||
#include "../closure/bsdf_diffuse.h"
|
||||
#include "../closure/bsdf_oren_nayar.h"
|
||||
|
||||
@@ -39,7 +39,7 @@ CCL_NAMESPACE_BEGIN
|
||||
ccl_device int bsdf_disney_clearcoat_setup(ShaderClosure *sc)
|
||||
{
|
||||
/* clearcoat roughness */
|
||||
sc->custom1 = 0.1f * (1.0f - sc->data1) + 0.001f * sc->data1; // mix(0.1f, 0.001f, sc->data1)
|
||||
sc->custom1 = lerp(0.1f, 0.001f, sc->data1/*clearcoatGloss*/); // 0.1f * (1.0f - sc->data1) + 0.001f * sc->data1;
|
||||
|
||||
sc->type = CLOSURE_BSDF_DISNEY_CLEARCOAT_ID;
|
||||
return SD_BSDF|SD_BSDF_HAS_EVAL;
|
||||
@@ -83,10 +83,13 @@ ccl_device float3 bsdf_disney_clearcoat_eval_reflect(const ShaderClosure *sc, co
|
||||
/* eq. 20 */
|
||||
float common = D * 0.25f / cosNO;
|
||||
|
||||
/*float u = clamp(1.0f - dot(omega_in, m), 0.0f, 1.0f);
|
||||
float u2 = u * u;
|
||||
float FH = u2 * u2 * u;*/
|
||||
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; // mix(make_float3(0.04f, 0.04f, 0.04f), make_float3(1.0f, 1.0f, 1.0f), FH);
|
||||
float3 F = lerp(make_float3(0.04f, 0.04f, 0.04f), make_float3(1.0f, 1.0f, 1.0f), FH); // make_float3(0.04f, 0.04f, 0.04f) * (1.0f - FH) + make_float3(1.0f, 1.0f, 1.0f) * FH;
|
||||
|
||||
float3 out = F * G * common * 0.25f * sc->data0;
|
||||
float3 out = F * G * common * 0.25f * sc->data0/*clearcoat*/;
|
||||
|
||||
/* eq. 2 in distribution of visible normals sampling
|
||||
* pm = Dw = G1o * dot(m, I) * D / dot(N, I); */
|
||||
@@ -172,10 +175,13 @@ ccl_device int bsdf_disney_clearcoat_sample(const ShaderClosure *sc,
|
||||
float common = (G1o * D) * 0.25f / cosNO;
|
||||
*pdf = common;
|
||||
|
||||
/*float u = clamp(1.0f - dot(*omega_in, m), 0.0f, 1.0f);
|
||||
float u2 = u * u;
|
||||
float FH = u2 * u2 * u;*/
|
||||
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; // mix(make_float3(0.04f, 0.04f, 0.04f), make_float3(1.0f, 1.0f, 1.0f), FH)
|
||||
float3 F = lerp(make_float3(0.04f, 0.04f, 0.04f), make_float3(1.0f, 1.0f, 1.0f), FH); // make_float3(0.04f, 0.04f, 0.04f) * (1.0f - FH) + make_float3(1.0f, 1.0f, 1.0f) * FH;
|
||||
|
||||
*eval = G1i * common * F * 0.25f * sc->data0;
|
||||
*eval = G1i * common * F * 0.25f * sc->data0/*clearcoat*/;
|
||||
}
|
||||
|
||||
#ifdef __RAY_DIFFERENTIALS__
|
||||
|
||||
@@ -34,8 +34,6 @@
|
||||
#ifndef __BSDF_DISNEY_DIFFUSE_H__
|
||||
#define __BSDF_DISNEY_DIFFUSE_H__
|
||||
|
||||
#include "closure/bsdf_util.h"
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
|
||||
@@ -55,27 +53,27 @@ ccl_device float3 calculate_disney_diffuse_brdf(const ShaderClosure *sc,
|
||||
float Fd = 0.0f;
|
||||
float FL = schlick_fresnel(NdotL), FV = schlick_fresnel(NdotV);
|
||||
|
||||
if (sc->data0 != 1.0f) {
|
||||
const float Fd90 = 0.5f + 2.0f * LdotH*LdotH * sc->data1;
|
||||
Fd = (1.0f * (1.0f - FL) + Fd90 * FL) * (1.0f * (1.0f - FV) + Fd90 * FV); // mix(1.0f, Fd90, FL) * mix(1.0f, Fd90, FV)
|
||||
if (sc->data0/*subsurface*/ != 1.0f) {
|
||||
const float Fd90 = 0.5f + 2.0f * LdotH*LdotH * sc->data1/*roughness*/;
|
||||
Fd = lerp(1.0f, Fd90, FL) * lerp(1.0f, Fd90, FV); // (1.0f * (1.0f - FL) + Fd90 * FL) * (1.0f * (1.0f - FV) + Fd90 * FV);
|
||||
}
|
||||
|
||||
if (sc->data0 > 0.0f) {
|
||||
float Fss90 = LdotH*LdotH * sc->data1;
|
||||
float Fss = (1.0f * (1.0f - FL) + Fss90 * FL) * (1.0f * (1.0f - FV) + Fss90 * FV); // mix(1.0f, Fss90, FL) * mix(1.0f, Fss90, FV)
|
||||
if (sc->data0/*subsurface*/ > 0.0f) {
|
||||
float Fss90 = LdotH*LdotH * sc->data1/*roughness*/;
|
||||
float Fss = lerp(1.0f, Fss90, FL) * lerp(1.0f, Fss90, FV); // (1.0f * (1.0f - FL) + Fss90 * FL) * (1.0f * (1.0f - FV) + Fss90 * FV);
|
||||
float ss = 1.25f * (Fss * (1.0f / (NdotL + NdotV) - 0.5f) + 0.5f);
|
||||
Fd = (Fd * (1.0f - sc->data0) + ss * sc->data0); // mix(Fd, ss, sc->data0)
|
||||
Fd = lerp(Fd, ss, sc->data0/*subsurface*/); // (Fd * (1.0f - sc->data0) + ss * sc->data0);
|
||||
}
|
||||
|
||||
float3 value = M_1_PI_F * Fd * sc->color0;
|
||||
float3 value = M_1_PI_F * Fd * sc->color0/*baseColor*/;
|
||||
|
||||
*pdf = M_1_PI_F * 0.5f;
|
||||
|
||||
// sheen component
|
||||
if (sc->data2 != 0.0f) {
|
||||
if (sc->data2/*sheen*/ != 0.0f) {
|
||||
float FH = schlick_fresnel(LdotH);
|
||||
|
||||
value += FH * sc->data2 * sc->custom_color0;
|
||||
value += FH * sc->data2/*sheen*/ * sc->custom_color0/*baseColor*/;
|
||||
}
|
||||
|
||||
value *= NdotL;
|
||||
@@ -90,7 +88,7 @@ ccl_device int bsdf_disney_diffuse_setup(ShaderClosure *sc)
|
||||
float3 m_ctint = m_cdlum > 0.0f ? sc->color0 / m_cdlum : make_float3(1.0f, 1.0f, 1.0f); // normalize lum. to isolate hue+sat
|
||||
|
||||
/* csheen0 */
|
||||
sc->custom_color0 = make_float3(1.0f, 1.0f, 1.0f) * (1.0f - sc->data3) + m_ctint * sc->data3; // mix(make_float3(1.0f, 1.0f, 1.0f), m_ctint, sc->data3)
|
||||
sc->custom_color0 = lerp(make_float3(1.0f, 1.0f, 1.0f), m_ctint, sc->data3/*sheenTint*/); // make_float3(1.0f, 1.0f, 1.0f) * (1.0f - sc->data3) + m_ctint * sc->data3;
|
||||
|
||||
sc->type = CLOSURE_BSDF_DISNEY_DIFFUSE_ID;
|
||||
return SD_BSDF|SD_BSDF_HAS_EVAL;
|
||||
|
||||
@@ -33,8 +33,6 @@
|
||||
#ifndef __BSDF_DISNEY_SPECULAR_H__
|
||||
#define __BSDF_DISNEY_SPECULAR_H__
|
||||
|
||||
#include "closure/bsdf_util.h"
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
|
||||
@@ -42,13 +40,13 @@ ccl_device int bsdf_disney_specular_setup(ShaderClosure *sc)
|
||||
{
|
||||
float m_cdlum = 0.3f * sc->color0[0] + 0.6f * sc->color0[1] + 0.1f * sc->color0[2]; // luminance approx.
|
||||
|
||||
float3 m_ctint = m_cdlum > 0.0f ? sc->color0 / m_cdlum : make_float3(1.0f, 1.0f, 1.0f); // normalize lum. to isolate hue+sat
|
||||
float3 m_ctint = m_cdlum > 0.0f ? sc->color0/*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 - sc->data2) + m_ctint * sc->data2; // mix(make_float3(1.0f, 1.0f, 1.0f), m_ctint, sc->data2);
|
||||
sc->custom_color0 = (sc->data1 * 0.08f * tmp_col) * (1.0f - sc->data0) + sc->color0 * sc->data0; // mix(sc->data1 * 0.08f * tmp_col, sc->color0, sc->data0);
|
||||
float3 tmp_col = lerp(make_float3(1.0f, 1.0f, 1.0f), m_ctint, sc->data2/*specularTint*/); // make_float3(1.0f, 1.0f, 1.0f) * (1.0f - sc->data2) + m_ctint * sc->data2;
|
||||
sc->custom_color0/*cspec0*/ = lerp(sc->data1/*specular*/ * 0.08f * tmp_col, sc->color0/*baseColor*/, sc->data0/*metallic*/); // (sc->data1 * 0.08f * tmp_col) * (1.0f - sc->data0) + sc->color0 * sc->data0;
|
||||
|
||||
float aspect = sqrt(1.0f - sc->data4 * 0.9f);
|
||||
float r2 = sqr(sc->data3);
|
||||
float aspect = safe_sqrtf(1.0f - sc->data4/*anisotropic*/ * 0.9f);
|
||||
float r2 = sqr(sc->data3/*roughness*/);
|
||||
|
||||
/* ax */
|
||||
sc->custom1 = fmaxf(0.001f, r2 / aspect);
|
||||
@@ -57,7 +55,7 @@ ccl_device int bsdf_disney_specular_setup(ShaderClosure *sc)
|
||||
sc->custom2 = fmaxf(0.001f, r2 * aspect);
|
||||
|
||||
/* rough_g */
|
||||
sc->custom3 = sqr(sc->data3 * 0.5f + 0.5f);
|
||||
sc->custom3 = sqr(sc->data3/*roughness*/ * 0.5f + 0.5f);
|
||||
|
||||
sc->type = CLOSURE_BSDF_DISNEY_SPECULAR_ID;
|
||||
return SD_BSDF|SD_BSDF_HAS_EVAL;
|
||||
@@ -138,8 +136,12 @@ ccl_device float3 bsdf_disney_specular_eval_reflect(const ShaderClosure *sc, con
|
||||
/* eq. 20 */
|
||||
float common = D * 0.25f / cosNO;
|
||||
|
||||
/*float u = clamp(1.0f - dot(omega_in, m), 0.0f, 1.0f);
|
||||
float u2 = u * u;
|
||||
float FH = u2 * u2 * u;*/
|
||||
float FH = schlick_fresnel(dot(omega_in, m));
|
||||
float3 F = sc->custom_color0 * (1.0f - FH) + make_float3(1.0f, 1.0f, 1.0f) * FH; // mix(sc->custom_color0, make_float3(1.0f, 1.0f, 1.0f), FH);
|
||||
float3 F = lerp(sc->custom_color0, make_float3(1.0f, 1.0f, 1.0f), FH); // sc->custom_color0 * (1.0f - FH) + make_float3(1.0f, 1.0f, 1.0f) * FH;
|
||||
//printf("%f, %f\n\r", dot(omega_in, m), FH);
|
||||
|
||||
float3 out = F * G * common;
|
||||
|
||||
@@ -254,8 +256,11 @@ ccl_device int bsdf_disney_specular_sample(const ShaderClosure *sc,
|
||||
float common = (G1o * D) * 0.25f / cosNO;
|
||||
*pdf = common;
|
||||
|
||||
/*float u = clamp(1.0f - dot(*omega_in, m), 0.0f, 1.0f);
|
||||
float u2 = u * u;
|
||||
float FH = u2 * u2 * u;*/
|
||||
float FH = schlick_fresnel(dot(*omega_in, m));
|
||||
float3 F = sc->custom_color0 * (1.0f - FH) + make_float3(1.0f, 1.0f, 1.0f) * FH; // mix(sc->custom_color0, make_float3(1.0f, 1.0f, 1.0f), FH);
|
||||
float3 F = lerp(sc->custom_color0, make_float3(1.0f, 1.0f, 1.0f), FH); // sc->custom_color0 * (1.0f - FH) + make_float3(1.0f, 1.0f, 1.0f) * FH;
|
||||
|
||||
*eval = G1i * common * F;
|
||||
}
|
||||
|
||||
@@ -126,14 +126,15 @@ ccl_device float3 fresnel_conductor(float cosi, const float3 eta, const float3 k
|
||||
}
|
||||
#endif
|
||||
|
||||
ccl_device_inline float schlick_fresnel(float u)
|
||||
ccl_device float schlick_fresnel(float u)
|
||||
{
|
||||
float m = clamp(1.0f - u, 0.0f, 1.0f);
|
||||
float m2 = m * m;
|
||||
//printf("%f, %f, %f, %f\n\r", u, m, m2, m2 * m2 * m);
|
||||
return m2 * m2 * m; // pow(m, 5)
|
||||
}
|
||||
|
||||
ccl_device_inline float sqr(float a)
|
||||
ccl_device float sqr(float a)
|
||||
{
|
||||
return a * a;
|
||||
}
|
||||
@@ -150,7 +151,7 @@ ccl_device float smooth_step(float edge0, float edge1, float x)
|
||||
return result;
|
||||
}
|
||||
|
||||
ccl_device_inline void importance_sample_ggx_slopes(
|
||||
ccl_device void importance_sample_ggx_slopes(
|
||||
const float cos_theta_i, const float sin_theta_i,
|
||||
float randu, float randv, float *slope_x, float *slope_y,
|
||||
float *G1i)
|
||||
@@ -199,7 +200,7 @@ ccl_device_inline void importance_sample_ggx_slopes(
|
||||
*slope_y = S * z * safe_sqrtf(1.0f + (*slope_x)*(*slope_x));
|
||||
}
|
||||
|
||||
ccl_device_inline float3 importance_sample_microfacet_stretched(
|
||||
ccl_device float3 importance_sample_microfacet_stretched(
|
||||
const float3 omega_i, const float alpha_x, const float alpha_y,
|
||||
const float randu, const float randv,
|
||||
bool beckmann, float *G1i)
|
||||
|
||||
@@ -168,7 +168,7 @@ BSDF_CLOSURE_CLASS_BEGIN(HairTransmission, hair_transmission, hair_transmission,
|
||||
CLOSURE_FLOAT_PARAM(HairReflectionClosure, sc.data2),
|
||||
BSDF_CLOSURE_CLASS_END(HairTransmission, hair_transmission)
|
||||
|
||||
BSDF_CLOSURE_CLASS_BEGIN(DisneyDiffuse, disney_diffuse, disney_diffuse, LABEL_DIFFUSE|LABEL_REFLECT)
|
||||
/*BSDF_CLOSURE_CLASS_BEGIN(DisneyDiffuse, disney_diffuse, disney_diffuse, LABEL_DIFFUSE|LABEL_REFLECT)
|
||||
CLOSURE_FLOAT3_PARAM(DisneyDiffuseClosure, sc.N),
|
||||
CLOSURE_FLOAT3_PARAM(DisneyDiffuseClosure, sc.color0), // baseColor
|
||||
CLOSURE_FLOAT_PARAM(DisneyDiffuseClosure, sc.data0), // subsurface
|
||||
@@ -192,7 +192,7 @@ BSDF_CLOSURE_CLASS_BEGIN(DisneyClearcoat, disney_clearcoat, disney_clearcoat, LA
|
||||
CLOSURE_FLOAT3_PARAM(DisneyClearcoatClosure, sc.N),
|
||||
CLOSURE_FLOAT_PARAM(DisneyClearcoatClosure, sc.data0), // clearcoat
|
||||
CLOSURE_FLOAT_PARAM(DisneyClearcoatClosure, sc.data1), // clearcoatGloss
|
||||
BSDF_CLOSURE_CLASS_END(DisneyClearcoat, disney_clearcoat)
|
||||
BSDF_CLOSURE_CLASS_END(DisneyClearcoat, disney_clearcoat)*/
|
||||
|
||||
VOLUME_CLOSURE_CLASS_BEGIN(VolumeHenyeyGreenstein, henyey_greenstein, LABEL_VOLUME_SCATTER)
|
||||
CLOSURE_FLOAT_PARAM(VolumeHenyeyGreensteinClosure, sc.data0),
|
||||
@@ -201,7 +201,7 @@ VOLUME_CLOSURE_CLASS_END(VolumeHenyeyGreenstein, henyey_greenstein)
|
||||
VOLUME_CLOSURE_CLASS_BEGIN(VolumeAbsorption, absorption, LABEL_SINGULAR)
|
||||
VOLUME_CLOSURE_CLASS_END(VolumeAbsorption, absorption)
|
||||
|
||||
/*class DisneyClearcoatClosure : public CBSDFClosure {
|
||||
class DisneyClearcoatClosure : public CBSDFClosure {
|
||||
public:
|
||||
DisneyClearcoatClosure() : CBSDFClosure(LABEL_REFLECT | LABEL_GLOSSY)
|
||||
{}
|
||||
@@ -237,7 +237,7 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
ClosureParam *closure_bsdf_disney_clearcoat_params()
|
||||
ClosureParam *bsdf_disney_clearcoat_params()
|
||||
{
|
||||
static ClosureParam params[] = {
|
||||
CLOSURE_FLOAT3_PARAM(DisneyClearcoatClosure, sc.N),
|
||||
@@ -249,7 +249,7 @@ ClosureParam *closure_bsdf_disney_clearcoat_params()
|
||||
return params;
|
||||
}
|
||||
|
||||
CCLOSURE_PREPARE(closure_bsdf_disney_clearcoat_prepare, DisneyClearcoatClosure)
|
||||
CCLOSURE_PREPARE(bsdf_disney_clearcoat_prepare, DisneyClearcoatClosure)
|
||||
|
||||
class DisneyDiffuseClosure : public CBSDFClosure {
|
||||
public:
|
||||
@@ -285,7 +285,7 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
ClosureParam *closure_bsdf_disney_diffuse_params()
|
||||
ClosureParam *bsdf_disney_diffuse_params()
|
||||
{
|
||||
static ClosureParam params[] = {
|
||||
CLOSURE_FLOAT3_PARAM(DisneyDiffuseClosure, sc.N),
|
||||
@@ -300,7 +300,7 @@ ClosureParam *closure_bsdf_disney_diffuse_params()
|
||||
return params;
|
||||
}
|
||||
|
||||
CCLOSURE_PREPARE(closure_bsdf_disney_diffuse_prepare, DisneyDiffuseClosure)
|
||||
CCLOSURE_PREPARE(bsdf_disney_diffuse_prepare, DisneyDiffuseClosure)
|
||||
|
||||
class DisneySpecularClosure : public CBSDFClosure {
|
||||
public:
|
||||
@@ -336,7 +336,7 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
ClosureParam *closure_bsdf_disney_specular_params()
|
||||
ClosureParam *bsdf_disney_specular_params()
|
||||
{
|
||||
static ClosureParam params[] = {
|
||||
CLOSURE_FLOAT3_PARAM(DisneySpecularClosure, sc.N),
|
||||
@@ -353,7 +353,7 @@ ClosureParam *closure_bsdf_disney_specular_params()
|
||||
return params;
|
||||
}
|
||||
|
||||
CCLOSURE_PREPARE(closure_bsdf_disney_specular_prepare, DisneySpecularClosure)*/
|
||||
CCLOSURE_PREPARE(bsdf_disney_specular_prepare, DisneySpecularClosure)
|
||||
|
||||
/* Registration */
|
||||
|
||||
|
||||
@@ -52,6 +52,9 @@ OSL::ClosureParam *closure_bssrdf_cubic_params();
|
||||
OSL::ClosureParam *closure_bssrdf_gaussian_params();
|
||||
OSL::ClosureParam *closure_bssrdf_burley_params();
|
||||
OSL::ClosureParam *closure_henyey_greenstein_volume_params();
|
||||
/*OSL::ClosureParam *bsdf_disney_diffuse_params();
|
||||
OSL::ClosureParam *bsdf_disney_specular_params();
|
||||
OSL::ClosureParam *bsdf_disney_clearcoat_params();*/
|
||||
|
||||
void closure_emission_prepare(OSL::RendererServices *, int id, void *data);
|
||||
void closure_background_prepare(OSL::RendererServices *, int id, void *data);
|
||||
@@ -63,6 +66,9 @@ void closure_bssrdf_cubic_prepare(OSL::RendererServices *, int id, void *data);
|
||||
void closure_bssrdf_gaussian_prepare(OSL::RendererServices *, int id, void *data);
|
||||
void closure_bssrdf_burley_prepare(OSL::RendererServices *, int id, void *data);
|
||||
void closure_henyey_greenstein_volume_prepare(OSL::RendererServices *, int id, void *data);
|
||||
/*void bsdf_disney_diffuse_prepare(OSL::RendererServices *, int id, void *data);
|
||||
void bsdf_disney_specular_prepare(OSL::RendererServices *, int id, void *data);
|
||||
void bsdf_disney_clearcoat_prepare(OSL::RendererServices *, int id, void *data);*/
|
||||
|
||||
#define CCLOSURE_PREPARE(name, classname) \
|
||||
void name(RendererServices *, int id, void *data) \
|
||||
|
||||
@@ -33,11 +33,25 @@ shader node_disney_bsdf(
|
||||
//normal AnisotropicRotation = normal(0, 0, 0),
|
||||
output closure color BSDF = 0)
|
||||
{
|
||||
if (Metallic == 1.0) {
|
||||
if (Metallic != 1.0) {
|
||||
BSDF = BSDF + disney_diffuse(Normal, BaseColor, Subsurface, Roughness,
|
||||
Sheen, SheenTint) * (1.0 - Metallic);
|
||||
}
|
||||
|
||||
if (Specular != 0.0 || Metallic != 0.0) {
|
||||
BSDF = BSDF + disney_specular(Normal, Tangent, BaseColor, Metallic, Specular,
|
||||
SpecularTint, Roughness, Anisotropic);
|
||||
}
|
||||
|
||||
if (Clearcoat != 0.0) {
|
||||
BSDF = BSDF + disney_clearcoat(Normal, Clearcoat, ClearcoatGloss);
|
||||
}
|
||||
|
||||
/*if (Metallic == 1.0) {
|
||||
BSDF = disney_specular(Normal, Tangent, BaseColor, Metallic, Specular,
|
||||
SpecularTint, Roughness, Anisotropic)
|
||||
+ disney_clearcoat(Normal, Clearcoat, ClearcoatGloss);
|
||||
} else if (Specular == 0.0) {
|
||||
} else if (Specular == 0.0 && Metallic == 0.0) {
|
||||
BSDF = disney_diffuse(Normal, BaseColor, Subsurface, Roughness,
|
||||
Sheen, SheenTint) * (1.0 - Metallic)
|
||||
+ disney_clearcoat(Normal, Clearcoat, ClearcoatGloss);
|
||||
@@ -47,6 +61,6 @@ shader node_disney_bsdf(
|
||||
+ disney_specular(Normal, Tangent, BaseColor, Metallic, Specular,
|
||||
SpecularTint, Roughness, Anisotropic)
|
||||
+ disney_clearcoat(Normal, Clearcoat, ClearcoatGloss);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
@@ -180,7 +180,7 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
|
||||
}
|
||||
|
||||
/* specular */
|
||||
if (specular > 0.0f) {
|
||||
if (specular > 0.0f || metallic > 0.0f) {
|
||||
if (num_closure + 1 < MAX_CLOSURE) {
|
||||
sc = ccl_fetch_array(sd, closure, num_closure + 1);
|
||||
sc->weight = weight;
|
||||
@@ -205,21 +205,23 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
|
||||
}
|
||||
|
||||
/* clearcoat */
|
||||
printf("%d\n\r", num_closure + 1);
|
||||
if (num_closure + 1 < MAX_CLOSURE) {
|
||||
sc = ccl_fetch_array(sd, closure, num_closure + 1);
|
||||
sc->weight = weight;
|
||||
sc->sample_weight = sample_weight;
|
||||
if (clearcoat > 0.0f) {
|
||||
printf("%d\n\r", num_closure + 1);
|
||||
if (num_closure + 1 < MAX_CLOSURE) {
|
||||
sc = ccl_fetch_array(sd, closure, num_closure + 1);
|
||||
sc->weight = weight;
|
||||
sc->sample_weight = sample_weight;
|
||||
|
||||
sc = svm_node_closure_get_bsdf(sd, mix_weight/* * mix(0.333f, 0.5f, clamp(metallic, 0.0f, 1.0f))*/);
|
||||
sc = svm_node_closure_get_bsdf(sd, mix_weight/* * mix(0.333f, 0.5f, clamp(metallic, 0.0f, 1.0f))*/);
|
||||
|
||||
if (sc) {
|
||||
sc->N = N;
|
||||
if (sc) {
|
||||
sc->N = N;
|
||||
|
||||
sc->data0 = clearcoat;
|
||||
sc->data1 = clearcoatGloss;
|
||||
sc->data0 = clearcoat;
|
||||
sc->data1 = clearcoatGloss;
|
||||
|
||||
ccl_fetch(sd, flag) |= bsdf_disney_clearcoat_setup(sc);
|
||||
ccl_fetch(sd, flag) |= bsdf_disney_clearcoat_setup(sc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -77,11 +77,6 @@ CCL_NAMESPACE_BEGIN
|
||||
|
||||
/* Scalar */
|
||||
|
||||
/*ccl_device_inline float mix(float a, float b, float alpha)
|
||||
{
|
||||
return a * (1.0f - alpha) + b * alpha;
|
||||
}*/
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#ifndef __KERNEL_OPENCL__
|
||||
@@ -226,12 +221,6 @@ ccl_device_inline float smoothstepf(float f)
|
||||
|
||||
/* Float2 Vector */
|
||||
|
||||
/*ccl_device_inline float2 mix(float2 a, float2 b, float alpha)
|
||||
{
|
||||
float inv_alpha = 1.0f - alpha;
|
||||
return make_float2(a[0] * inv_alpha + b[0] * alpha, a[1] * inv_alpha + b[1] * alpha);
|
||||
}*/
|
||||
|
||||
#ifndef __KERNEL_OPENCL__
|
||||
|
||||
ccl_device_inline bool is_zero(const float2 a)
|
||||
@@ -423,12 +412,6 @@ ccl_device_inline float2 interp(float2 a, float2 b, float t)
|
||||
|
||||
/* Float3 Vector */
|
||||
|
||||
/*ccl_device_inline float3 mix(float3 a, float3 b, float alpha)
|
||||
{
|
||||
float inv_alpha = 1.0f - alpha;
|
||||
return make_float3(a[0] * inv_alpha + b[0] * alpha, a[1] * inv_alpha + b[1] * alpha, a[2] * inv_alpha + b[2] * alpha);
|
||||
}*/
|
||||
|
||||
#ifndef __KERNEL_OPENCL__
|
||||
|
||||
ccl_device_inline float3 operator-(const float3 a)
|
||||
@@ -685,13 +668,6 @@ ccl_device_inline float average(const float3 a)
|
||||
|
||||
/* Float4 Vector */
|
||||
|
||||
|
||||
/*ccl_device_inline float4 mix(float4 a, float4 b, float alpha)
|
||||
{
|
||||
float inv_alpha = 1.0f - alpha;
|
||||
return make_float4(a[0] * inv_alpha + b[0] * alpha, a[1] * inv_alpha + b[1] * alpha, a[2] * inv_alpha + b[2] * alpha, a[3] * inv_alpha + b[3] * alpha);
|
||||
}*/
|
||||
|
||||
#ifdef __KERNEL_SSE__
|
||||
|
||||
template<size_t index_0, size_t index_1, size_t index_2, size_t index_3> __forceinline const float4 shuffle(const float4& b)
|
||||
|
||||
Reference in New Issue
Block a user