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
This commit is contained in:
parent
7cdde96d32
commit
5838e26036
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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)
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue