{"action":"created","issue":{"url":"https://api.github.com/repos/KhronosGroup/glTF/issues/401","labels_url":"https://api.github.com/repos/KhronosGroup/glTF/issues/401/labels{/name}","comments_url":"https://api.github.com/repos/KhronosGroup/glTF/issues/401/comments","events_url":"https://api.github.com/repos/KhronosGroup/glTF/issues/401/events","html_url":"https://github.com/KhronosGroup/glTF/issues/401","id":103326249,"number":401,"title":"Node hierarchy - DAG or tree?","user":{"login":"pjcozzi","id":782098,"avatar_url":"https://avatars.githubusercontent.com/u/782098?v=3","gravatar_id":"","url":"https://api.github.com/users/pjcozzi","html_url":"https://github.com/pjcozzi","followers_url":"https://api.github.com/users/pjcozzi/followers","following_url":"https://api.github.com/users/pjcozzi/following{/other_user}","gists_url":"https://api.github.com/users/pjcozzi/gists{/gist_id}","starred_url":"https://api.github.com/users/pjcozzi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pjcozzi/subscriptions","organizations_url":"https://api.github.com/users/pjcozzi/orgs","repos_url":"https://api.github.com/users/pjcozzi/repos","events_url":"https://api.github.com/users/pjcozzi/events{/privacy}","received_events_url":"https://api.github.com/users/pjcozzi/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/KhronosGroup/glTF/labels/1.0","name":"1.0","color":"3a8012"},{"url":"https://api.github.com/repos/KhronosGroup/glTF/labels/specification","name":"specification","color":"d7e102"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":13,"created_at":"2015-08-26T17:32:42Z","updated_at":"2015-09-01T12:59:11Z","closed_at":null,"body":"Currently, the glTF node hierarchy is a DAG (as generated by COLLADA2GLTF and implemented in @fabrobinet's loader, and a bug in Cesium, https://github.com/AnalyticalGraphicsInc/cesium/issues/1754#issuecomment-76540824); however, there is interest from @tparisi and @RemiArnaud to \"flatten\" at conversion time, which seems better inline with the spirit of glTF.\r\n\r\nIn [#37](https://github.com/KhronosGroup/glTF/issues/37#issuecomment-134780475), @RemiArnaud said:\r\n> Although available in COLLADA - an intermediate representation format - and rarely correctly implemented, I would not recommend generic external references in glTF - a presentation format.\r\n\r\n> The reason is that it becomes very hard to reference unique instances. \r\nmain.gltf could instance 2 forests from the same forest.gltf. forest.gltf instance the same tree several times.\r\nyou may end up with 4 trees for example, with 4 different paths to it:\r\n\r\n> forest1->tree1->tree\r\nforest1->tree2->tree\r\nforest2->tree1->tree\r\nforest2->tree2->tree\r\n\r\n> the only way to differentiate between those 4 trees is to provide their full path. \r\nIf the user click on a tree, you have to return the full path to that tree to the application to know which tree it is.\r\n\r\n> What happen if you want to move the last of those trees, and only that tree?\r\n\r\n> you can't.\r\nmoving the tree node will move all the trees.\r\nmoving the tree1 node, will move two trees\r\nmoving the forest2 node, will move two different trees\r\n\r\n> In a run-time / presentation format, I'd recommend using a 'flat' scene, where instances get a new node.\r\nThere are several ways to do this, for example limiting external references to leaves objects (not container objects). So you could not instance a forest, you'd have to instance trees.\r\n\r\n> the collada2gltf tool could create such 'flat scenes' from COLLADA documents using external references.\r\nPS : the openCOLLADA Maya exporter has been fixed to correctly export external references.\r\n"},"comment":{"url":"https://api.github.com/repos/KhronosGroup/glTF/issues/comments/136709136","html_url":"https://github.com/KhronosGroup/glTF/issues/401#issuecomment-136709136","issue_url":"https://api.github.com/repos/KhronosGroup/glTF/issues/401","id":136709136,"user":{"login":"pjcozzi","id":782098,"avatar_url":"https://avatars.githubusercontent.com/u/782098?v=3","gravatar_id":"","url":"https://api.github.com/users/pjcozzi","html_url":"https://github.com/pjcozzi","followers_url":"https://api.github.com/users/pjcozzi/followers","following_url":"https://api.github.com/users/pjcozzi/following{/other_user}","gists_url":"https://api.github.com/users/pjcozzi/gists{/gist_id}","starred_url":"https://api.github.com/users/pjcozzi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pjcozzi/subscriptions","organizations_url":"https://api.github.com/users/pjcozzi/orgs","repos_url":"https://api.github.com/users/pjcozzi/repos","events_url":"https://api.github.com/users/pjcozzi/events{/privacy}","received_events_url":"https://api.github.com/users/pjcozzi/received_events","type":"User","site_admin":false},"created_at":"2015-09-01T12:59:11Z","updated_at":"2015-09-01T12:59:11Z","body":"All sounds good.  We'll make this explicit in the spec and I will discuss with @tfili about adding the flatten feature to the converter."}}