aframevr / aframevr/aframe

glTF import from Blender generates deep nesting breaking expected transform in local space

Open
#4,601 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
JavaScript
Stars
17.6k
Forks
4.4k
PR merge metrics
No merged PRs in 30d

Description

  • A-Frame Version: 1.0.4/
  • Platform / Device: OSX, Chrome 81

Description:

Ill dig through the component source after this to make my own iff needed.
Also I dont know if this is an issue with Blender's implementation of glTF export or if this is the intended method of object import, but its broken to me when using Aframe Inspector

When I export a single object from blender that has a position transform not of 0,0,0 and import into aframe view with a basic <a-entity gltf-model="#vase01"></a-entity>
The object lands where it should but i am expecting its transform position to be not 0,0,0
So when I open the Scene Inspector to visually tweak the object I see that its position is 0,0,0 meaning its in localSpace of some parent. And since I can not drill through the parenting in the Aframe Inspector visual tweaks are not workable for say rotations.

In the Chrome web inspector on the dom element I have to dig down with
$0.object3D.children[0].children[0].position to get to the actual mesh object with the vector3 position giving values not 0,0,0 but this does not fix the Aframe inspector tool
With
$0.object3D.type == "Group"
$0.object3D.children[0].type == "Scene"
$0.object3D.children[0].children[0].type == "Mesh"
I know each of these is just an Object3D with extras but a second scene should not be a parent within a group

As a cross test the same file in https://gltf-viewer.donmccurdy.com/
does load the model into the center of the world as expected

debugging link
https://pumped-fluffy-llama.glitch.me/
use the Aframe inspector contrl+alt+i

Sample of the gltf file
I know I have 4 scenes in here, Maybe Blender export should reduce these, but its gonna be typical workflow for an artist, I make a scene of many, i have an asset in the view somewhere in world space I select an object and export.
I expect that when I import I could set an attribute as retain original transforms(position) true:false
false defaults to world space 0,0,0 so I can move it around then with other stuff. I can handle this in an onload routine callback but that defeats to instant easy use of Aframe

Sample gltf file
{ "asset" : { "generator" : "Khronos glTF Blender I/O v1.1.46", "version" : "2.0" }, "scene" : 3, "scenes" : [ { "name" : "Scene" }, { "name" : "Scene.001" }, { "name" : "Scene.002" }, { "name" : "Scene.003", "nodes" : [ 0 ] } ], "nodes" : [ { "mesh" : 0, "name" : "Cube.046", "translation" : [ 0.6578742265701294, 0.5410311222076416, 4.062383651733398 ] } ], "meshes" : [ { "name" : "Cube.002", "primitives" : [ { "attributes" : { "POSITION" : 0, "NORMAL" : 1, "TEXCOORD_0" : 2 }, "indices" : 3 } ] } ], "accessors" : [ { "bufferView" : 0, "componentType" : 5126, "count" : 40, "max" : [ 1.9049890041351318, 1.4015837907791138, 1 ], "min" : [ -1.9856455326080322, -1, -1.0906741619110107 ], "type" : "VEC3" }, { "bufferView" : 1, "componentType" : 5126, "count" : 40, "type" : "VEC3" }, { "bufferView" : 2, "componentType" : 5126, "count" : 40, "type" : "VEC2" }, { "bufferView" : 3, "componentType" : 5123, "count" : 60, "type" : "SCALAR" } ], "bufferViews" : [ { "buffer" : 0, "byteLength" : 480, "byteOffset" : 0 }, { "buffer" : 0, "byteLength" : 480, "byteOffset" : 480 }, { "buffer" : 0, "byteLength" : 320, "byteOffset" : 960 }, { "buffer" : 0, "byteLength" : 120, "byteOffset" : 1280 } ], "buffers" : [ { "byteLength" : 1400, "uri" : "data:application/octet-stream;base64,AACAvwAAgD8AAIC/oin+v8LJ2T7Cydm+oin+v8LJ2T7Cydk+AACAvwAAgD8AAIA/rtbzPxlnsz82m4u/AACAPwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgD8AAIC/AACAPwAAgL8AAIA/AACAPwAAgL8AAIC/rtbzPxlnsz82m4u/AACAPwAAgD8AAIA/AACAvwAAgD8AAIA/AACAvwAAgL8AAIA/AACAPwAAgL8AAIA/AACAPwAAgD8AAIA/AACAvwAAgL8AAIA/AACAvwAAgL8AAIC/AACAPwAAgL8AAIC/AACAPwAAgL8AAIA/AACAvwAAgD8AAIC/AACAvwAAgD8AAIA/AACAPwAAgD8AAIA/rtbzPxlnsz82m4u/oin+v8LJ2T7Cydm+oin+v8LJ2b7Cydm+oin+v8LJ2b7Cydk+oin+v8LJ2T7Cydk+oin+v8LJ2b7Cydm+AACAvwAAgL8AAIC/AACAvwAAgL8AAIA/oin+v8LJ2b7Cydk+AACAvwAAgD8AAIC/AACAvwAAgL8AAIC/oin+v8LJ2b7Cydm+oin+v8LJ2T7Cydm+oin+v8LJ2b7Cydk+AACAvwAAgL8AAIA/AACAvwAAgD8AAIA/oin+v8LJ2T7Cydk+qu8Av8woXT8AAACAqu8Av8woXT8AAACAqu8Av8woXT8AAACAqu8Av8woXT8AAACA4O+LvODvi7zf7H+/4O+LvODvi7zf7H+/4O+LvODvi7zf7H+/4O+LvODvi7zf7H+/9jN2P0FlRr5BZUY+9jN2P0FlRr5BZUY+9jN2P0FlRr5BZUY+9jN2P0FlRr5BZUY+AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACA8JOjvZJcfj/wk6M98JOjvZJcfj/wk6M98JOjvZJcfj/wk6M98JOjvZJcfj/wk6M9AACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAqu8Av8woXb8AAACAqu8Av8woXb8AAACAqu8Av8woXb8AAACAqu8Av8woXb8AAACAqu8AvwAAAADMKF2/qu8AvwAAAADMKF2/qu8AvwAAAADMKF2/qu8AvwAAAADMKF2/qu8AvwAAAADMKF0/qu8AvwAAAADMKF0/qu8AvwAAAADMKF0/qu8AvwAAAADMKF0/AABgPwAAAD8AAGA/AAAAPwAAYD8AAIA+AABgPwAAgD4AACA/AAAAPwAAwD4AAAA/AADAPgAAQD8AACA/AABAPwAAwD4AAIA+AADAPgAAAD8AACA/AAAAPwAAID8AAIA+AAAgPwAAAAAAAMA+AAAAAAAAwD4AAIA+AAAgPwAAgD4AAAA+AACAPgAAAD4AAAA/AADAPgAAAD8AAMA+AACAPgAAYD8AAAA/AABgPwAAgD4AACA/AACAPgAAID8AAAA/AAAgPwAAQD8AAMA+AABAPwAAwD4AAIA/AAAgPwAAgD8AAAA+AAAAPwAAAD4AAAA/AAAAPgAAgD4AAAA+AACAPgAAID8AAEA/AADAPgAAQD8AAMA+AABAPwAAID8AAEA/AADAPgAAAAAAAMA+AAAAAAAAID8AAAAAAAAgPwAAAAAAAAEAAgAAAAIAAwAEAAUABgAEAAYABwAIAAkACgALAAgACgAMAA0ADgAMAA4ADwAQABEAEgAQABIAEwAUABUAFgAUABYAFwAYABkAGgAYABoAGwAcAB0AHgAcAB4AHwAgACEAIgAgACIAIwAkACUAJgAnACQAJgA=" } ] }

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the issue with the debugging link, the provided glTF sample, and the A-Frame Inspector. Trace the imported Object3D hierarchy and determine whether the nesting comes from Blender's export or A-Frame's glTF handling; done means the expected local-space transform is usable in the Inspector with a clearly defined default behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, three.js
Domain
computer-graphics
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.