[Bf-extensions-cvs] [b1f2133f] blender2.8: Initial commit of glTF 2.0 importer/exporter

Julien Duroure noreply at git.blender.org
Sat Nov 24 16:33:30 CET 2018


Commit: b1f2133fa2849da272e9d8404f371220226ddaf1
Author: Julien Duroure
Date:   Sat Nov 24 16:28:33 2018 +0100
Branches: blender2.8
https://developer.blender.org/rBAb1f2133fa2849da272e9d8404f371220226ddaf1

Initial commit of glTF 2.0 importer/exporter

Official Khronos Group Blender glTF 2.0 importer and exporter.

glTF specification: https://github.com/KhronosGroup/glTF
The upstream repository can be found here:
https://github.com/KhronosGroup/glTF-Blender-IO

Reviewed By: Bastien, Campbell

Differential Revision: https://developer.blender.org/D3929

===================================================================

A	io_scene_gltf2/__init__.py
A	io_scene_gltf2/blender/com/gltf2_blender_conversion.py
A	io_scene_gltf2/blender/com/gltf2_blender_data_path.py
A	io_scene_gltf2/blender/com/gltf2_blender_image.py
A	io_scene_gltf2/blender/com/gltf2_blender_image_util.py
A	io_scene_gltf2/blender/com/gltf2_blender_json.py
A	io_scene_gltf2/blender/com/gltf2_blender_material_helpers.py
A	io_scene_gltf2/blender/com/gltf2_blender_math.py
A	io_scene_gltf2/blender/exp/gltf2_blender_animate.py
A	io_scene_gltf2/blender/exp/gltf2_blender_export.py
A	io_scene_gltf2/blender/exp/gltf2_blender_export_keys.py
A	io_scene_gltf2/blender/exp/gltf2_blender_extract.py
A	io_scene_gltf2/blender/exp/gltf2_blender_filter.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_animation_channel_target.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_animation_channels.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_animation_sampler_keyframes.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_animation_samplers.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_animations.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_cache.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_cameras.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_joints.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_material_normal_texture_info_class.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_material_occlusion_texture_info_class.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_pbr_metallic_roughness.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_primitive_attributes.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_primitives.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_sampler.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_skins.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_texture.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gather_texture_info.py
A	io_scene_gltf2/blender/exp/gltf2_blender_generate_extras.py
A	io_scene_gltf2/blender/exp/gltf2_blender_get.py
A	io_scene_gltf2/blender/exp/gltf2_blender_gltf2_exporter.py
A	io_scene_gltf2/blender/exp/gltf2_blender_search_node_tree.py
A	io_scene_gltf2/blender/exp/gltf2_blender_search_scene.py
A	io_scene_gltf2/blender/exp/gltf2_blender_utils.py
A	io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_pbrSpecularGlossiness.py
A	io_scene_gltf2/blender/imp/gltf2_blender_animation.py
A	io_scene_gltf2/blender/imp/gltf2_blender_animation_bone.py
A	io_scene_gltf2/blender/imp/gltf2_blender_animation_node.py
A	io_scene_gltf2/blender/imp/gltf2_blender_camera.py
A	io_scene_gltf2/blender/imp/gltf2_blender_gltf.py
A	io_scene_gltf2/blender/imp/gltf2_blender_image.py
A	io_scene_gltf2/blender/imp/gltf2_blender_map_emissive.py
A	io_scene_gltf2/blender/imp/gltf2_blender_map_normal.py
A	io_scene_gltf2/blender/imp/gltf2_blender_map_occlusion.py
A	io_scene_gltf2/blender/imp/gltf2_blender_material.py
A	io_scene_gltf2/blender/imp/gltf2_blender_mesh.py
A	io_scene_gltf2/blender/imp/gltf2_blender_node.py
A	io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py
A	io_scene_gltf2/blender/imp/gltf2_blender_primitive.py
A	io_scene_gltf2/blender/imp/gltf2_blender_scene.py
A	io_scene_gltf2/blender/imp/gltf2_blender_skin.py
A	io_scene_gltf2/blender/imp/gltf2_blender_texture.py
A	io_scene_gltf2/io/__init__.py
A	io_scene_gltf2/io/com/gltf2_io.py
A	io_scene_gltf2/io/com/gltf2_io_constants.py
A	io_scene_gltf2/io/com/gltf2_io_debug.py
A	io_scene_gltf2/io/com/gltf2_io_functional.py
A	io_scene_gltf2/io/com/gltf2_io_image.py
A	io_scene_gltf2/io/com/gltf2_io_trs.py
A	io_scene_gltf2/io/exp/gltf2_io_binary_data.py
A	io_scene_gltf2/io/exp/gltf2_io_buffer.py
A	io_scene_gltf2/io/exp/gltf2_io_export.py
A	io_scene_gltf2/io/exp/gltf2_io_get.py
A	io_scene_gltf2/io/exp/gltf2_io_image_data.py
A	io_scene_gltf2/io/imp/__init__.py
A	io_scene_gltf2/io/imp/gltf2_io_binary.py
A	io_scene_gltf2/io/imp/gltf2_io_gltf.py

