From 4e6b970c3f1988f43ff49aa19e534fed97b74b91 Mon Sep 17 00:00:00 2001 From: lpierabella <77288191+lpierabella@users.noreply.github.com> Date: Tue, 22 Mar 2022 16:26:43 +0100 Subject: [PATCH] merge main into blender-v3.1-release --- addons/io_scene_gltf2_msfs/__init__.py | 2 +- .../blender/msfs_material_function.py | 18 ++++++++++++------ .../blender/msfs_material_prop_update.py | 2 +- addons/io_scene_gltf2_msfs/io/msfs_gizmo.py | 3 +++ addons/io_scene_gltf2_msfs/io/msfs_light.py | 5 +++++ .../io/msfs_multi_export.py | 13 +++++++------ 6 files changed, 29 insertions(+), 14 deletions(-) diff --git a/addons/io_scene_gltf2_msfs/__init__.py b/addons/io_scene_gltf2_msfs/__init__.py index 2790de98..75053130 100644 --- a/addons/io_scene_gltf2_msfs/__init__.py +++ b/addons/io_scene_gltf2_msfs/__init__.py @@ -25,7 +25,7 @@ "author": "Luca Pierabella, Wing42, pepperoni505, ronh991, tml1024, and others", "description": "This toolkit prepares your 3D assets to be used for Microsoft Flight Simulator", "blender": (3, 1, 0), - "version": (1, 1, 2), + "version": (1, 1, 3), "location": "File > Import-Export", "category": "Import-Export", "tracker_url": "https://github.com/AsoboStudio/glTF-Blender-IO-MSFS" diff --git a/addons/io_scene_gltf2_msfs/blender/msfs_material_function.py b/addons/io_scene_gltf2_msfs/blender/msfs_material_function.py index a27e009c..f32926da 100644 --- a/addons/io_scene_gltf2_msfs/blender/msfs_material_function.py +++ b/addons/io_scene_gltf2_msfs/blender/msfs_material_function.py @@ -205,12 +205,16 @@ def createNodetree(self): self.nodebsdf = self.addNode( "ShaderNodeBsdfPrincipled", {"location": (500.0, 0.0), "hide": False} ) - gltfSettingsNodeTree = bpy.data.node_groups.new( - "glTF Settings", "ShaderNodeTree" - ) - gltfSettingsNodeTree.nodes.new("NodeGroupInput") - gltfSettingsNodeTree.inputs.new("NodeSocketFloat", "Occlusion") - gltfSettingsNodeTree.inputs[0].default_value = 1.000 + if bpy.data.node_groups.get(MSFS_ShaderNodes.glTFSettings.value): + gltfSettingsNodeTree = bpy.data.node_groups[MSFS_ShaderNodes.glTFSettings.value] + else: + gltfSettingsNodeTree = bpy.data.node_groups.new( + "glTF Settings", "ShaderNodeTree" + ) + gltfSettingsNodeTree.nodes.new("NodeGroupInput") + gltfSettingsNodeTree.inputs.new("NodeSocketFloat", "Occlusion") + gltfSettingsNodeTree.inputs[0].default_value = 1.000 + self.nodeglTFSettings = self.addNode( "ShaderNodeGroup", { @@ -743,11 +747,13 @@ def setNormalScale(self, scale): def setDetailNormalTex(self, tex): self.nodeDetailNormalTex = self.getNode(MSFS_ShaderNodes.detailNormalTex.value) self.nodeDetailNormalTex.image = tex + self.nodeDetailNormalTex.image.colorspace_settings.name = "Non-Color" self.updateNormalLinks() def setNormalTex(self, tex): self.nodeNormalTex = self.getNode(MSFS_ShaderNodes.normalTex.value) self.nodeNormalTex.image = tex + self.nodeNormalTex.image.colorspace_settings.name = "Non-Color" self.updateNormalLinks() def updateNormalLinks(self): diff --git a/addons/io_scene_gltf2_msfs/blender/msfs_material_prop_update.py b/addons/io_scene_gltf2_msfs/blender/msfs_material_prop_update.py index 2a3d6296..a7d47b92 100644 --- a/addons/io_scene_gltf2_msfs/blender/msfs_material_prop_update.py +++ b/addons/io_scene_gltf2_msfs/blender/msfs_material_prop_update.py @@ -63,7 +63,7 @@ def getMaterial(mat): return MSFS_Invisible(mat) elif mat.msfs_material_type == "msfs_fake_terrain": return MSFS_Fake_Terrain(mat) - elif mat.msfs_material_type == "msfs_fresnel": + elif mat.msfs_material_type == "msfs_fresnel_fade": return MSFS_Fresnel_Fade(mat) elif mat.msfs_material_type == "msfs_env_occluder": return MSFS_Environment_Occluder(mat) diff --git a/addons/io_scene_gltf2_msfs/io/msfs_gizmo.py b/addons/io_scene_gltf2_msfs/io/msfs_gizmo.py index 60c07494..ede28d34 100644 --- a/addons/io_scene_gltf2_msfs/io/msfs_gizmo.py +++ b/addons/io_scene_gltf2_msfs/io/msfs_gizmo.py @@ -136,6 +136,9 @@ def export(nodes, blender_scene, export_settings): child.name ) # The glTF exporter will ALWAYS set the node name as the blender name + if blender_object is None: # However, there are cases where the exporter creates fake nodes that don't exist in the scene + continue + if ( blender_object.parent is None or blender_object.parent.type != "MESH" ): # We only need the collision gizmos that are parented to a mesh diff --git a/addons/io_scene_gltf2_msfs/io/msfs_light.py b/addons/io_scene_gltf2_msfs/io/msfs_light.py index af810be7..8951457a 100644 --- a/addons/io_scene_gltf2_msfs/io/msfs_light.py +++ b/addons/io_scene_gltf2_msfs/io/msfs_light.py @@ -50,6 +50,11 @@ def create(gltf2_node, blender_node, blender_light, import_settings): @staticmethod def export(gltf2_object, blender_object): + # First, clear all KHR_lights_punctual extensions from children. TODO: remove children? + for child in gltf2_object.children: + if child.extensions and child.extensions.get("KHR_lights_punctual"): + child.extensions.pop("KHR_lights_punctual") + angle = 360.0 if blender_object.data.type == 'SPOT': angle = (180.0 / math.pi) * blender_object.data.spot_size diff --git a/addons/io_scene_gltf2_msfs/io/msfs_multi_export.py b/addons/io_scene_gltf2_msfs/io/msfs_multi_export.py index 51267d57..517865ba 100644 --- a/addons/io_scene_gltf2_msfs/io/msfs_multi_export.py +++ b/addons/io_scene_gltf2_msfs/io/msfs_multi_export.py @@ -92,25 +92,26 @@ def execute(self, context): ) lods = etree.SubElement(root, "LODS") - lod_values = [] + lod_files = {} for lod in lod_group.lods: if not MSFS_LODGroupUtility.lod_is_visible(context, lod): continue if lod.enabled: - lod_values.append(lod.lod_value) - lod_values = sorted(lod_values, reverse=True) + lod_files[lod.file_name] = lod.lod_value - for lod_value in lod_values: + lod_files = sorted(lod_files.items(), reverse=True) + + for file_name, lod_value in lod_files: etree.SubElement( lods, "LOD", minSize=str(lod_value), - ModelFile=os.path.splitext(lod.file_name)[0] + ".gltf", + ModelFile=os.path.splitext(file_name)[0] + ".gltf", ) - if lod_values: + if lod_files: # Format XML dom = xml.dom.minidom.parseString(etree.tostring(root)) xml_string = dom.toprettyxml(encoding="utf-8")