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-07-07 09:03:39 +0300
committerJulien Duroure <julien.duroure@gmail.com>2022-07-07 09:03:39 +0300
commit042fbefac686666190915d206600a5dab8e03066 (patch)
tree52bb07b361d72b14b98275a07418f7d72489b5bf /io_scene_gltf2/blender/exp/gltf2_blender_gather_primitives.py
parent09d752e8453415daff11e94f87d8692a04b4eeff (diff)
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
Diffstat (limited to 'io_scene_gltf2/blender/exp/gltf2_blender_gather_primitives.py')
-rwxr-xr-xio_scene_gltf2/blender/exp/gltf2_blender_gather_primitives.py56
1 files changed, 55 insertions, 1 deletions
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_primitives.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_primitives.py
index 367c30f5..b2ffb6b3 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_primitives.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_primitives.py
@@ -12,10 +12,12 @@ from io_scene_gltf2.blender.exp import gltf2_blender_extract
from io_scene_gltf2.blender.exp import gltf2_blender_gather_accessors
from io_scene_gltf2.blender.exp import gltf2_blender_gather_primitive_attributes
from io_scene_gltf2.blender.exp import gltf2_blender_gather_materials
+from io_scene_gltf2.blender.exp import gltf2_blender_gather_materials_variants
from io_scene_gltf2.io.com import gltf2_io
from io_scene_gltf2.io.exp import gltf2_io_binary_data
from io_scene_gltf2.io.com import gltf2_io_constants
+from io_scene_gltf2.io.com import gltf2_io_extensions
from io_scene_gltf2.io.com.gltf2_io_debug import print_console
@@ -86,7 +88,7 @@ def gather_primitives(
primitive = gltf2_io.MeshPrimitive(
attributes=internal_primitive['attributes'],
- extensions=None,
+ extensions=__gather_extensions(blender_mesh, material_idx, active_uvmap_idx, export_settings),
extras=None,
indices=internal_primitive['indices'],
material=material,
@@ -214,3 +216,55 @@ def __gather_targets(blender_primitive, blender_mesh, modifiers, export_settings
morph_index += 1
return targets
return None
+
+def __gather_extensions(blender_mesh,
+ material_idx: int,
+ active_uvmap_idx,
+ export_settings):
+ extensions = {}
+
+ if bpy.context.preferences.addons['io_scene_gltf2'].preferences.KHR_materials_variants_ui is False:
+ return None
+
+ if bpy.data.scenes[0].get('gltf2_KHR_materials_variants_variants') is None:
+ return None
+ if len(bpy.data.scenes[0]['gltf2_KHR_materials_variants_variants']) == 0:
+ return None
+
+ # Material idx is the slot idx. Retrieve associated variant, if any
+ mapping = []
+ for i in [v for v in blender_mesh.gltf2_variant_mesh_data if v.material_slot_index == material_idx]:
+ variants = []
+ for idx, v in enumerate(i.variants):
+ if v.variant.variant_idx in [o.variant.variant_idx for o in i.variants[:idx]]:
+ # Avoid duplicates
+ continue
+ vari = gltf2_blender_gather_materials_variants.gather_variant(v.variant.variant_idx, export_settings)
+ if vari is not None:
+ variant_extension = gltf2_io_extensions.ChildOfRootExtension(
+ name="KHR_materials_variants",
+ path=["variants"],
+ extension=vari
+ )
+ variants.append(variant_extension)
+ if len(variants) > 0:
+ if i.material:
+ mat = gltf2_blender_gather_materials.gather_material(
+ i.material,
+ active_uvmap_idx,
+ export_settings
+ )
+ else:
+ # empty slot
+ mat = None
+ mapping.append({'material': mat, 'variants': variants})
+
+ if len(mapping) > 0:
+ extensions["KHR_materials_variants"] = gltf2_io_extensions.Extension(
+ name="KHR_materials_variants",
+ extension={
+ "mappings": mapping
+ }
+ )
+
+ return extensions if extensions else None