Skip to content

Commit

Permalink
Halo shader to Blender material drag and drop
Browse files Browse the repository at this point in the history
  • Loading branch information
General-101 committed May 5, 2024
1 parent 7e2edbd commit fdc1ae5
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 10 deletions.
2 changes: 1 addition & 1 deletion io_scene_halo/file_tag/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ class ImportTag_FileHandler(FileHandler):
bl_idname = "Tag_FH_import"
bl_label = "File handler for tag import"
bl_import_operator = "import_scene.tag"
bl_file_extensions = ".model;.gbxmodel;.model_collision_geometry;.model_animations;.physics;.scenario_structure_bsp;.scenario;.camera_track;.render_model"
bl_file_extensions = ".model;.gbxmodel;.model_collision_geometry;.model_animations;.physics;.scenario_structure_bsp;.scenario;.camera_track;.render_model;.shader_environment;.shader_model;.shader_transparent_meter;.shader_transparent_glass"

@classmethod
def poll_drop(cls, context):
Expand Down
58 changes: 57 additions & 1 deletion io_scene_halo/file_tag/import_tag.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,23 @@
from .h1.file_camera_track.process_file import process_file as process_camera_track
from .h2.file_camera_track.process_file import process_file as process_h2_camera_track

from ..file_tag.h1.file_shader_environment.process_file import process_file as process_shader_environment
from ..file_tag.h1.file_shader_model.process_file import process_file as process_shader_model
from ..file_tag.h1.file_shader_transparent_chicago.process_file import process_file as process_shader_transparent_chicago
from ..file_tag.h1.file_shader_transparent_chicago_extended.process_file import process_file as process_shader_transparent_chicago_extended
from ..file_tag.h1.file_shader_transparent_generic.process_file import process_file as process_shader_transparent_generic
from ..file_tag.h1.file_shader_transparent_glass.process_file import process_file as process_shader_transparent_glass
from ..file_tag.h1.file_shader_transparent_meter.process_file import process_file as process_shader_transparent_meter
from ..file_tag.h1.file_shader_transparent_plasma.process_file import process_file as process_shader_transparent_plasma
from ..file_tag.h1.file_shader_transparent_water.process_file import process_file as process_shader_transparent_water

from ..global_functions.shader_processing import generate_shader_transparent_glass
from ..global_functions.shader_processing import generate_shader_transparent_meter
from ..global_functions.shader_generation.shader_environment import generate_shader_environment
from ..global_functions.shader_generation.shader_model import generate_shader_model

