[Bf-extensions-cvs] [ae29cfd1] blender-v3.3-release: glTF: Merge glTF Material Output nodes into a single one

Julien Duroure noreply at git.blender.org
Mon Aug 8 17:04:04 CEST 2022


Commit: ae29cfd1860e53e61d1b58d9c406638927a8ab40
Author: Julien Duroure
Date:   Mon Aug 8 17:03:41 2022 +0200
Branches: blender-v3.3-release
https://developer.blender.org/rBAae29cfd1860e53e61d1b58d9c406638927a8ab40

glTF: Merge glTF Material Output nodes into a single one

===================================================================

M	io_scene_gltf2/__init__.py
M	io_scene_gltf2/blender/com/gltf2_blender_material_helpers.py
M	io_scene_gltf2/blender/com/gltf2_blender_ui.py
M	io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py
M	io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_specular.py
M	io_scene_gltf2/blender/exp/gltf2_blender_get.py
M	io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_sheen.py
M	io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py

===================================================================

diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index 3fb5ad4d..503a9edd 100755
--- a/io_scene_gltf2/__init__.py
+++ b/io_scene_gltf2/__init__.py
@@ -4,7 +4,7 @@
 bl_info = {
     'name': 'glTF 2.0 format',
     'author': 'Julien Duroure, Scurest, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors',
-    "version": (3, 3, 23),
+    "version": (3, 3, 24),
     'blender': (3, 3, 0),
     'location': 'File > Import-Export',
     'description': 'Import-Export as glTF 2.0',
diff --git a/io_scene_gltf2/blender/com/gltf2_blender_material_helpers.py b/io_scene_gltf2/blender/com/gltf2_blender_material_helpers.py
index 7dfef7dc..4f8417e9 100755
--- a/io_scene_gltf2/blender/com/gltf2_blender_material_helpers.py
+++ b/io_scene_gltf2/blender/com/gltf2_blender_material_helpers.py
@@ -17,21 +17,9 @@ def create_settings_group(name):
     thicknessFactor.default_value = 0.0
     gltf_node_group.nodes.new('NodeGroupOutput')
     gltf_node_group_input = gltf_node_group.nodes.new('NodeGroupInput')
-    gltf_node_group_input.location = -200, 0
-    return gltf_node_group
-
-def get_gltf_pbr_non_converted_name():
-    return "original glTF PBR data"
-
-def create_gltf_pbr_non_converted_group(name):
-    gltf_node_group = bpy.data.node_groups.new(name, 'ShaderNodeTree')
-
-    specular = gltf_node_group.inputs.new("NodeSocketFloat", "specular glTF")
+    specular = gltf_node_group.inputs.new("NodeSocketFloat", "Specular")
     specular.default_value = 1.0
-    specularColor = gltf_node_group.inputs.new("NodeSocketColor", "specularColor glTF")
+    specularColor = gltf_node_group.inputs.new("NodeSocketColor", "Specular Color")
     specularColor.default_value = [1.0,1.0,1.0,1.0]
-
-    gltf_node_group.nodes.new('NodeGroupOutput')
-    gltf_node_group_input = gltf_node_group.nodes.new('NodeGroupInput')
-    gltf_node_group_input.location = -400, 0
-    return gltf_node_group    
\ No newline at end of file
+    gltf_node_group_input.location = -200, 0
+    return gltf_node_group
diff --git a/io_scene_gltf2/blender/com/gltf2_blender_ui.py b/io_scene_gltf2/blender/com/gltf2_blender_ui.py
index 2f24c081..406a15f1 100644
--- a/io_scene_gltf2/blender/com/gltf2_blender_ui.py
+++ b/io_scene_gltf2/blender/com/gltf2_blender_ui.py
@@ -3,7 +3,6 @@
 
 import bpy
 from ..com.gltf2_blender_material_helpers import get_gltf_node_name, create_settings_group
-from ..com.gltf2_blender_material_helpers import get_gltf_pbr_non_converted_name, create_gltf_pbr_non_converted_group
 
 ################ glTF Material Output node ###########################################
 
@@ -43,36 +42,6 @@ def add_gltf_settings_to_menu(self, context) :
     if bpy.context.preferences.addons['io_scene_gltf2'].preferences.settings_node_ui is True:
         self.layout.operator("node.gltf_settings_node_operator")
 
-class NODE_OT_GLTF_PBR_NON_CONVERTED_EXTENSIONS(bpy.types.Operator):
-    bl_idname = "node.gltf_pbr_non_converted_extensions_operator"
-    bl_label  = "glTF Original PBR data"
-    bl_description = "Add a node to the active tree for glTF export"
-
-    @classmethod
-    def poll(cls, context):
-        space = context.space_data
-        return space.type == "NODE_EDITOR" \
-            and context.object and context.object.active_material \
-            and context.object.active_material.use_nodes is True \
-            and bpy.context.preferences.addons['io_scene_gltf2'].preferences.settings_node_ui is True
-
-    def execute(self, context):
-        gltf_node_name = get_gltf_pbr_non_converted_name()
-        if gltf_node_name in bpy.data.node_groups:
-            my_group = bpy.data.node_groups[get_gltf_pbr_non_converted_name()]
-        else:
-            my_group = create_gltf_pbr_non_converted_group(gltf_node_name)
-        node_tree = context.object.active_material.node_tree
-        new_node = node_tree.nodes.new("ShaderNodeGroup")
-        new_node.node_tree = bpy.data.node_groups[my_group.name]
-        return {"FINISHED"}
-
-
-def add_gltf_pbr_non_converted_extensions_to_menu(self, context) :
-    if bpy.context.preferences.addons['io_scene_gltf2'].preferences.settings_node_ui is True:
-        self.layout.operator("node.gltf_pbr_non_converted_extensions_operator")
-
-
 ################################### KHR_materials_variants ####################
 
 # Global UI panel
@@ -469,9 +438,7 @@ class SCENE_OT_gltf2_remove_material_variant(bpy.types.Operator):
 
 def register():
     bpy.utils.register_class(NODE_OT_GLTF_SETTINGS)
-    bpy.utils.register_class(NODE_OT_GLTF_PBR_NON_CONVERTED_EXTENSIONS)
     bpy.types.NODE_MT_category_SH_NEW_OUTPUT.append(add_gltf_settings_to_menu)
-    bpy.types.NODE_MT_category_SH_NEW_OUTPUT.append(add_gltf_pbr_non_converted_extensions_to_menu)
 
 def variant_register():
     bpy.utils.register_class(SCENE_OT_gltf2_display_variant)
@@ -499,7 +466,6 @@ def variant_register():
 
 def unregister():
     bpy.utils.unregister_class(NODE_OT_GLTF_SETTINGS)
-    bpy.utils.unregister_class(NODE_OT_GLTF_PBR_NON_CONVERTED_EXTENSIONS)
 
 def variant_unregister():
     bpy.utils.unregister_class(SCENE_OT_gltf2_variant_add)
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py
index 69900c1b..81e79a50 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py
@@ -188,7 +188,7 @@ def __get_image_data(sockets, export_settings) -> ExportImage:
     results = [__get_tex_from_socket(socket, export_settings) for socket in sockets]
 
     # Check if we need a simple mapping or more complex calculation
-    if any([socket.name == "Specular" for socket in sockets]):
+    if any([socket.name == "Specular" and socket.node.type == "BSDF_PRINCIPLED" for socket in sockets]):
         return __get_image_data_specular(sockets, results, export_settings)
     else:
         return __get_image_data_mapping(sockets, results, export_settings)
@@ -238,7 +238,7 @@ def __get_image_data_mapping(sockets, results, export_settings) -> ExportImage:
                 dst_chan = Channel.G
             elif socket.name == 'Thickness': # For KHR_materials_volume
                 dst_chan = Channel.G
-            elif socket.name == "specular glTF": # For original KHR_material_specular
+            elif socket.name == "Specular": # For original KHR_material_specular
                 dst_chan = Channel.A
             elif socket.name == "Sigma": # For KHR_materials_sheen
                 dst_chan = Channel.A
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_specular.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_specular.py
index 30b32198..22414b13 100644
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_specular.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_specular.py
@@ -13,8 +13,8 @@ from io_scene_gltf2.blender.exp import gltf2_blender_gather_texture_info
 def export_original_specular(blender_material, export_settings):
     specular_extension = {}
 
-    original_specular_socket = gltf2_blender_get.get_socket_original(blender_material, 'specular glTF')
-    original_specularcolor_socket = gltf2_blender_get.get_socket_original(blender_material, 'specularColor glTF')
+    original_specular_socket = gltf2_blender_get.get_socket_old(blender_material, 'Specular')
+    original_specularcolor_socket = gltf2_blender_get.get_socket_old(blender_material, 'Specular Color')
 
     if original_specular_socket is None or original_specularcolor_socket is None:
         return None, None
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_get.py b/io_scene_gltf2/blender/exp/gltf2_blender_get.py
index da6e9b57..9e468186 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_get.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_get.py
@@ -4,7 +4,7 @@
 import bpy
 from mathutils import Vector, Matrix
 
-from ..com.gltf2_blender_material_helpers import get_gltf_node_name, get_gltf_node_old_name, get_gltf_pbr_non_converted_name
+from ..com.gltf2_blender_material_helpers import get_gltf_node_name, get_gltf_node_old_name
 from ...blender.com.gltf2_blender_conversion import texture_transform_blender_to_gltf
 from io_scene_gltf2.io.com import gltf2_io_debug
 from io_scene_gltf2.blender.exp import gltf2_blender_search_node_tree
@@ -105,24 +105,6 @@ def get_socket_old(blender_material: bpy.types.Material, name: str):
 
     return None
 
-def get_socket_original(blender_material: bpy.types.Material, name: str):
-    """
-    For a given material input name, retrieve the corresponding node tree socket in the special glTF node group.
-
-    :param blender_material: a blender material for which to get the socket
-    :param name: the name of the socket
-    :return: a blender NodeSocket
-    """
-    gltf_node_group_name = get_gltf_pbr_non_converted_name().lower()
-    if blender_material.node_tree and blender_material.use_nodes:
-        nodes = [n for n in blender_material.node_tree.nodes if \
-            isinstance(n, bpy.types.ShaderNodeGroup) and  n.node_tree.name.lower() == gltf_node_group_name]
-        inputs = sum([[input for input in node.inputs if input.name == name] for node in nodes], [])
-        if inputs:
-            return inputs[0]
-
-    return None    
-
 def check_if_is_linked_to_active_output(shader_socket):
     for link in shader_socket.links:
         if isinstance(link.to_node, bpy.types.ShaderNodeOutputMaterial) and link.to_node.is_active_output is True:
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_sheen.py b/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_sheen.py
index 3560d094..aa5cef75 100644
--- a/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_sheen.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_sheen.py
@@ -4,7 +4,7 @@
 from ...io.com.gltf2_io import TextureInfo
 from .gltf2_blender_texture import texture
 from .gltf2_blender_image import BlenderImage
-from ..exp.gltf2_blender_image import TmpImageGuard, make_temp_image_copy
+from ..exp.gltf2_blender_image import TmpImageGuard
 import numpy as np
 import bpy
 
diff --git a/io_scene_gltf2/blend

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list