浏览代码

Scaling root bone animation on copy part 1

- Blender 4.6.0 exporting skeleton.dimensionsAtRest
- Skeleton.parse loads it

Once PRed, can work on bone.copyAnimationRange in playground.

Minor fix for Camera post processes.
jeff 9 年之前
父节点
当前提交
b74a800965
共有 3 个文件被更改,包括 13 次插入2 次删除
  1. 5 1
      Exporters/Blender/io_export_babylon.py
  2. 5 1
      src/Bones/babylon.skeleton.ts
  3. 3 0
      src/Cameras/babylon.camera.ts

+ 5 - 1
Exporters/Blender/io_export_babylon.py

@@ -1,7 +1,7 @@
 bl_info = {
     'name': 'Babylon.js',
     'author': 'David Catuhe, Jeff Palmer',
-    'version': (4, 5, 1),
+    'version': (4, 6, 0),
     'blender': (2, 75, 0),
     'location': 'File > Export > Babylon.js (.babylon)',
     'description': 'Export Babylon.js scenes (.babylon)',
@@ -1427,6 +1427,9 @@ class Skeleton:
         scene.objects.active = skeleton
         bpy.ops.object.mode_set(mode='EDIT')
 
+        # dimensions when in edit mode, are those at rest
+        self.dimensions = skeleton.dimensions
+
         # you need to access edit_bones from skeleton.data not skeleton.pose when in edit mode
         for editBone in skeleton.data.edit_bones:
             for myBoneObj in self.bones:
@@ -1449,6 +1452,7 @@ class Skeleton:
         file_handler.write('{')
         write_string(file_handler, 'name', self.name, True)
         write_int(file_handler, 'id', self.id)  # keep int for legacy of original exporter
+        write_vector(file_handler, 'dimensionsAtRest', self.dimensions)
 
         file_handler.write(',"bones":[')
         first = True

+ 5 - 1
src/Bones/babylon.skeleton.ts

@@ -1,7 +1,7 @@
 module BABYLON {
     export class Skeleton {
         public bones = new Array<Bone>();
-
+        public dimensionsAtRest : Vector3;
         public needInitialSkinMatrix = false;
 
         private _scene: Scene;
@@ -325,6 +325,7 @@
 
             serializationObject.name = this.name;
             serializationObject.id = this.id;
+            serializationObject.dimensionsAtRest = this.dimensionsAtRest;
 
             serializationObject.bones = [];
 
@@ -364,6 +365,9 @@
 
         public static Parse(parsedSkeleton: any, scene: Scene): Skeleton {
             var skeleton = new Skeleton(parsedSkeleton.name, parsedSkeleton.id, scene);
+            if (parsedSkeleton.dimensionsAtRest){
+                skeleton.dimensionsAtRest = Vector3.FromArray(parsedSkeleton.dimensionsAtRest);
+            }
 
             skeleton.needInitialSkinMatrix = parsedSkeleton.needInitialSkinMatrix;
 

+ 3 - 0
src/Cameras/babylon.camera.ts

@@ -295,6 +295,9 @@
                     }               
                     cam._postProcesses = this._postProcesses.slice(0).concat(rigPostProcess);
                     rigPostProcess.markTextureDirty();
+                    
+                }else{
+                    cam._postProcesses = this._postProcesses.slice(0);
                 }
             }
         }