def load_file(context, file_path, game_title, fix_rotations, empty_markers, report):
tag_name = os.path.basename(file_path).rsplit(".", 1)[0]
input_stream = open(file_path, "rb")
if tag_format.check_file_size(input_stream) < 64: # Size of the header for all tags
input_stream.close()
Expand Down Expand Up @@ -189,14 +205,54 @@ def load_file(context, file_path, game_title, fix_rotations, empty_markers, repo
else:
ASSET = process_h2_camera_track(input_stream, report)

elif tag_group == "senv":
build_scene = None
ASSET = process_shader_environment(input_stream, report)
mat = bpy.data.materials.new(name=tag_name)
generate_shader_environment(mat, ASSET, 0, report)

elif tag_group == "soso":
build_scene = None
ASSET = process_shader_model(input_stream, report)
mat = bpy.data.materials.new(name=tag_name)
generate_shader_model(mat, ASSET, report)

#elif tag_group == "schi":
#generate_shader_transparent_chicago(mat, shader, report)

#elif tag_group == "scex":
#generate_shader_transparent_chicago_extended(mat, shader, report)

#elif tag_group == "sotr":
#generate_shader_transparent_generic(mat, shader, report)

elif tag_group == "sgla":
build_scene = None
ASSET = process_shader_transparent_glass(input_stream, report)
mat = bpy.data.materials.new(name=tag_name)
generate_shader_transparent_glass(mat, ASSET, report)

elif tag_group == "smet":
build_scene = None
ASSET = process_shader_transparent_meter(input_stream, report)
mat = bpy.data.materials.new(name=tag_name)
generate_shader_transparent_meter(mat, ASSET, report)

#elif tag_group == "spla":
#generate_shader_transparent_plasma(mat, shader, report)

#elif tag_group == "swat":
#generate_shader_transparent_water(mat, shader, report)

else:
input_stream.close()
report({'ERROR'}, "Not implemented")

return {'CANCELLED'}

input_stream.close()
build_scene.build_scene(context, ASSET, "retail", game_title, 0, fix_rotations, empty_markers, report)
if build_scene:
build_scene.build_scene(context, ASSET, "retail", game_title, 0, fix_rotations, empty_markers, report)

return {'FINISHED'}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ def set_primary_detail_scale(shader, mat, primary_detail_node, base_bitmap_count
connect_inputs(mat.node_tree, vect_math_node, "Vector", primary_detail_node, "Vector")

uv_map_node = mat.node_tree.nodes.new("ShaderNodeUVMap")
uv_map_node.uv_map = "UVMap_0"
combine_xyz_node = mat.node_tree.nodes.new("ShaderNodeCombineXYZ")
uv_map_node.location = Vector((-1600, 875))
combine_xyz_node.location = Vector((-1600, 750))
Expand Down Expand Up @@ -94,7 +93,6 @@ def set_secondary_detail_scale(shader, mat, secondary_detail_node, base_bitmap_c
connect_inputs(mat.node_tree, vect_math_node, "Vector", secondary_detail_node, "Vector")

uv_map_node = mat.node_tree.nodes.new("ShaderNodeUVMap")
uv_map_node.uv_map = "UVMap_0"
combine_xyz_node = mat.node_tree.nodes.new("ShaderNodeCombineXYZ")
uv_map_node.location = Vector((-1600, 575))
combine_xyz_node.location = Vector((-1600, 450))
Expand Down Expand Up @@ -132,7 +130,6 @@ def set_micro_detail_scale(shader, mat, micro_detail_node, base_bitmap_count, mi
connect_inputs(mat.node_tree, vect_math_node, "Vector", micro_detail_node, "Vector")

uv_map_node = mat.node_tree.nodes.new("ShaderNodeUVMap")
uv_map_node.uv_map = "UVMap_0"
combine_xyz_node = mat.node_tree.nodes.new("ShaderNodeCombineXYZ")
uv_map_node.location = Vector((-1600, 275))
combine_xyz_node.location = Vector((-1600, 150))
Expand Down Expand Up @@ -170,7 +167,6 @@ def set_bump_scale(shader, mat, bump_node, base_bitmap_count, bump_bitmap_count,
connect_inputs(mat.node_tree, vect_math_node, "Vector", bump_node, "Vector")

uv_map_node = mat.node_tree.nodes.new("ShaderNodeUVMap")
uv_map_node.uv_map = "UVMap_0"
combine_xyz_node = mat.node_tree.nodes.new("ShaderNodeCombineXYZ")
uv_map_node.location = Vector((-1600, -25))
combine_xyz_node.location = Vector((-1600, -150))
Expand Down Expand Up @@ -208,7 +204,6 @@ def set_illum_scale(shader, mat, self_illumination_node):
connect_inputs(mat.node_tree, vect_math_node, "Vector", self_illumination_node, "Vector")

uv_map_node = mat.node_tree.nodes.new("ShaderNodeUVMap")
uv_map_node.uv_map = "UVMap_0"
combine_xyz_node = mat.node_tree.nodes.new("ShaderNodeCombineXYZ")
uv_map_node.location = Vector((-1600, -325))
combine_xyz_node.location = Vector((-1600, -450))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,6 @@ def set_micro_detail_scale(shader, mat, micro_detail_node, base_bitmap_count, mi
connect_inputs(mat.node_tree, vect_math_node, "Vector", micro_detail_node, "Vector")

uv_map_node = mat.node_tree.nodes.new("ShaderNodeUVMap")
uv_map_node.uv_map = "UVMap_0"
combine_xyz_node = mat.node_tree.nodes.new("ShaderNodeCombineXYZ")
uv_map_node.location = Vector((-1600, 275))
combine_xyz_node.location = Vector((-1600, 150))
Expand Down Expand Up @@ -142,7 +141,6 @@ def set_bump_scale(shader, mat, bump_node, base_bitmap_count, bump_bitmap_count,
connect_inputs(mat.node_tree, vect_math_node, "Vector", bump_node, "Vector")

uv_map_node = mat.node_tree.nodes.new("ShaderNodeUVMap")
uv_map_node.uv_map = "UVMap_0"
combine_xyz_node = mat.node_tree.nodes.new("ShaderNodeCombineXYZ")
uv_map_node.location = Vector((-1600, -25))
combine_xyz_node.location = Vector((-1600, -150))
Expand Down Expand Up @@ -180,7 +178,6 @@ def set_illum_scale(shader, mat, self_illumination_node):
connect_inputs(mat.node_tree, vect_math_node, "Vector", self_illumination_node, "Vector")

uv_map_node = mat.node_tree.nodes.new("ShaderNodeUVMap")
uv_map_node.uv_map = "UVMap_0"
combine_xyz_node = mat.node_tree.nodes.new("ShaderNodeCombineXYZ")
uv_map_node.location = Vector((-1600, -325))
combine_xyz_node.location = Vector((-1600, -450))
Expand Down

0 comments on commit fdc1ae5

Please sign in to comment.