===================================================================

diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
new file mode 100755
index 00000000..0e864cad
--- /dev/null
+++ b/io_scene_gltf2/__init__.py
@@ -0,0 +1,579 @@
+# Copyright 2018 The glTF-Blender-IO authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Imports
+#
+
+import os
+import bpy
+from bpy_extras.io_utils import ImportHelper, ExportHelper
+from bpy.types import Operator, AddonPreferences
+
+from .io.com.gltf2_io_debug import print_console, Log
+from .io.imp.gltf2_io_gltf import glTFImporter
+from .blender.imp.gltf2_blender_gltf import BlenderGlTF
+
+from bpy.props import (CollectionProperty,
+                       StringProperty,
+                       BoolProperty,
+                       EnumProperty,
+                       FloatProperty,
+                       IntProperty)
+
+#
+# Globals
+#
+
+bl_info = {
+    'name': 'glTF 2.0 format',
+    'author': 'Julien Duroure, Norbert Nopper, Urs Hanselmann & Moritz Becher',
+    "version": (0, 0, 1),
+    'blender': (2, 80, 0),
+    'location': 'File > Import-Export',
+    'description': 'Import-Export as glTF 2.0',
+    'warning': '',
+    'wiki_url': ''
+                '',
+    'support': 'COMMUNITY',
+    'category': 'Import-Export'}
+
+
+#
+#  Functions / Classes.
+#
+
+
+class GLTF2ExportSettings(bpy.types.Operator):
+    """Save the export settings on export (saved in .blend).
+Toggle off to clear settings"""
+    bl_label = "Save Settings"
+    bl_idname = "scene.gltf2_export_settings_set"
+
+    def execute(self, context):
+        operator = context.active_operator
+        operator.will_save_settings = not operator.will_save_settings
+        if not operator.will_save_settings:
+            # clear settings
+            context.scene.pop(operator.scene_key)
+        return {"FINISHED"}
+
+
+class ExportGLTF2_Base:
+
+    # TODO: refactor to avoid boilerplate
+
+    export_copyright: StringProperty(
+        name='Copyright',
+        description='',
+        default=''
+    )
+
+    export_embed_buffers: BoolProperty(
+        name='Embed buffers',
+        description='',
+        default=False
+    )
+
+    export_embed_images: BoolProperty(
+        name='Embed images',
+        description='',
+        default=False
+    )
+
+    export_strip: BoolProperty(
+        name='Strip delimiters',
+        description='',
+        default=False
+    )
+
+    export_indices: EnumProperty(
+        name='Maximum indices',
+        items=(('UNSIGNED_BYTE', 'Unsigned Byte', ''),
+               ('UNSIGNED_SHORT', 'Unsigned Short', ''),
+               ('UNSIGNED_INT', 'Unsigned Integer', '')),
+        default='UNSIGNED_INT'
+    )
+
+    export_force_indices: BoolProperty(
+        name='Force maximum indices',
+        description='',
+        default=False
+    )
+
+    export_texcoords: BoolProperty(
+        name='Export texture coordinates',
+        description='',
+        default=True
+    )
+
+    export_normals: BoolProperty(
+        name='Export normals',
+        description='',
+        default=True
+    )
+
+    export_tangents: BoolProperty(
+        name='Export tangents',
+        description='',
+        default=True
+    )
+
+    export_materials: BoolProperty(
+        name='Export materials',
+        description='',
+        default=True
+    )
+
+    export_colors: BoolProperty(
+        name='Export colors',
+        description='',
+        default=True
+    )
+
+    export_cameras: BoolProperty(
+        name='Export cameras',
+        description='',
+        default=False
+    )
+
+    export_camera_infinite: BoolProperty(
+        name='Infinite perspective Camera',
+        description='',
+        default=False
+    )
+
+    export_selected: BoolProperty(
+        name='Export selected only',
+        description='',
+        default=False
+    )
+
+    export_layers: BoolProperty(
+        name='Export all layers',
+        description='',
+        default=True
+    )
+
+    export_extras: BoolProperty(
+        name='Export extras',
+        description='',
+        default=False
+    )
+
+    export_yup: BoolProperty(
+        name='Convert Z up to Y up',
+        description='',
+        default=True
+    )
+
+    export_apply: BoolProperty(
+        name='Apply modifiers',
+        description='',
+        default=False
+    )
+
+    export_animations: BoolProperty(
+        name='Export animations',
+        description='',
+        default=True
+    )
+
+    export_frame_range: BoolProperty(
+        name='Export within playback range',
+        description='',
+        default=True
+    )
+
+    export_frame_step: IntProperty(
+        name='Frame step size',
+        description='Step size (in frames) for animation export.',
+        default=1,
+        min=1,
+        max=120
+    )
+
+    export_move_keyframes: BoolProperty(
+        name='Keyframes start with 0',
+        description='',
+        default=True
+    )
+
+    export_force_sampling: BoolProperty(
+        name='Force sample animations',
+        description='',
+        default=False
+    )
+
+    export_current_frame: BoolProperty(
+        name='Export current frame',
+        description='',
+        default=True
+    )
+
+    export_skins: BoolProperty(
+        name='Export skinning',
+        description='',
+        default=True
+    )
+
+    export_bake_skins: BoolProperty(
+        name='Bake skinning constraints',
+        description='',
+        default=False
+    )
+
+    export_morph: BoolProperty(
+        name='Export morphing',
+        description='',
+        default=True
+    )
+
+    export_morph_normal: BoolProperty(
+        name='Export morphing normals',
+        description='',
+        default=True
+    )
+
+    export_morph_tangent: BoolProperty(
+        name='Export morphing tangents',
+        description='',
+        default=True
+    )
+
+    export_lights: BoolProperty(
+        name='Export KHR_lights_punctual',
+        description='',
+        default=False
+    )
+
+    export_texture_transform: BoolProperty(
+        name='Export KHR_texture_transform',
+        description='',
+        default=False
+    )
+
+    export_displacement: BoolProperty(
+        name='Export KHR_materials_displacement',
+        description='',
+        default=False
+    )
+
+    will_save_settings: BoolProperty(default=False)
+
+    # Custom scene property for saving settings
+    scene_key = "glTF2ExportSettings"
+
+    #
+
+    def invoke(self, context, event):
+        settings = context.scene.get(self.scene_key)
+        self.will_save_settings = False
+        if settings:
+            try:
+                for (k, v) in settings.items():
+                    setattr(self, k, v)
+                self.will_save_settings = True
+
+            except AttributeError:
+                self.report({"ERROR"}, "Loading export settings failed. Removed corrupted settings")
+                del context.scene[self.scene_key]
+
+        return ExportHelper.invoke(self, context, event)
+
+    def save_settings(self, context):
+        # find all export_ props
+        all_props = self.properties
+        export_props = {x: all_props.get(x) for x in dir(all_props)
+                        if x.startswith("export_") and all_props.get(x) is not None}
+
+        context.scene[self.scene_key] = export_props
+
+    def execute(self, context):
+        from .blender.exp import gltf2_blender_export
+
+        if self.will_save_settings:
+            self.save_settings(context)
+
+        # All custom export settings are stored in this container.
+        export_settings = {}
+
+        export_settings['gltf_filepath'] = bpy.path.ensure_ext(self.filepath, self.filename_ext)
+        export_settings['gltf_filedirectory'] = os.path.dirname(export_settings['gltf_filepath']) + '/'
+
+        export_settings['gltf_format'] = self.export_format
+        export_settings['gltf_copyright'] = self.export_copyright
+        export_settings['gltf_embed_buffers'] = self.export_embed_buffers
+        export_settings['gltf_embed_images'] = self.export_embed_images
+        export_settings['gltf_strip'] = self.export_strip
+        export_settings['gltf_indices'] = self.export_indices
+        export_settings['gltf_force_indices'] = self.export_force_indices
+        export_settings['gltf_texcoords'] = self.export_texcoords
+        export_settings['gltf_normals'] = self.export_normals
+        export_settings['gltf_tangents'] = self.export_tangents and self.export_normals
+        export_settings['gltf_materials'] = self.export_materials
+        export_settings['gltf_colors'] = self.export_colors
+        export_settings['gltf_cameras'] = self.export_cameras
+        if self.export_cameras:
+            export_settings['gltf_camera_infinite'] = self.export_camera_infinite
+        else:
+            export_settings['gltf_camera_infinite'] = False
+        export_settings['gltf_selected'] = self.export_selected
+        export_settings['gltf_layers'] = self.export_layers
+        export_settings['gltf_extras'] = self.export_extras
+        export_settings['gltf_yup'] = self.export_yup
+        export_settings['gltf_apply'] = self.export_apply
+        export_settings['gltf_animations'] = self.export_animations
+        if self.export_animations:
+            export_settings['gltf_current_frame'] = False
+            export_settings['gltf_frame_range'] = self.export_frame_range
+            export_settings['gltf_move_keyframes'] = self.export_move_keyframes
+            export_settings['gltf_force_sampling'] = self.export_force_sampling
+        else:
+            export_settings['gltf_current_frame'] = self.export_current_frame
+            export_settings['gl

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list