diff options
author | William Leeson <william@blender.org> | 2021-11-18 11:41:11 +0300 |
---|---|---|
committer | William Leeson <william@blender.org> | 2021-11-18 11:41:11 +0300 |
commit | e1a3b697ec03d20207ee0c1fef6f816cb7856961 (patch) | |
tree | fda002b6d6cb4f93fa673afa35f7b6a77ba81776 /intern/cycles/scene | |
parent | 9cf3d841a823a7b015d4f7be7ee27c9ce88ad6e0 (diff) | |
parent | 8c0370ef7b8d2854ca6eac8f57c626bb3c4b2f2b (diff) |
Merge branch 'blender-v3.0-release' to pick up D13262.
Diffstat (limited to 'intern/cycles/scene')
-rw-r--r-- | intern/cycles/scene/shader_nodes.cpp | 84 |
1 files changed, 48 insertions, 36 deletions
diff --git a/intern/cycles/scene/shader_nodes.cpp b/intern/cycles/scene/shader_nodes.cpp index 94c96d473b6..8a9ef56b0ae 100644 --- a/intern/cycles/scene/shader_nodes.cpp +++ b/intern/cycles/scene/shader_nodes.cpp @@ -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), |