[Bf-extensions-cvs] [042fbefa] master: glTF importer/exporter: Manage some official Khronos Extensions about Materials

Julien Duroure noreply at git.blender.org
Thu Jul 7 08:04:45 CEST 2022


Commit: 042fbefac686666190915d206600a5dab8e03066
Author: Julien Duroure
Date:   Thu Jul 7 08:03:39 2022 +0200
Branches: master
https://developer.blender.org/rBA042fbefac686666190915d206600a5dab8e03066

glTF importer/exporter: Manage some official Khronos Extensions about Materials

    KHR_materials_ior
    KHR_materials_sheen
    KHR_materials_specular
    KHR_materials_transmission
    KHR_materials_variants
    KHR_materials_emissive_strength
    KHR_materials_volume

Documentation update is still in progress

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

M	io_scene_gltf2/__init__.py
A	io_scene_gltf2/blender/com/gltf2_blender_default.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_export_keys.py
M	io_scene_gltf2/blender/exp/gltf2_blender_gather.py
M	io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py
M	io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_clearcoat.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_emission.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_ior.py
M	io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_pbr_metallic_roughness.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_sheen.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_specular.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_transmission.py
M	io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_unlit.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_variants.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_volume.py
M	io_scene_gltf2/blender/exp/gltf2_blender_gather_primitives.py
M	io_scene_gltf2/blender/exp/gltf2_blender_gather_texture.py
M	io_scene_gltf2/blender/exp/gltf2_blender_gather_texture_info.py
M	io_scene_gltf2/blender/exp/gltf2_blender_gather_tree.py
M	io_scene_gltf2/blender/exp/gltf2_blender_get.py
M	io_scene_gltf2/blender/exp/gltf2_blender_image.py
A	io_scene_gltf2/blender/exp/gltf2_blender_texture_specular.py
A	io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_ior.py
M	io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_pbrSpecularGlossiness.py
A	io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_sheen.py
A	io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_specular.py
A	io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_transmission.py
M	io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_unlit.py
A	io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_volume.py
M	io_scene_gltf2/blender/imp/gltf2_blender_gltf.py
M	io_scene_gltf2/blender/imp/gltf2_blender_material.py
M	io_scene_gltf2/blender/imp/gltf2_blender_mesh.py
M	io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py
M	io_scene_gltf2/blender/imp/gltf2_blender_texture.py
M	io_scene_gltf2/io/com/gltf2_io_constants.py
A	io_scene_gltf2/io/com/gltf2_io_variants.py
M	io_scene_gltf2/io/imp/gltf2_io_gltf.py

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

diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index bf23d017..358759fa 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, 12),
+    "version": (3, 3, 13),
     'blender': (3, 3, 0),
     'location': 'File > Import-Export',
     'description': 'Import-Export as glTF 2.0',
@@ -259,6 +259,14 @@ class ExportGLTF2_Base:
         default='EXPORT'
     )
 
+    export_original_specular: BoolProperty(
+        name='Export original PBR Specular',
+        description=(
+            'Export original glTF PBR Specular, instead of Blender Principled Shader Specular'
+        ),
+        default=False,
+    )
+
     export_colors: BoolProperty(
         name='Vertex Colors',
         description='Export vertex colors with meshes',
@@ -447,13 +455,6 @@ class ExportGLTF2_Base:
         default=False
     )
 
-    export_displacement: BoolProperty(
-        name='Displacement Textures (EXPERIMENTAL)',
-        description='EXPERIMENTAL: Export displacement textures. '
-                    'Uses incomplete "KHR_materials_displacement" glTF extension',
-        default=False
-    )
-
     will_save_settings: BoolProperty(
         name='Remember Export Settings',
         description='Store glTF export settings in the Blender project',
@@ -564,6 +565,7 @@ class ExportGLTF2_Base:
         export_settings['gltf_colors'] = self.export_colors
         export_settings['gltf_cameras'] = self.export_cameras
 
+        export_settings['gltf_original_specular'] = self.export_original_specular
 
         export_settings['gltf_visible'] = self.use_visible
         export_settings['gltf_renderable'] = self.use_renderable
@@ -611,7 +613,6 @@ class ExportGLTF2_Base:
             export_settings['gltf_morph_tangent'] = False
 
         export_settings['gltf_lights'] = self.export_lights
-        export_settings['gltf_displacement'] = self.export_displacement
 
         export_settings['gltf_binary'] = bytearray()
         export_settings['gltf_binaryfilename'] = (
@@ -756,6 +757,22 @@ class GLTF_PT_export_geometry(bpy.types.Panel):
 
         return operator.bl_idname == "EXPORT_SCENE_OT_gltf"
 
+    def draw(self, context):
+        pass
+
+class GLTF_PT_export_geometry_mesh(bpy.types.Panel):
+    bl_space_type = 'FILE_BROWSER'
+    bl_region_type = 'TOOL_PROPS'
+    bl_label = "Mesh"
+    bl_parent_id = "GLTF_PT_export_geometry"
+    bl_options = {'DEFAULT_CLOSED'}
+
+    @classmethod
+    def poll(cls, context):
+        sfile = context.space_data
+        operator = sfile.active_operator
+        return operator.bl_idname == "EXPORT_SCENE_OT_gltf"
+
     def draw(self, context):
         layout = self.layout
         layout.use_property_split = True
@@ -776,11 +793,56 @@ class GLTF_PT_export_geometry(bpy.types.Panel):
         col.prop(operator, 'use_mesh_edges')
         col.prop(operator, 'use_mesh_vertices')
 
+
+class GLTF_PT_export_geometry_material(bpy.types.Panel):
+    bl_space_type = 'FILE_BROWSER'
+    bl_region_type = 'TOOL_PROPS'
+    bl_label = "Material"
+    bl_parent_id = "GLTF_PT_export_geometry"
+    bl_options = {'DEFAULT_CLOSED'}
+
+    @classmethod
+    def poll(cls, context):
+        sfile = context.space_data
+        operator = sfile.active_operator
+        return operator.bl_idname == "EXPORT_SCENE_OT_gltf"
+
+    def draw(self, context):
+        layout = self.layout
+        layout.use_property_split = True
+        layout.use_property_decorate = False  # No animation.
+
+        sfile = context.space_data
+        operator = sfile.active_operator
+
         layout.prop(operator, 'export_materials')
         col = layout.column()
         col.active = operator.export_materials == "EXPORT"
         col.prop(operator, 'export_image_format')
 
+class GLTF_PT_export_geometry_original_pbr(bpy.types.Panel):
+    bl_space_type = 'FILE_BROWSER'
+    bl_region_type = 'TOOL_PROPS'
+    bl_label = "PBR Extensions"
+    bl_parent_id = "GLTF_PT_export_geometry_material"
+    bl_options = {'DEFAULT_CLOSED'}
+
+    @classmethod
+    def poll(cls, context):
+        sfile = context.space_data
+        operator = sfile.active_operator
+        return operator.bl_idname == "EXPORT_SCENE_OT_gltf"
+
+    def draw(self, context):
+        layout = self.layout
+        layout.use_property_split = True
+        layout.use_property_decorate = False  # No animation.
+
+        sfile = context.space_data
+        operator = sfile.active_operator
+
+        layout.prop(operator, 'export_original_specular')
+
 
 class GLTF_PT_export_geometry_compression(bpy.types.Panel):
     bl_space_type = 'FILE_BROWSER'
@@ -1182,6 +1244,14 @@ class ImportGLTF2(Operator, ImportHelper):
             self.loglevel = logging.NOTSET
 
 
+def gltf_variant_ui_update(self, context):
+    from .blender.com.gltf2_blender_ui import variant_register, variant_unregister
+    if self.KHR_materials_variants_ui is True:
+        # register all needed types
+        variant_register()
+    else:
+        variant_unregister()
+
 class GLTF_AddonPreferences(bpy.types.AddonPreferences):
     bl_idname = __package__
 
@@ -1190,11 +1260,18 @@ class GLTF_AddonPreferences(bpy.types.AddonPreferences):
             description="Displays glTF Settings node in Shader Editor (Menu Add > Output)"
             )
 
+    KHR_materials_variants_ui : bpy.props.BoolProperty(
+        default= False,
+        description="Displays glTF UI to manage material variants",
+        update=gltf_variant_ui_update
+        )
+
 
     def draw(self, context):
         layout = self.layout
         row = layout.row()
         row.prop(self, "settings_node_ui", text="Shader Editor Add-ons")
+        row.prop(self, "KHR_materials_variants_ui", text="Material Variants")
 
 def menu_func_import(self, context):
     self.layout.operator(ImportGLTF2.bl_idname, text='glTF 2.0 (.glb/.gltf)')
@@ -1206,6 +1283,9 @@ classes = (
     GLTF_PT_export_include,
     GLTF_PT_export_transform,
     GLTF_PT_export_geometry,
+    GLTF_PT_export_geometry_mesh,
+    GLTF_PT_export_geometry_material,
+    GLTF_PT_export_geometry_original_pbr,
     GLTF_PT_export_geometry_compression,
     GLTF_PT_export_animation,
     GLTF_PT_export_animation_export,
@@ -1225,6 +1305,8 @@ def register():
     # bpy.utils.register_module(__name__)
 
     blender_ui.register()
+    if bpy.context.preferences.addons['io_scene_gltf2'].preferences.KHR_materials_variants_ui is True:
+        blender_ui.variant_register()
 
     # add to the export / import menu
     bpy.types.TOPBAR_MT_file_export.append(menu_func_export)
@@ -1233,6 +1315,10 @@ def register():
 
 def unregister():
     import io_scene_gltf2.blender.com.gltf2_blender_ui as blender_ui
+    blender_ui.unregister()
+    if bpy.context.preferences.addons['io_scene_gltf2'].preferences.KHR_materials_variants_ui is True:
+        blender_ui.variant_unregister()
+
     for c in classes:
         bpy.utils.unregister_class(c)
     for f in exporter_extension_panel_unregister_functors:
@@ -1243,8 +1329,6 @@ def unregister():
         f()
     importer_extension_panel_unregister_functors.clear()
 
-    blender_ui.unregister()
-
     # bpy.utils.unregister_module(__name__)
 
     # remove from the export / import menu
diff --git a/io_scene_gltf2/blender/com/gltf2_blender_default.py b/io_scene_gltf2/blender/com/gltf2_blender_default.py
new file mode 100644
index 00000000..c3951f4e
--- /dev/null
+++ b/io_scene_gltf2/blender/com/gltf2_blender_default.py
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright 2018-2022 The glTF-Blender-IO authors.
+
+BLENDER_IOR = 1.45
+BLENDER_SPECULAR = 0.5
+BLENDER_SPECULAR_TINT = 0.0
\ No newline at end of file
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 7b90b0a3..a44562a1 100755
--- a/io_scene_gltf2/blender/com/gltf2_blender_material_helpers.py
+++ b/io_scene_gltf2/blender/com/gltf2_blender_material_helpers.py
@@ -9,7 +9,25 @@ def get_gltf_node_name():
 def create_settings_group(name):
     gltf_node_group = bpy.data.node_groups.new(name, 'ShaderNodeTree')
     gltf_node_group.inputs.new("NodeSocketFloat", "Occlusion")
+    thicknessFactor  = gltf_node_group.inputs.new("NodeSocketFloat", "Thickness")
+    thicknessFactor.default_value = 1.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
\ No newline at end of file
+    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.default_value = 1.0
+    specularColor = gltf_node_group.inputs.new("NodeSocketColor", "specularColor glTF")
+    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
diff --git a/io_scene_gltf2/blender/com/gltf2_blender_ui.py b/io_scene_gltf2/blender/com/gltf2_blender_ui.py
index 59c364fb..7895d3d4 100644
--- a/io_scene_gltf2/blender/com/gltf2_blender_ui.py
+++ b/io_scene_gltf2/blender/com/gltf2_blender_ui.py
@@ -3,6 +3,9 @@
 
 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 Settings node ###########################################
 
 def create_gltf_ao_group(operator, group_name):
 
@@ -40,10 +43,479 @@ def add_gltf_settings_to_menu(self, context) :
     if bpy.context.preferences.addons['io_scene_gltf

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list