diff --git a/.gitignore b/.gitignore index f219538..1e448be 100644 --- a/.gitignore +++ b/.gitignore @@ -57,3 +57,4 @@ webspynner/__pychache__/ *~ .vscode +.idea/ diff --git a/HaydeeExporter.py b/HaydeeExporter.py index 23752a9..bdc1414 100644 --- a/HaydeeExporter.py +++ b/HaydeeExporter.py @@ -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 @@ -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, diff --git a/HaydeeImporter.py b/HaydeeImporter.py index 8137fe6..71b7abe 100644 --- a/HaydeeImporter.py +++ b/HaydeeImporter.py @@ -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") @@ -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") @@ -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) diff --git a/HaydeeNodeMat.py b/HaydeeNodeMat.py index 94546bf..d279fca 100644 --- a/HaydeeNodeMat.py +++ b/HaydeeNodeMat.py @@ -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' @@ -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) @@ -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']) @@ -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]) @@ -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]) @@ -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 diff --git a/README.md b/README.md index a619747..e68a6b5 100644 --- a/README.md +++ b/README.md @@ -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: diff --git a/__init__.py b/__init__.py index 788d4a6..d7778ce 100644 --- a/__init__.py +++ b/__init__.py @@ -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": "",