Merge branch 'blender-v3.0-release' to pick up D13262.

This commit is contained in:
William Leeson 2021-11-18 09:41:11 +01:00
commit e1a3b697ec
Notes: blender-bot 2023-10-04 09:42:55 +02:00
Referenced by issue #93102, Principled hair BSDF shading incorrect when input is connected
1 changed files with 48 additions and 36 deletions

View File

@ -1503,18 +1503,21 @@ void WaveTextureNode::compile(SVMCompiler &compiler)
int vector_offset = tex_mapping.compile_begin(compiler, vector_in);
int scale_ofs = compiler.stack_assign_if_linked(scale_in);
int distortion_ofs = compiler.stack_assign_if_linked(distortion_in);
int detail_ofs = compiler.stack_assign_if_linked(detail_in);
int dscale_ofs = compiler.stack_assign_if_linked(dscale_in);
int droughness_ofs = compiler.stack_assign_if_linked(droughness_in);
int phase_ofs = compiler.stack_assign_if_linked(phase_in);
int color_ofs = compiler.stack_assign_if_linked(color_out);
int fac_ofs = compiler.stack_assign_if_linked(fac_out);
compiler.add_node(NODE_TEX_WAVE,
compiler.encode_uchar4(wave_type, bands_direction, rings_direction, profile),
compiler.encode_uchar4(vector_offset,
compiler.stack_assign_if_linked(scale_in),
compiler.stack_assign_if_linked(distortion_in)),
compiler.encode_uchar4(compiler.stack_assign_if_linked(detail_in),
compiler.stack_assign_if_linked(dscale_in),
compiler.stack_assign_if_linked(droughness_in),
compiler.stack_assign_if_linked(phase_in)));
compiler.encode_uchar4(vector_offset, scale_ofs, distortion_ofs),
compiler.encode_uchar4(detail_ofs, dscale_ofs, droughness_ofs, phase_ofs));
compiler.add_node(compiler.encode_uchar4(compiler.stack_assign_if_linked(color_out),
compiler.stack_assign_if_linked(fac_out)),
compiler.add_node(compiler.encode_uchar4(color_ofs, fac_ofs),
__float_as_int(scale),
__float_as_int(distortion),
__float_as_int(detail));
@ -3572,45 +3575,54 @@ void PrincipledHairBsdfNode::compile(SVMCompiler &compiler)
int tint_ofs = compiler.stack_assign(input("Tint"));
int absorption_coefficient_ofs = compiler.stack_assign(input("Absorption Coefficient"));
int roughness_ofs = compiler.stack_assign_if_linked(roughness_in);
int radial_roughness_ofs = compiler.stack_assign_if_linked(radial_roughness_in);
int normal_ofs = compiler.stack_assign_if_linked(input("Normal"));
int offset_ofs = compiler.stack_assign_if_linked(offset_in);
int ior_ofs = compiler.stack_assign_if_linked(ior_in);
int coat_ofs = compiler.stack_assign_if_linked(coat_in);
int melanin_ofs = compiler.stack_assign_if_linked(melanin_in);
int melanin_redness_ofs = compiler.stack_assign_if_linked(melanin_redness_in);
ShaderInput *random_in = input("Random");
int attr_random = random_in->link ? SVM_STACK_INVALID :
compiler.attribute(ATTR_STD_CURVE_RANDOM);
int random_in_ofs = compiler.stack_assign_if_linked(random_in);
int random_color_ofs = compiler.stack_assign_if_linked(random_color_in);
int random_roughness_ofs = compiler.stack_assign_if_linked(random_roughness_in);
/* Encode all parameters into data nodes. */
compiler.add_node(NODE_CLOSURE_BSDF,
/* Socket IDs can be packed 4 at a time into a single data packet */
compiler.encode_uchar4(closure,
compiler.stack_assign_if_linked(roughness_in),
compiler.stack_assign_if_linked(radial_roughness_in),
compiler.closure_mix_weight_offset()),
/* The rest are stored as unsigned integers */
__float_as_uint(roughness),
__float_as_uint(radial_roughness));
compiler.add_node(compiler.stack_assign_if_linked(input("Normal")),
compiler.encode_uchar4(compiler.stack_assign_if_linked(offset_in),
compiler.stack_assign_if_linked(ior_in),
color_ofs,
parametrization),
/* node */
compiler.add_node(
NODE_CLOSURE_BSDF,
/* Socket IDs can be packed 4 at a time into a single data packet */
compiler.encode_uchar4(
closure, roughness_ofs, radial_roughness_ofs, compiler.closure_mix_weight_offset()),
/* The rest are stored as unsigned integers */
__float_as_uint(roughness),
__float_as_uint(radial_roughness));
/* data node */
compiler.add_node(normal_ofs,
compiler.encode_uchar4(offset_ofs, ior_ofs, color_ofs, parametrization),
__float_as_uint(offset),
__float_as_uint(ior));
compiler.add_node(compiler.encode_uchar4(compiler.stack_assign_if_linked(coat_in),
compiler.stack_assign_if_linked(melanin_in),
compiler.stack_assign_if_linked(melanin_redness_in),
absorption_coefficient_ofs),
/* data node 2 */
compiler.add_node(compiler.encode_uchar4(
coat_ofs, melanin_ofs, melanin_redness_ofs, absorption_coefficient_ofs),
__float_as_uint(coat),
__float_as_uint(melanin),
__float_as_uint(melanin_redness));
compiler.add_node(compiler.encode_uchar4(tint_ofs,
compiler.stack_assign_if_linked(random_in),
compiler.stack_assign_if_linked(random_color_in),
compiler.stack_assign_if_linked(random_roughness_in)),
__float_as_uint(random),
__float_as_uint(random_color),
__float_as_uint(random_roughness));
/* data node 3 */
compiler.add_node(
compiler.encode_uchar4(tint_ofs, random_in_ofs, random_color_ofs, random_roughness_ofs),
__float_as_uint(random),
__float_as_uint(random_color),
__float_as_uint(random_roughness));
/* data node 4 */
compiler.add_node(
compiler.encode_uchar4(
SVM_STACK_INVALID, SVM_STACK_INVALID, SVM_STACK_INVALID, SVM_STACK_INVALID),