Principled v2 combined changes for 4.0 #112848
|
@ -537,12 +537,12 @@ static ShaderNode *add_node(Scene *scene,
|
|||
case BL::ShaderNodeSubsurfaceScattering::falloff_BURLEY:
|
||||
subsurface->set_method(CLOSURE_BSSRDF_BURLEY_ID);
|
||||
break;
|
||||
case BL::ShaderNodeSubsurfaceScattering::falloff_RANDOM_WALK_FIXED_RADIUS:
|
||||
subsurface->set_method(CLOSURE_BSSRDF_RANDOM_WALK_FIXED_RADIUS_ID);
|
||||
break;
|
||||
case BL::ShaderNodeSubsurfaceScattering::falloff_RANDOM_WALK:
|
||||
subsurface->set_method(CLOSURE_BSSRDF_RANDOM_WALK_ID);
|
||||
break;
|
||||
case BL::ShaderNodeSubsurfaceScattering::falloff_RANDOM_WALK_SKIN:
|
||||
subsurface->set_method(CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID);
|
||||
break;
|
||||
}
|
||||
|
||||
node = subsurface;
|
||||
|
@ -651,12 +651,12 @@ static ShaderNode *add_node(Scene *scene,
|
|||
case BL::ShaderNodeBsdfPrincipled::subsurface_method_BURLEY:
|
||||
principled->set_subsurface_method(CLOSURE_BSSRDF_BURLEY_ID);
|
||||
break;
|
||||
case BL::ShaderNodeBsdfPrincipled::subsurface_method_RANDOM_WALK_FIXED_RADIUS:
|
||||
principled->set_subsurface_method(CLOSURE_BSSRDF_RANDOM_WALK_FIXED_RADIUS_ID);
|
||||
break;
|
||||
case BL::ShaderNodeBsdfPrincipled::subsurface_method_RANDOM_WALK:
|
||||
principled->set_subsurface_method(CLOSURE_BSSRDF_RANDOM_WALK_ID);
|
||||
break;
|
||||
case BL::ShaderNodeBsdfPrincipled::subsurface_method_RANDOM_WALK_SKIN:
|
||||
principled->set_subsurface_method(CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID);
|
||||
break;
|
||||
}
|
||||
node = principled;
|
||||
}
|
||||
|
|
|
@ -359,7 +359,7 @@ ccl_device_inline int bsdf_label(const KernelGlobals kg,
|
|||
case CLOSURE_BSDF_DIFFUSE_ID:
|
||||
case CLOSURE_BSSRDF_BURLEY_ID:
|
||||
case CLOSURE_BSSRDF_RANDOM_WALK_ID:
|
||||
case CLOSURE_BSSRDF_RANDOM_WALK_FIXED_RADIUS_ID:
|
||||
case CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID:
|
||||
label = LABEL_REFLECT | LABEL_DIFFUSE;
|
||||
break;
|
||||
#ifdef __SVM__
|
||||
|
|
|
@ -59,7 +59,7 @@ ccl_device float bssrdf_dipole_compute_alpha_prime(float rd, float fourthirdA)
|
|||
|
||||
ccl_device void bssrdf_setup_radius(ccl_private Bssrdf *bssrdf, const ClosureType type)
|
||||
{
|
||||
if (type == CLOSURE_BSSRDF_BURLEY_ID || type == CLOSURE_BSSRDF_RANDOM_WALK_FIXED_RADIUS_ID) {
|
||||
if (type == CLOSURE_BSSRDF_BURLEY_ID || type == CLOSURE_BSSRDF_RANDOM_WALK_ID) {
|
||||
/* Scale mean free path length so it gives similar looking result to older
|
||||
* Cubic, Gaussian and Burley models. */
|
||||
bssrdf->radius *= 0.25f * M_1_PI_F;
|
||||
|
@ -291,8 +291,8 @@ ccl_device int bssrdf_setup(ccl_private ShaderData *sd,
|
|||
|
||||
int flag = 0;
|
||||
|
||||
if (type == CLOSURE_BSSRDF_RANDOM_WALK_ID) {
|
||||
/* CLOSURE_BSSRDF_RANDOM_WALK_ID uses a fixed roughness. */
|
||||
if (type == CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID) {
|
||||
/* CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID uses a fixed roughness. */
|
||||
bssrdf->alpha = 1.0f;
|
||||
}
|
||||
|
||||
|
|
|
@ -31,8 +31,8 @@ ccl_device_inline bool subsurface_entry_bounce(KernelGlobals kg,
|
|||
{
|
||||
float2 rand_bsdf = path_state_rng_2D(kg, rng_state, PRNG_SUBSURFACE_BSDF);
|
||||
|
||||
if (bssrdf->type == CLOSURE_BSSRDF_RANDOM_WALK_ID) {
|
||||
/* CLOSURE_BSSRDF_RANDOM_WALK_ID has a 50% chance to sample a diffuse entry bounce.
|
||||
if (bssrdf->type == CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID) {
|
||||
/* CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID has a 50% chance to sample a diffuse entry bounce.
|
||||
* Also, for the refractive entry, it uses a fixed roughness of 1.0. */
|
||||
if (rand_bsdf.x < 0.5f) {
|
||||
rand_bsdf.x *= 2.0f;
|
||||
|
|
|
@ -807,12 +807,12 @@ ccl_device void osl_closure_bssrdf_setup(KernelGlobals kg,
|
|||
if (closure->method == make_string("burley", 186330084368958868ull)) {
|
||||
type = CLOSURE_BSSRDF_BURLEY_ID;
|
||||
}
|
||||
else if (closure->method == make_string("random_walk_fixed_radius", 5695810351010063150ull)) {
|
||||
type = CLOSURE_BSSRDF_RANDOM_WALK_FIXED_RADIUS_ID;
|
||||
}
|
||||
else if (closure->method == make_string("random_walk", 11360609267673527222ull)) {
|
||||
else if (closure->method == make_string("random_walk", 5695810351010063150ull)) {
|
||||
type = CLOSURE_BSSRDF_RANDOM_WALK_ID;
|
||||
}
|
||||
else if (closure->method == make_string("random_walk_skin", 11360609267673527222ull)) {
|
||||
type = CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID;
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -53,7 +53,7 @@ shader node_principled_bsdf(string distribution = "multi_ggx",
|
|||
BSDF = BaseColor * diffuse(Normal);
|
||||
if (Subsurface > 1e-5) {
|
||||
vector radius = SubsurfaceScale * SubsurfaceRadius;
|
||||
float subsurface_ior = (subsurface_method == "random_walk") ? SubsurfaceIOR : IOR;
|
||||
float subsurface_ior = (subsurface_method == "random_walk_skin") ? SubsurfaceIOR : IOR;
|
||||
closure color SubsurfBSDF = bssrdf(subsurface_method,
|
||||
Normal,
|
||||
SubsurfaceScale * SubsurfaceRadius,
|
||||
|
|
|
@ -359,7 +359,7 @@ ccl_device_noinline int svm_node_closure_bsdf(KernelGlobals kg,
|
|||
bssrdf->alpha = sqr(roughness);
|
||||
bssrdf->ior = eta;
|
||||
bssrdf->anisotropy = stack_load_float(stack, data_subsurf.w);
|
||||
if (subsurface_method == CLOSURE_BSSRDF_RANDOM_WALK_ID) {
|
||||
if (subsurface_method == CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID) {
|
||||
bssrdf->ior = stack_load_float(stack, data_subsurf.x);
|
||||
}
|
||||
|
||||
|
@ -799,7 +799,7 @@ ccl_device_noinline int svm_node_closure_bsdf(KernelGlobals kg,
|
|||
#ifdef __SUBSURFACE__
|
||||
case CLOSURE_BSSRDF_BURLEY_ID:
|
||||
case CLOSURE_BSSRDF_RANDOM_WALK_ID:
|
||||
case CLOSURE_BSSRDF_RANDOM_WALK_FIXED_RADIUS_ID: {
|
||||
case CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID: {
|
||||
Spectrum weight = closure_weight * mix_weight;
|
||||
ccl_private Bssrdf *bssrdf = bssrdf_alloc(sd, weight);
|
||||
|
||||
|
|
|
@ -453,7 +453,7 @@ typedef enum ClosureType {
|
|||
/* BSSRDF */
|
||||
CLOSURE_BSSRDF_BURLEY_ID,
|
||||
CLOSURE_BSSRDF_RANDOM_WALK_ID,
|
||||
CLOSURE_BSSRDF_RANDOM_WALK_FIXED_RADIUS_ID,
|
||||
CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID,
|
||||
|
||||
/* Other */
|
||||
CLOSURE_HOLDOUT_ID,
|
||||
|
@ -490,9 +490,9 @@ typedef enum ClosureType {
|
|||
(type >= CLOSURE_BSDF_MICROFACET_BECKMANN_GLASS_ID && \
|
||||
type <= CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID))
|
||||
#define CLOSURE_IS_BSDF_OR_BSSRDF(type) \
|
||||
(type != CLOSURE_NONE_ID && type <= CLOSURE_BSSRDF_RANDOM_WALK_FIXED_RADIUS_ID)
|
||||
(type != CLOSURE_NONE_ID && type <= CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID)
|
||||
#define CLOSURE_IS_BSSRDF(type) \
|
||||
(type >= CLOSURE_BSSRDF_BURLEY_ID && type <= CLOSURE_BSSRDF_RANDOM_WALK_FIXED_RADIUS_ID)
|
||||
(type >= CLOSURE_BSSRDF_BURLEY_ID && type <= CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID)
|
||||
#define CLOSURE_IS_VOLUME(type) \
|
||||
(type >= CLOSURE_VOLUME_ID && type <= CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID)
|
||||
#define CLOSURE_IS_VOLUME_SCATTER(type) (type == CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID)
|
||||
|
|
|
@ -2690,9 +2690,8 @@ NODE_DEFINE(PrincipledBsdfNode)
|
|||
|
||||
static NodeEnum subsurface_method_enum;
|
||||
subsurface_method_enum.insert("burley", CLOSURE_BSSRDF_BURLEY_ID);
|
||||
subsurface_method_enum.insert("random_walk_fixed_radius",
|
||||
CLOSURE_BSSRDF_RANDOM_WALK_FIXED_RADIUS_ID);
|
||||
subsurface_method_enum.insert("random_walk", CLOSURE_BSSRDF_RANDOM_WALK_ID);
|
||||
subsurface_method_enum.insert("random_walk_skin", CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID);
|
||||
SOCKET_ENUM(subsurface_method,
|
||||
"Subsurface Method",
|
||||
subsurface_method_enum,
|
||||
|
@ -2952,8 +2951,8 @@ NODE_DEFINE(SubsurfaceScatteringNode)
|
|||
|
||||
static NodeEnum method_enum;
|
||||
method_enum.insert("burley", CLOSURE_BSSRDF_BURLEY_ID);
|
||||
method_enum.insert("random_walk_fixed_radius", CLOSURE_BSSRDF_RANDOM_WALK_FIXED_RADIUS_ID);
|
||||
method_enum.insert("random_walk", CLOSURE_BSSRDF_RANDOM_WALK_ID);
|
||||
method_enum.insert("random_walk_skin", CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID);
|
||||
SOCKET_ENUM(method, "Method", method_enum, CLOSURE_BSSRDF_RANDOM_WALK_ID);
|
||||
|
||||
SOCKET_IN_FLOAT(scale, "Scale", 0.01f);
|
||||
|
|
|
@ -1070,7 +1070,7 @@ static void displacement_principled_nodes(bNode *node)
|
|||
}
|
||||
}
|
||||
else if (node->type == SH_NODE_BSDF_PRINCIPLED) {
|
||||
if (node->custom2 != SHD_SUBSURFACE_RANDOM_WALK) {
|
||||
if (node->custom2 != SHD_SUBSURFACE_RANDOM_WALK_SKIN) {
|
||||
node->custom2 = SHD_SUBSURFACE_BURLEY;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1548,13 +1548,13 @@ static bool seq_meta_channels_ensure(Sequence *seq, void * /*user_data*/)
|
|||
static void do_version_subsurface_methods(bNode *node)
|
||||
{
|
||||
if (node->type == SH_NODE_SUBSURFACE_SCATTERING) {
|
||||
if (!ELEM(node->custom1, SHD_SUBSURFACE_BURLEY, SHD_SUBSURFACE_RANDOM_WALK)) {
|
||||
node->custom1 = SHD_SUBSURFACE_RANDOM_WALK_FIXED_RADIUS;
|
||||
if (!ELEM(node->custom1, SHD_SUBSURFACE_BURLEY, SHD_SUBSURFACE_RANDOM_WALK_SKIN)) {
|
||||
node->custom1 = SHD_SUBSURFACE_RANDOM_WALK;
|
||||
}
|
||||
}
|
||||
else if (node->type == SH_NODE_BSDF_PRINCIPLED) {
|
||||
if (!ELEM(node->custom2, SHD_SUBSURFACE_BURLEY, SHD_SUBSURFACE_RANDOM_WALK)) {
|
||||
node->custom2 = SHD_SUBSURFACE_RANDOM_WALK_FIXED_RADIUS;
|
||||
if (!ELEM(node->custom2, SHD_SUBSURFACE_BURLEY, SHD_SUBSURFACE_RANDOM_WALK_SKIN)) {
|
||||
node->custom2 = SHD_SUBSURFACE_RANDOM_WALK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2294,8 +2294,8 @@ enum {
|
|||
SHD_SUBSURFACE_GAUSSIAN = 2,
|
||||
#endif
|
||||
SHD_SUBSURFACE_BURLEY = 3,
|
||||
SHD_SUBSURFACE_RANDOM_WALK_FIXED_RADIUS = 4,
|
||||
SHD_SUBSURFACE_RANDOM_WALK = 5,
|
||||
SHD_SUBSURFACE_RANDOM_WALK = 4,
|
||||
SHD_SUBSURFACE_RANDOM_WALK_SKIN = 5,
|
||||
};
|
||||
|
||||
/* blur node */
|
||||
|
|
|
@ -4085,18 +4085,18 @@ static const EnumPropertyItem node_subsurface_method_items[] = {
|
|||
0,
|
||||
"Christensen-Burley",
|
||||
"Approximation to physically based volume scattering"},
|
||||
{SHD_SUBSURFACE_RANDOM_WALK_FIXED_RADIUS,
|
||||
"RANDOM_WALK_FIXED_RADIUS",
|
||||
0,
|
||||
"Random Walk (Fixed Radius)",
|
||||
"Volumetric approximation to physically based volume scattering, using the scattering radius "
|
||||
"as specified"},
|
||||
{SHD_SUBSURFACE_RANDOM_WALK,
|
||||
"RANDOM_WALK",
|
||||
0,
|
||||
"Random Walk",
|
||||
"Volumetric approximation to physically based volume scattering, using the scattering radius "
|
||||
"as specified"},
|
||||
{SHD_SUBSURFACE_RANDOM_WALK_SKIN,
|
||||
"RANDOM_WALK_SKIN",
|
||||
0,
|
||||
"Random Walk (Skin)",
|
||||
"Volumetric approximation to physically based volume scattering, with scattering radius "
|
||||
"automatically adjusted to match color textures"},
|
||||
"automatically adjusted to match color textures. Designed for skin shading"},
|
||||
{0, nullptr, 0, nullptr, nullptr}};
|
||||
|
||||
static const EnumPropertyItem prop_image_extension[] = {
|
||||
|
|
|
@ -299,7 +299,7 @@ static void node_shader_update_principled(bNodeTree *ntree, bNode *node)
|
|||
|
||||
bke::nodeSetSocketAvailability(ntree,
|
||||
nodeFindSocket(node, SOCK_IN, "Subsurface IOR"),
|
||||
sss_method == SHD_SUBSURFACE_RANDOM_WALK);
|
||||
sss_method == SHD_SUBSURFACE_RANDOM_WALK_SKIN);
|
||||
bke::nodeSetSocketAvailability(ntree,
|
||||
nodeFindSocket(node, SOCK_IN, "Subsurface Anisotropy"),
|
||||
sss_method != SHD_SUBSURFACE_BURLEY);
|
||||
|
|
Loading…
Reference in New Issue