Skip to content

Commit 60c20ec

Browse files
committed
Add a fix for shader transparent generic shaders with no stages
Also fix an issue where out of bounds permutation indices would break the color plate extractor.
1 parent 3a5a191 commit 60c20ec

File tree

2 files changed

+31
-14
lines changed

2 files changed

+31
-14
lines changed

io_scene_halo/global_functions/shader_generation/image_helper.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,10 +268,21 @@ def get_texture_from_plate(texture, permutation_index=0, is_cubemap=True):
268268

269269
else:
270270
if sequence_count > 0:
271-
if sequence_count < permutation_index:
272-
img = sequences[0][0]
271+
if sequence_count <= permutation_index:
272+
print("Permutation index out of bounds.")
273+
if len(sequences[0]) > 0:
274+
img = sequences[0][0]
275+
else:
276+
print("Failed to find any fallback image permutations. Something went wrong.")
277+
273278
else:
274-
img = sequences[permutation_index][0]
279+
if len(sequences[permutation_index]) > 0:
280+
img = sequences[permutation_index][0]
281+
else:
282+
print("Failed to find any image permutations. Something went wrong.")
283+
else:
284+
print("Failed to find any image sequences. Something went wrong.")
285+
275286

276287
elif is_cubemap:
277288
faces = extract_t_faces(img)

io_scene_halo/global_functions/shader_generation/shader_transparent_generic.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -751,7 +751,7 @@ def get_resource_node(tree, group_name):
751751

752752
return group_node
753753

754-
def generate_alpha_blend_output(node_tree, stg_paths, output_material_node):
754+
def generate_alpha_blend_output(shader_data, stg_node, node_tree, stg_paths, output_material_node):
755755
transparent_node = node_tree.nodes.new("ShaderNodeBsdfTransparent")
756756
diffuse_node = node_tree.nodes.new("ShaderNodeBsdfDiffuse")
757757
mix_node = node_tree.nodes.new("ShaderNodeMixShader")
@@ -775,9 +775,12 @@ def generate_alpha_blend_output(node_tree, stg_paths, output_material_node):
775775
connect_inputs(node_tree, transparent_node, "BSDF", mix_node, 1)
776776
connect_inputs(node_tree, diffuse_node, "BSDF", mix_node, 2)
777777

778+
if len(shader_data["stages"]) == 0:
779+
connect_inputs(node_tree, stg_node, "Map A", diffuse_node, "Color")
780+
778781
return mix_node
779782

780-
def generate_add_blend_output(node_tree, stg_paths, output_material_node):
783+
def generate_add_blend_output(shader_data, stg_node, node_tree, stg_paths, output_material_node):
781784
emission_node = node_tree.nodes.new("ShaderNodeEmission")
782785
transparent_node = node_tree.nodes.new("ShaderNodeBsdfTransparent")
783786
add_node = node_tree.nodes.new("ShaderNodeAddShader")
@@ -795,6 +798,9 @@ def generate_add_blend_output(node_tree, stg_paths, output_material_node):
795798
connect_inputs(node_tree, emission_node, "Emission", add_node, 0)
796799
connect_inputs(node_tree, transparent_node, "BSDF", add_node, 1)
797800

801+
if len(shader_data["stages"]) == 0:
802+
connect_inputs(node_tree, stg_node, "Map A", emission_node, "Color")
803+
798804
return add_node
799805

800806
def get_scale(field_value):
@@ -973,21 +979,21 @@ def generate_shader_transparent_generic(mat, shader_asset, permutation_index, as
973979
final_node = None
974980
fbf_enum = FramebufferBlendFunctionEnum(stg_node.inputs["Framebuffer Blend Function"].default_value)
975981
if fbf_enum == FramebufferBlendFunctionEnum.alpha_blend:
976-
final_node = generate_alpha_blend_output(mat.node_tree, stg_paths, output_material_node)
982+
final_node = generate_alpha_blend_output(shader_data, stg_node, mat.node_tree, stg_paths, output_material_node)
977983
elif fbf_enum == FramebufferBlendFunctionEnum.multiply:
978-
final_node = generate_add_blend_output(mat.node_tree, stg_paths, output_material_node)
984+
final_node = generate_add_blend_output(shader_data, stg_node, mat.node_tree, stg_paths, output_material_node)
979985
elif fbf_enum == FramebufferBlendFunctionEnum.double_multiply:
980-
final_node = generate_add_blend_output(mat.node_tree, stg_paths, output_material_node)
986+
final_node = generate_add_blend_output(shader_data, stg_node, mat.node_tree, stg_paths, output_material_node)
981987
elif fbf_enum == FramebufferBlendFunctionEnum.add:
982-
final_node = generate_add_blend_output(mat.node_tree, stg_paths, output_material_node)
988+
final_node = generate_add_blend_output(shader_data, stg_node, mat.node_tree, stg_paths, output_material_node)
983989
elif fbf_enum == FramebufferBlendFunctionEnum.subtract:
984-
final_node = generate_add_blend_output(mat.node_tree, stg_paths, output_material_node)
990+
final_node = generate_add_blend_output(shader_data, stg_node, mat.node_tree, stg_paths, output_material_node)
985991
elif fbf_enum == FramebufferBlendFunctionEnum.component_min:
986-
final_node = generate_add_blend_output(mat.node_tree, stg_paths, output_material_node)
992+
final_node = generate_add_blend_output(shader_data, stg_node, mat.node_tree, stg_paths, output_material_node)
987993
elif fbf_enum == FramebufferBlendFunctionEnum.component_max:
988-
final_node = generate_add_blend_output(mat.node_tree, stg_paths, output_material_node)
994+
final_node = generate_add_blend_output(shader_data, stg_node, mat.node_tree, stg_paths, output_material_node)
989995
elif fbf_enum == FramebufferBlendFunctionEnum.alpha_multiply_add:
990-
final_node = generate_alpha_blend_output(mat.node_tree, stg_paths, output_material_node)
996+
final_node = generate_alpha_blend_output(shader_data, stg_node, mat.node_tree, stg_paths, output_material_node)
991997

992998
if final_node is not None:
993999
emission_node = mat.node_tree.nodes.new("ShaderNodeEmission")
@@ -1004,4 +1010,4 @@ def generate_shader_transparent_generic(mat, shader_asset, permutation_index, as
10041010
connect_inputs(mat.node_tree, mix_node, "Shader", output_material_node, "Surface")
10051011

10061012
connect_inputs(mat.node_tree, stg_node, "Power", emission_node, 1)
1007-
connect_inputs(mat.node_tree, stg_node, "Color Of Emitted Light", emission_node, 0)
1013+
connect_inputs(mat.node_tree, stg_node, "Map A", emission_node, 0)

0 commit comments

Comments
 (0)