From 042fbefac686666190915d206600a5dab8e03066 Mon Sep 17 00:00:00 2001 From: Julien Duroure Date: Thu, 7 Jul 2022 08:03:39 +0200 Subject: 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 --- io_scene_gltf2/blender/imp/gltf2_blender_gltf.py | 28 ++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'io_scene_gltf2/blender/imp/gltf2_blender_gltf.py') diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_gltf.py b/io_scene_gltf2/blender/imp/gltf2_blender_gltf.py index f2556465..33713b97 100755 --- a/io_scene_gltf2/blender/imp/gltf2_blender_gltf.py +++ b/io_scene_gltf2/blender/imp/gltf2_blender_gltf.py @@ -4,6 +4,8 @@ import bpy from mathutils import Vector, Quaternion, Matrix from .gltf2_blender_scene import BlenderScene +from ..com.gltf2_blender_ui import gltf2_KHR_materials_variants_variant, gltf2_KHR_materials_variants_primitive, gltf2_KHR_materials_variants_default_material +from .gltf2_blender_material import BlenderMaterial class BlenderGlTF(): @@ -180,6 +182,10 @@ class BlenderGlTF(): mesh.shapekey_names.append(shapekey_name) + # Manage KHR_materials_variants + BlenderGlTF.manage_material_variants(gltf) + + @staticmethod def find_unused_name(haystack, desired_name): """Finds a name not in haystack and <= 63 UTF-8 bytes. @@ -201,3 +207,25 @@ class BlenderGlTF(): suffix = '.%03d' % cntr cntr += 1 + + + @staticmethod + def manage_material_variants(gltf): + if not (gltf.data.extensions is not None and 'KHR_materials_variants' in gltf.data.extensions.keys()): + gltf.KHR_materials_variants = False + return + + gltf.KHR_materials_variants = True + # If there is no KHR_materials_variants data in scene, create it + if bpy.context.preferences.addons['io_scene_gltf2'].preferences.KHR_materials_variants_ui is False: + bpy.context.preferences.addons['io_scene_gltf2'].preferences.KHR_materials_variants_ui = True + # Setting preferences as dirty, to be sure that option is saved + bpy.context.preferences.is_dirty = True + + if len(bpy.data.scenes[0].gltf2_KHR_materials_variants_variants) > 0: + bpy.data.scenes[0].gltf2_KHR_materials_variants_variants.clear() + + for idx_variant, variant in enumerate(gltf.data.extensions['KHR_materials_variants']['variants']): + var = bpy.data.scenes[0].gltf2_KHR_materials_variants_variants.add() + var.name = variant['name'] + var.variant_idx = idx_variant -- cgit v1.2.3