[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