Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Duroure <julien.duroure@gmail.com>2022-03-13 13:17:33 +0300
committerJulien Duroure <julien.duroure@gmail.com>2022-03-13 13:17:33 +0300
commit5838e260366aebd1a1b014bcd84ad05728739005 (patch)
tree8f70b8115bb9fd8c6ef43cb57443b9c077b7d811
parent7cdde96d329d6221090d1f23ea70a7b90c2b9739 (diff)
glTF exporter: Add glTF settings node in shader menu
This menu (in Add > Output) will be displayed only if activated in addon preferences. The node is sed for AO export. This is a shortcut, avoiding user to create it him/herself
-rwxr-xr-xio_scene_gltf2/__init__.py25
-rwxr-xr-xio_scene_gltf2/blender/com/gltf2_blender_material_helpers.py9
-rw-r--r--io_scene_gltf2/blender/com/gltf2_blender_ui.py49
-rwxr-xr-xio_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py9
4 files changed, 83 insertions, 9 deletions
diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index b290f946..7c39ac3f 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, 2, 9),
+ "version": (3, 2, 10),
'blender': (3, 1, 0),
'location': 'File > Import-Export',
'description': 'Import-Export as glTF 2.0',
@@ -1171,6 +1171,20 @@ class ImportGLTF2(Operator, ImportHelper):
self.loglevel = logging.NOTSET
+class GLTF_AddonPreferences(bpy.types.AddonPreferences):
+ bl_idname = __package__
+
+ settings_node_ui : bpy.props.BoolProperty(
+ default= False,
+ description="Displays glTF Settings node in Shader Editor (Menu Add > Ouput)"
+ )
+
+
+ def draw(self, context):
+ layout = self.layout
+ row = layout.row()
+ row.prop(self, "settings_node_ui", text="Shader Editor Add-ons")
+
def menu_func_import(self, context):
self.layout.operator(ImportGLTF2.bl_idname, text='glTF 2.0 (.glb/.gltf)')
@@ -1188,21 +1202,26 @@ classes = (
GLTF_PT_export_animation_skinning,
GLTF_PT_export_user_extensions,
ImportGLTF2,
- GLTF_PT_import_user_extensions
+ GLTF_PT_import_user_extensions,
+ GLTF_AddonPreferences
)
def register():
+ import io_scene_gltf2.blender.com.gltf2_blender_ui as blender_ui
for c in classes:
bpy.utils.register_class(c)
# bpy.utils.register_module(__name__)
+ blender_ui.register()
+
# add to the export / import menu
bpy.types.TOPBAR_MT_file_export.append(menu_func_export)
bpy.types.TOPBAR_MT_file_import.append(menu_func_import)
def unregister():
+ import io_scene_gltf2.blender.com.gltf2_blender_ui as blender_ui
for c in classes:
bpy.utils.unregister_class(c)
for f in exporter_extension_panel_unregister_functors:
@@ -1213,6 +1232,8 @@ 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_material_helpers.py b/io_scene_gltf2/blender/com/gltf2_blender_material_helpers.py
index f3d7122e..7b90b0a3 100755
--- a/io_scene_gltf2/blender/com/gltf2_blender_material_helpers.py
+++ b/io_scene_gltf2/blender/com/gltf2_blender_material_helpers.py
@@ -1,6 +1,15 @@
# SPDX-License-Identifier: Apache-2.0
# Copyright 2018-2021 The glTF-Blender-IO authors.
+import bpy
def get_gltf_node_name():
return "glTF Settings"
+
+def create_settings_group(name):
+ gltf_node_group = bpy.data.node_groups.new(name, 'ShaderNodeTree')
+ gltf_node_group.inputs.new("NodeSocketFloat", "Occlusion")
+ 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
diff --git a/io_scene_gltf2/blender/com/gltf2_blender_ui.py b/io_scene_gltf2/blender/com/gltf2_blender_ui.py
new file mode 100644
index 00000000..59c364fb
--- /dev/null
+++ b/io_scene_gltf2/blender/com/gltf2_blender_ui.py
@@ -0,0 +1,49 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright 2018-2022 The glTF-Blender-IO authors.
+
+import bpy
+from ..com.gltf2_blender_material_helpers import get_gltf_node_name, create_settings_group
+
+def create_gltf_ao_group(operator, group_name):
+
+ # create a new group
+ gltf_ao_group = bpy.data.node_groups.new(group_name, "ShaderNodeTree")
+
+ return gltf_ao_group
+
+class NODE_OT_GLTF_SETTINGS(bpy.types.Operator):
+ bl_idname = "node.gltf_settings_node_operator"
+ bl_label = "glTF Settings"
+
+
+ @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_settings_node_name = get_gltf_node_name()
+ if gltf_settings_node_name in bpy.data.node_groups:
+ my_group = bpy.data.node_groups[get_gltf_node_name()]
+ else:
+ my_group = create_settings_group(gltf_settings_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_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")
+
+
+def register():
+ bpy.utils.register_class(NODE_OT_GLTF_SETTINGS)
+ bpy.types.NODE_MT_category_SH_NEW_OUTPUT.append(add_gltf_settings_to_menu)
+
+def unregister():
+ bpy.utils.unregister_class(NODE_OT_GLTF_SETTINGS)
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py b/io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py
index 1780998c..a5d10a7a 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py
@@ -3,7 +3,7 @@
import bpy
from ...io.com.gltf2_io import TextureInfo, MaterialPBRMetallicRoughness
-from ..com.gltf2_blender_material_helpers import get_gltf_node_name
+from ..com.gltf2_blender_material_helpers import get_gltf_node_name, create_settings_group
from .gltf2_blender_texture import texture
from .gltf2_blender_KHR_materials_clearcoat import \
clearcoat, clearcoat_roughness, clearcoat_normal
@@ -552,16 +552,11 @@ def make_settings_node(mh):
node.node_tree = get_settings_group()
return node
-
def get_settings_group():
gltf_node_group_name = get_gltf_node_name()
if gltf_node_group_name in bpy.data.node_groups:
gltf_node_group = bpy.data.node_groups[gltf_node_group_name]
else:
# Create a new node group
- gltf_node_group = bpy.data.node_groups.new(gltf_node_group_name, 'ShaderNodeTree')
- gltf_node_group.inputs.new("NodeSocketFloat", "Occlusion")
- gltf_node_group.nodes.new('NodeGroupOutput')
- gltf_node_group_input = gltf_node_group.nodes.new('NodeGroupInput')
- gltf_node_group_input.location = -200, 0
+ gltf_node_group = create_settings_group(gltf_node_group_name)
return gltf_node_group