ian Posted August 19, 2016 Share Posted August 19, 2016 Hi I create simple animation Elevator which goes up an down in loop. When I load it from bayblon file it works OK. But when I add physics impostor on the Elevator I get error. (new bayblon version 2.4.0. and 2.5.0-alpha) Any idea what it could be a problem? (In previos version 2.4.0-alpha animation with impostor worked OK but new version get me error look down) Uncaught TypeError: Cannot read property 'x' of nullQuaternion.copy @ cannon.js:4487t._updatePhysicsBodyTransformation @ babylon.2.4.js:28t.generatePhysicsBody @ babylon.2.4.js:28t.addImpostor @ babylon.2.4.js:18t._init @ babylon.2.4.js:18t.forceUpdate @ babylon.2.4.js:18set @ babylon.2.4.js:6i.setValue @ babylon.2.4.js:17i.animate @ babylon.2.4.js:17e._animate @ babylon.2.4.js:17i._animate @ babylon.2.4.js:10i.render @ babylon.2.4.js:11(anonymous function) @ Game.js:156o._renderLoop @ babylon.2.4.js:4 Quote Link to comment Share on other sites More sharing options...
GameMonetize Posted August 19, 2016 Share Posted August 19, 2016 Pinging @RaananW Quote Link to comment Share on other sites More sharing options...
adam Posted August 19, 2016 Share Posted August 19, 2016 It sounds like your animation is trying to animate a rotation property that has been set to null. When you use a physics imposter, rotationQuaternion is used and rotation is set to null (at least in 2.4). Edit: Actually it looks like the physics plugin is trying to set rotationQuaternion that has been set to null by the animation. Quote Link to comment Share on other sites More sharing options...
RaananW Posted August 19, 2016 Share Posted August 19, 2016 Did someone ping? Will it be possible to show a simple playground that reproduces it? This seems like a bug with the way we interact with cannon, but since you are using the minified babylon version, the line number doesn't actually mean anything The bug happens when generating the physics body. Does this body have a parent? what kind of body is it? Quote Link to comment Share on other sites More sharing options...
ian Posted August 19, 2016 Author Share Posted August 19, 2016 RaanaW, I post simple model with animation I set mesh impostor on Path, sphere impostor on Ball and mesh impostor on Elevator. (When physics impostor was add to Elevator, upper error happend) If you put this babylon file in sandbox it works OK, but when we add physics on Elevator(animated object) Upper error happend. I atthach model (bablon file) RollShadowAnimation.babylon Quote Link to comment Share on other sites More sharing options...
ian Posted August 20, 2016 Author Share Posted August 20, 2016 Hallo RaananW, here is playground http://www.babylonjs-playground.com/#1YOCO9#41 (so if we oncomment "mesh.setPhysicsState(BABYLON.PhysicsEngine.MeshImpostor, { mass: 0, friction: 0.5, restitution: 0 });" for Elevator than this error happends. This is model file https://dl.dropboxusercontent.com/u/20766916/RollShadowAnimation.babylon, maybe is a problem indside .babylon file, but it works ok until we add physics to Elevator. Can anybody check, or help me what should I do to work elevator physics in this case. and code for playground (if link doesn work) var createScene = function () { // This creates a basic Babylon Scene object (non-mesh) var scene = new BABYLON.Scene(engine); // This creates and positions a free camera (non-mesh) var camera = new BABYLON.FreeCamera("camera1", new BABYLON.Vector3(0, 5, -10), scene); // This targets the camera to scene origin camera.setTarget(BABYLON.Vector3.Zero()); // This attaches the camera to the canvas camera.attachControl(canvas, true); // This creates a light, aiming 0,1,0 - to the sky (non-mesh) var light = new BABYLON.HemisphericLight("light1", new BABYLON.Vector3(0, 1, 0), scene); // Default intensity is 1. Let's dim the light a small amount light.intensity = 0.7; var gravityVector = new BABYLON.Vector3(0, -10, 0); var physicsPlugin = new BABYLON.CannonJSPlugin(); scene.enablePhysics(gravityVector, physicsPlugin); //https://dl.dropboxusercontent.com/u/20766916/RollShadowAnimation.babylon BABYLON.SceneLoader.ImportMesh("", "https://dl.dropboxusercontent.com/u/20766916/", "RollShadowAnimation.babylon", scene, function (meshes) { for (var a = 0; a < meshes.length; a++) { var mesh = meshes[a]; console.log( mesh.id ); mesh.checkCollisions = true; if (mesh.id.substring(0, 4) == "Path") { console.log( mesh.id +" set Wall physics boxImpostor "); //m.physicsImpostor = new BABYLON.PhysicsImpostor( wall, BABYLON.PhysicsImpostor.BoxImpostor, { mass : 0, friction : 0.5, restitution : 0 }, scene); //mesh.setPhysicsState({ impostor: BABYLON.PhysicsEngine.BoxImpostor, move:false}); mesh.setPhysicsState(BABYLON.PhysicsEngine.MeshImpostor, { mass: 0, friction: 0.5, restitution: 0 }); } if (mesh.id.substring(0, 4) == "Ball") { console.log( mesh.id +" set Wall physics boxImpostor "); mesh.setPhysicsState(BABYLON.PhysicsEngine.SphereImpostor, { mass: 1, friction: 0.5, restitution: 0 }); } if (mesh.id.substring(0, 8) == "Elevator") { //mesh.setPhysicsState(BABYLON.PhysicsEngine.MeshImpostor, { mass: 0, friction: 0.5, restitution: 0 }); } } }); return scene; }; Quote Link to comment Share on other sites More sharing options...
RaananW Posted August 20, 2016 Share Posted August 20, 2016 Hi @ian , I will look into that. Should be working, of course. I think it is due to the way I am generating the mesh's physics body. Will keep you updated here! Quote Link to comment Share on other sites More sharing options...
RaananW Posted August 20, 2016 Share Posted August 20, 2016 Ok, checked again. You are animating the scale of the object. A change in scale requires a force update of the physics impostor (Rigid bodies mean - no change in the shape of the object). It should actually work, but will be very slow. You are also animating the rotation, but the rotation required is a quaternion (you are animating the euler rotation). You will have to start working with quaternions in order for that to work correctly. Somewhere along the way, the quaternion rotation is nulled (haven't found yet where), but this way it will anyhow not do what you want it to do Recommendation - animate the rotationQuaternion and position, try to avoid animating the scale as much as you can. Quote Link to comment Share on other sites More sharing options...
ian Posted August 21, 2016 Author Share Posted August 21, 2016 Ok, I admint I'm beginer. But it is logicaly that quaternion means rotation (in this case with anitmaition). But for me is strange that I did not use scaling or rotation in this animation. There is just location use. from fram 1 to 100 up for z=4unit, and forrm 100 1 z=-4unit. I do Ctrl-A (scale rotate) on Elevator before I do animation. Quote Link to comment Share on other sites More sharing options...
RaananW Posted August 21, 2016 Share Posted August 21, 2016 Your only problem is the scaling, actually. This won't work really. Creating a new impostor (mesh impostor) every frame will be very heavy on your CPU. Rotation should actually work, but again, when working with physics it is better to use the quaternion. because internally, the rotation is converted to a quaternion and being reset. Which might also cause a little problem with the animations. Quote Link to comment Share on other sites More sharing options...
ian Posted August 23, 2016 Author Share Posted August 23, 2016 ok I DON'T SEE WHERE IS A PROBLEM IN .babylon file? RaananW, can you show me where exactly is problem. (Where in .babylon file which I attach is a problem, Where is scaling animation). Scaling values for animation frames is always 1 (for x,y,z) "meshes":[{"name":"Ball","id":"Ball","materialId":"RollShadowAnimation.Material.003","billboardMode":0,"position":[2.0964,1.2848,0],"rotation":[0,0,0],"scaling":[1,1,1],"isVisible":true,"freezeWorldMatrix":false,"isEnabled":true,"checkCollisions":true,"receiveShadows":false ,"positions" ,{"name":"Elevator","id":"Elevator","materialId":"RollShadowAnimation.Material.002","billboardMode":0,"position":[0,0,0],"rotation":[0,0,0],"scaling":[1,1,1],"isVisible":true,"freezeWorldMatrix":false,"isEnabled":true,"checkCollisions":true,"receiveShadows":false ,"positions" ,"animations":[{"dataType":1,"framePerSecond":24,"keys":[ {"frame":1,"values":[0,0,0]}, {"frame":100,"values":[0,0,0]}, {"frame":200,"values":[0,0,0]}],"loopBehavior":1,"name":"rotation animation","property":"rotation"},{"dataType":1,"framePerSecond":24,"keys":[ {"frame":1,"values":[0,0,0]}, {"frame":100,"values":[0,4,0]}, {"frame":200,"values":[0,0,0]}],"loopBehavior":1,"name":"position animation","property":"position"},{"dataType":1,"framePerSecond":24,"keys":[ {"frame":1,"values":[1,1,1]}, {"frame":100,"values":[1,1,1]}, {"frame":200,"values":[1,1,1]}],"loopBehavior":1,"name":"scaling animation","property":"scaling"}],"ranges":[{"name":"CubeAction","from":0,"to":200}],"autoAnimate":true,"autoAnimateFrom":1,"autoAnimateTo":200,"autoAnimateLoop":true ,"instances":[]} ,{"name":"Path","id":"Path","materialId":"RollShadowAnimation.Multimaterial#0","billboardMode":0,"position":[0,4,0],"rotation":[0,0,0],"scaling":[1,1,1],"isVisible":true,"freezeWorldMatrix":false,"isEnabled":true,"checkCollisions":false,"receiveShadows":false -------------------------------------------------------------------------------------------- I also try to create new animation with quaternion mode, but I cannot export to .babylon file. Export error in blender (Exporter (Babylon.js ver 5.0.2) location: <unknown location>:-1 location: <unknown location>:-1 Traceback (most recent call last): File "/home/aaa/.config/blender/2.77/scripts/addons/babylon-js/__init__.py", line 81, in execute exporter.execute(context, self.filepath) File "/home/aaa/.config/blender/2.77/scripts/addons/babylon-js/json_exporter.py", line 99, in execute mesh = Mesh(object, scene, nextStartFace, forcedParent, nameID, self) File "/home/aaa/.config/blender/2.77/scripts/addons/babylon-js/mesh.py", line 39, in __init__ self.define_animations(object, True, True, True) #Should animations be done when forcedParent File "/home/aaa/.config/blender/2.77/scripts/addons/babylon-js/f_curve_animatable.py", line 43, in define_animations hasData = rotAnimation.append_range(object, animationRange) File "/home/aaa/.config/blender/2.77/scripts/addons/babylon-js/animation.py", line 110, in append_range self.values.append(self.get_attr(object)) File "/home/aaa/.config/blender/2.77/scripts/addons/babylon-js/animation.py", line 165, in get_attr return post_rotate_quaternion(getattr(object, self.attrInBlender), self.xOffset) File "/home/aaa/.config/blender/2.77/scripts/addons/babylon-js/package_level.py", line 184, in post_rotate_quaternion post = mathutils.Euler((angle, 0.0, 0.0)).to_matrix() NameError: name 'mathutils' is not defined if I switch back to XYZ Euler. It exports fine. Animation works fine, but if I add physics error as I write. Can anybody check where EXCATLY IS A PROBLEM IN .BABYLON (Babylon file have no scaling no rotation in animation) (JSON) FILE. Playground have no rotation no scaling for Elevator. The most simple animations and it dosn't work with physic. (I DO NOT SCALING ELEVATOR, IF I DO PLEASE SHOW ME WHERE EXACLY IS SCALING IN ANIMATIONO .BABAYLON FILE. greetings Quote Link to comment Share on other sites More sharing options...
JohnK Posted August 23, 2016 Share Posted August 23, 2016 @ian frustrating isn't it when you seem to be totally stuck on a simple issue. We have all been there. Even if applying a rotation of 0 and a scaling of 1 a rotation and a scaling are applied, ie mesh.rotation = new BABYLON.Vector3(0, 0, 0) may result in no rotation and mesh.scaling = new BABYLON.Vector3(1, 1, 1) may result in no change of scale but in the code the rotation and scaling calculations are still carried out, so @RaananW is correct in reading the the data below to say a rotation and a scaling are been applied. My knowledge of physics engines is non existent as is my knowledge of what happens if you manually edit a .babylon fileso perhaps you are best totally ignoring this advice, but then it is worth a try. Now for the trial and probable error advice - what happens if you manually edit the .babylon file and delete "rotation":[0,0,0],"scaling":[1,1,1], from the elevator? 1 hour ago, ian said: ,{"name":"Elevator","id":"Elevator","materialId":"RollShadowAnimation.Material.002","billboardMode":0,"position":[0,0,0],"rotation":[0,0,0],"scaling":[1,1,1],"isVisible":true,"freezeWorldMatrix":false,"isEnabled":true,"checkCollisions":true,"receiveShadows":false ,"positions" RaananW 1 Quote Link to comment Share on other sites More sharing options...
ian Posted August 23, 2016 Author Share Posted August 23, 2016 Ok I remove scaling from Elevator, but now even rendering scene and animation of Elevator doesn't work (only black screen) No error in console. Quote Link to comment Share on other sites More sharing options...
ian Posted August 23, 2016 Author Share Posted August 23, 2016 yaou (exporter versions problems) !!! OK it works now. I use now Babylon.js (.babylon) Ver 4.6.1 (ver. 5.0.2 doesn't works, export erros if use quaternion animation) And I do animation with Quaternion. And Export to .bayblon is OK. Quote Link to comment Share on other sites More sharing options...
RaananW Posted August 25, 2016 Share Posted August 25, 2016 Great! glad it works. Sadly when working with external frameworks you have to stay conform. Not all features of Babylon will work with physics engines. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.