Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,4 @@ webspynner/__pychache__/
*~

.vscode
.idea/
11 changes: 3 additions & 8 deletions HaydeeExporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -352,13 +352,8 @@ def write_dmesh(operator, context, filepath, export_skeleton,
uvs_output.append("\t\tuv %s %s;\n" % (d(uv_coord.x), d(uv_coord.y)))

EXPORT_SMOOTH_GROUPS = False
EXPORT_SMOOTH_GROUPS_BITFLAGS = True
if (EXPORT_SMOOTH_GROUPS or EXPORT_SMOOTH_GROUPS_BITFLAGS):
smooth_groups, smooth_groups_tot = mesh.calc_smooth_groups(use_bitflags=EXPORT_SMOOTH_GROUPS_BITFLAGS)
if smooth_groups_tot <= 1:
smooth_groups, smooth_groups_tot = (), 0
else:
smooth_groups, smooth_groups_tot = (), 0
EXPORT_SMOOTH_GROUPS_BITFLAGS = False
smooth_groups, smooth_groups_tot = (), 0

# Export faces (by material)
current_material_index = -1
Expand Down Expand Up @@ -546,7 +541,7 @@ def write_dmesh(operator, context, filepath, export_skeleton,
weights_output.append("\t\tweight %d %d %s;\n" % (w[0], w[1], d(normalized_weight)))
weights_count += 1
# clean up
ob_for_convert.to_mesh_clear()
bpy.data.meshes.remove(mesh)

if separate_files:
to_file(separate_files, filepath, group_name, base_vertex_index, vertex_output,
Expand Down
20 changes: 10 additions & 10 deletions HaydeeImporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -953,8 +953,8 @@ def read_dmesh(operator, context, filepath, file_format):
mesh_data = bpy.data.meshes.new(meshName)
mesh_data.from_pydata(list(map(coordTransform, objVerts)), [], objFaces)
# Shade smooth
mesh_data.use_auto_smooth = True
mesh_data.auto_smooth_angle = pi
# mesh_data.use_auto_smooth = True
# mesh_data.auto_smooth_angle = pi
mesh_data.polygons.foreach_set("use_smooth",
[True] * len(mesh_data.polygons))
progress.leave_substeps("mesh data end")
Expand Down Expand Up @@ -1165,8 +1165,8 @@ def read_mesh(operator, context, filepath, outfitName, file_format):
mesh_data = bpy.data.meshes.new(DEFAULT_MESH_NAME)
mesh_data.from_pydata(vert_data, [], face_data)
# Shade smooth
mesh_data.use_auto_smooth = True
mesh_data.auto_smooth_angle = pi
# mesh_data.use_auto_smooth = True
# mesh_data.auto_smooth_angle = pi
mesh_data.polygons.foreach_set("use_smooth",
[True] * len(mesh_data.polygons))
progress.leave_substeps("mesh data end")
Expand All @@ -1185,12 +1185,12 @@ def read_mesh(operator, context, filepath, outfitName, file_format):
progress.leave_substeps("uv end")

# normals
use_edges = True
mesh_data.create_normals_split()
meshCorrected = mesh_data.validate(clean_customdata=False) # *Very* important to not remove nors!
mesh_data.update(calc_edges=use_edges)
mesh_data.normals_split_custom_set_from_vertices(normals)
mesh_data.use_auto_smooth = True
mesh_data.validate(clean_customdata=False) # *Very* important to not remove nors!
mesh_data.update()

# For Blender 4.1+, normals are set via loop_normals
loop_normals = [normals[loop.vertex_index] for loop in mesh_data.loops]
mesh_data.normals_split_custom_set(loop_normals)

mesh_obj = bpy.data.objects.new(mesh_data.name, mesh_data)
linkToActiveCollection(mesh_obj)
Expand Down
47 changes: 27 additions & 20 deletions HaydeeNodeMat.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@

# Nodes Convert
SHADER_NODE_MATH = 'ShaderNodeMath'
SHADER_NODE_SEPARATE_RGB = 'ShaderNodeSeparateRGB'
SHADER_NODE_COMBINE_RGB = 'ShaderNodeCombineRGB'
SHADER_NODE_SEPARATE_RGB = 'ShaderNodeSeparateColor'
SHADER_NODE_COMBINE_RGB = 'ShaderNodeCombineColor'

# Node Groups
NODE_GROUP = 'ShaderNodeGroup'
Expand Down Expand Up @@ -173,7 +173,7 @@ def create_cycle_node_material(material, useAlpha, diffuseFile, normalFile, spec
pbrShaderNode.location = diffuseTextureNode.location + Vector((col_width * 4, -100))
pbrColorInput = 'Base Color'
pbrRoughnessInput = 'Roughness'
pbrReflectionInput = 'Specular'
pbrReflectionInput = 'Specular IOR Level'
pbrMetallicInput = 'Metallic'

emissionNode = node_tree.nodes.new(BSDF_EMISSION_NODE)
Expand All @@ -194,7 +194,7 @@ def create_cycle_node_material(material, useAlpha, diffuseFile, normalFile, spec
if emissionFile and os.path.exists(emissionFile):
links.new(emissionTextureNode.outputs['Color'], emissionNode.inputs['Color'])
links.new(diffuseTextureNode.outputs['Color'], pbrShaderNode.inputs[pbrColorInput])
links.new(specularTextureNode.outputs['Color'], separateRgbNode.inputs['Image'])
links.new(specularTextureNode.outputs['Color'], separateRgbNode.inputs['Color'])
if normalFile and os.path.exists(normalFile):
links.new(normalTextureRgbNode.outputs['Color'], haydeeNormalMapNode.inputs['Color'])
links.new(normalTextureAlphaNode.outputs['Alpha'], haydeeNormalMapNode.inputs['Alpha'])
Expand All @@ -209,10 +209,10 @@ def create_cycle_node_material(material, useAlpha, diffuseFile, normalFile, spec
links.new(addShaderNode.outputs['Shader'], alphaMixNode.inputs[2])
links.new(alphaMixNode.outputs['Shader'], outputNode.inputs['Surface'])

links.new(specularTextureNode.outputs['Color'], separateRgbNode.inputs['Image'])
links.new(separateRgbNode.outputs['R'], roughnessPowerNode.inputs[0])
links.new(separateRgbNode.outputs['G'], specPowerNode.inputs[0])
links.new(separateRgbNode.outputs['B'], metallicPowerNode.inputs[0])
links.new(specularTextureNode.outputs['Color'], separateRgbNode.inputs['Color'])
links.new(separateRgbNode.outputs['Red'], roughnessPowerNode.inputs[0])
links.new(separateRgbNode.outputs['Green'], specPowerNode.inputs[0])
links.new(separateRgbNode.outputs['Blue'], metallicPowerNode.inputs[0])

if specularFile and os.path.exists(specularFile):
links.new(roughnessPowerNode.outputs[0], pbrShaderNode.inputs[pbrRoughnessInput])
Expand Down Expand Up @@ -305,18 +305,25 @@ def haydee_normal_map():
group_outputs = node_tree.nodes.new(NODE_GROUP_OUTPUT)
group_outputs.location = combineRgbNode.location + Vector((200, 0))

# group_inputs.inputs.new(NODE_SOCKET_SHADER,'Shader')
input_color = node_tree.inputs.new(NODE_SOCKET_COLOR, 'Color')
input_color.default_value = (.5, .5, .5, 1)
input_alpha = node_tree.inputs.new(NODE_SOCKET_COLOR, 'Alpha')
input_alpha.default_value = (.5, .5, .5, 1)
output_value = node_tree.outputs.new(NODE_SOCKET_COLOR, 'Normal')
if hasattr(node_tree, "interface"):
input_color = node_tree.interface.new_socket('Color', in_out='INPUT', socket_type=NODE_SOCKET_COLOR)
input_color.default_value = (.5, .5, .5, 1)
input_alpha = node_tree.interface.new_socket('Alpha', in_out='INPUT', socket_type=NODE_SOCKET_COLOR)
input_alpha.default_value = (.5, .5, .5, 1)
output_value = node_tree.interface.new_socket('Normal', in_out='OUTPUT', socket_type=NODE_SOCKET_COLOR)
else:
# group_inputs.inputs.new(NODE_SOCKET_SHADER,'Shader')
input_color = node_tree.inputs.new(NODE_SOCKET_COLOR, 'Color')
input_color.default_value = (.5, .5, .5, 1)
input_alpha = node_tree.inputs.new(NODE_SOCKET_COLOR, 'Alpha')
input_alpha.default_value = (.5, .5, .5, 1)
output_value = node_tree.outputs.new(NODE_SOCKET_COLOR, 'Normal')

# Links Input
links = node_tree.links
links.new(group_inputs.outputs['Color'], separateRgbNode.inputs['Image'])
links.new(group_inputs.outputs['Color'], separateRgbNode.inputs['Color'])
links.new(group_inputs.outputs['Alpha'], invertGNode.inputs['Color'])
links.new(separateRgbNode.outputs['R'], invertRNode.inputs['Color'])
links.new(separateRgbNode.outputs['Red'], invertRNode.inputs['Color'])

links.new(invertRNode.outputs['Color'], mathMultiplyRNode.inputs[0])
links.new(invertGNode.outputs['Color'], mathMultiplyGNode.inputs[0])
Expand All @@ -329,10 +336,10 @@ def haydee_normal_map():
links.new(mathAddNode.outputs['Value'], mathSubtractNode.inputs[1])
links.new(mathSubtractNode.outputs['Value'], mathRootNode.inputs[0])

links.new(invertRNode.outputs['Color'], combineRgbNode.inputs['R'])
links.new(invertGNode.outputs['Color'], combineRgbNode.inputs['G'])
links.new(mathRootNode.outputs['Value'], combineRgbNode.inputs['B'])
links.new(invertRNode.outputs['Color'], combineRgbNode.inputs['Red'])
links.new(invertGNode.outputs['Color'], combineRgbNode.inputs['Green'])
links.new(mathRootNode.outputs['Value'], combineRgbNode.inputs['Blue'])

links.new(combineRgbNode.outputs['Image'], group_outputs.inputs['Normal'])
links.new(combineRgbNode.outputs['Color'], group_outputs.inputs['Normal'])

return node_tree
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@ With Blender 2.80 released there where many changes.
From v1.2.0 of this addon will only work with Blender 2.80+ (and viceversa).
For Blender 2.79 download v1.0.6

- Blender 2.80 ==> v1.2.0
- Blender 2.79 ==> v1.0.6
- Blender 5.0.1+ ==> v1.4.0 (Current Version)
- [Blender 2.80+ ==> v1.3.1](https://github.com/johnzero7/HaydeeTools/releases)
- [Blender 2.79 ==> v1.0.6](https://github.com/johnzero7/HaydeeTools/releases)

Main Features:

Expand Down
6 changes: 3 additions & 3 deletions __init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

bl_info = {
"name": "Haydee 1 & 2 I/O Scripts",
"author": "johnzero7, Pooka, Kein",
"version": (1, 3, 1),
"blender": (2, 80, 0),
"author": "johnzero7, Pooka, Kein, artryazanov",
"version": (1, 4, 0),
"blender": (5, 0, 1),
"location": "File > Import-Export > HaydeeTools",
"description": "Import-Export scripts for Haydee",
"warning": "",
Expand Down