{"action":"created","issue":{"url":"https://api.github.com/repos/KhronosGroup/glTF/issues/624","repository_url":"https://api.github.com/repos/KhronosGroup/glTF","labels_url":"https://api.github.com/repos/KhronosGroup/glTF/issues/624/labels{/name}","comments_url":"https://api.github.com/repos/KhronosGroup/glTF/issues/624/comments","events_url":"https://api.github.com/repos/KhronosGroup/glTF/issues/624/events","html_url":"https://github.com/KhronosGroup/glTF/issues/624","id":160003965,"number":624,"title":"Tightening up skinning","user":{"login":"lexaknyazev","id":3479527,"avatar_url":"https://avatars.githubusercontent.com/u/3479527?v=3","gravatar_id":"","url":"https://api.github.com/users/lexaknyazev","html_url":"https://github.com/lexaknyazev","followers_url":"https://api.github.com/users/lexaknyazev/followers","following_url":"https://api.github.com/users/lexaknyazev/following{/other_user}","gists_url":"https://api.github.com/users/lexaknyazev/gists{/gist_id}","starred_url":"https://api.github.com/users/lexaknyazev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lexaknyazev/subscriptions","organizations_url":"https://api.github.com/users/lexaknyazev/orgs","repos_url":"https://api.github.com/users/lexaknyazev/repos","events_url":"https://api.github.com/users/lexaknyazev/events{/privacy}","received_events_url":"https://api.github.com/users/lexaknyazev/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2016-06-13T17:32:13Z","updated_at":"2016-06-14T15:05:53Z","closed_at":null,"body":"Relevant parts of `RiggedSimple.gltf` (all default values omitted), issues below:\r\n```js\r\n{\r\n  \"nodes\": {\r\n    \"Armature\": {\r\n      \"children\": [\"Bone\"]\r\n    },\r\n    \"Bone\": {\r\n      \"children\": [\"Bone_001\"],\r\n      \"jointName\": \"Bone\"\r\n    },\r\n    \"Bone_001\": {\r\n      \"jointName\": \"Bone_001\"\r\n    },\r\n    \"Cylinder\": {\r\n      \"meshes\": [\"Cylinder-mesh\"],\r\n      \"skeletons\": [\"Bone\"],\r\n      \"skin\": \"Armature_Cylinder-skin\"\r\n    },\r\n    \"node_4\": {\r\n      \"children\": [\"Armature\", \"Cylinder\"],\r\n      \"matrix\": [/*Y_UP_Transform matrix*/]\r\n    }\r\n  },\r\n  \"skins\": {\r\n    \"Armature_Cylinder-skin\": {\r\n      \"inverseBindMatrices\": \"IBM_Armature_Cylinder-skin\",\r\n      \"jointNames\": [\"Bone\", \"Bone_001\"]\r\n    }\r\n  },\r\n  \"techniques\": {\r\n    \"technique0\": {\r\n      \"parameters\": {\r\n        \"joint\": {\r\n          \"semantic\": \"JOINT\",\r\n          \"type\": 35666\r\n        },\r\n        \"jointMat\": {\r\n          \"count\": 2,\r\n          \"semantic\": \"JOINTMATRIX\",\r\n          \"type\": 35676\r\n        },\r\n        \"weight\": {\r\n          \"semantic\": \"WEIGHT\",\r\n          \"type\": 35666\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n1. Here we have one geometry node (`\"Cylinder\"`) and a skeleton node tree (`\"Armature\" -> \"Bone\" -> \"Bone_001\"`). Can any node from skeleton tree have `meshes`, `skeletons`, `camera` or `skin` properties?\r\n\r\n2. Spec [says](https://github.com/KhronosGroup/glTF/tree/1.0.1/specification#skin-instances): \r\n > The `skeletons` property contains one or more skeletons, each of which is the root of a node hierarchy.\r\n\r\n A top-level node of that tree is `\"Armature\"` not `\"Bone\"`. Is it a converter bug? If not why do we need that empty unused `\"Armature\"` node with one child?\r\n\r\n3. Spec [spells](https://github.com/KhronosGroup/glTF/tree/1.0.1/specification#nodeskeletons) `skin.joints` instead of `skin.jointNames`.\r\n\r\n4. Namespace of `node.jointName`. If it's glTF global, why not use `id` instead? If it is skeleton-tree limited, it can cause conflicts when `node.skeletons` contains two trees with the same `jointName`'s inside.\r\n\r\n5. Unlike updated gltfOverview (which is really great) spec doesn't mention connections between `JOINT` attribute, indices of `JOINTMATRIX` uniform array and the order of `jointName`'s in `skin.jointNames` (same clarification about `inverseBindMatrices`).\r\n\r\n6. Spec [says](https://github.com/KhronosGroup/glTF/tree/1.0.1/specification#geometry-and-meshes)\r\n > A node can either contain meshes or a single skinned mesh instance, but not both.\r\n\r\n Does it mean that `node.meshes.length` equals `1` when `node.skin` is defined?\r\n\r\n7. Spec [says](https://github.com/KhronosGroup/glTF/tree/1.0.1/specification#skinjointnames-white_check_mark)\r\n > The array length is the same as the `count` property of the `inverseBindMatrices` accessor (when defined), and the same as the length of any skeleton array referencing the skin.\r\n\r\n Maybe wording can be refined here, because it's `node` what references the `skin` and a skeleton array. While \"length of skeleton array\" means total quantity of all nodes with `jointName` field from node-trees referenced in `skeletons` array.\r\n\r\n8. Must all nodes in skeleton tree have `jointName` property?\r\n\r\n9. Can `skin.jointNames.length` be less than `parameter.count` for JOINTMATRIX parameter? It can allow models with different skins have the same shader program.\r\n\r\n \r\n\r\n"},"comment":{"url":"https://api.github.com/repos/KhronosGroup/glTF/issues/comments/225911727","html_url":"https://github.com/KhronosGroup/glTF/issues/624#issuecomment-225911727","issue_url":"https://api.github.com/repos/KhronosGroup/glTF/issues/624","id":225911727,"user":{"login":"javagl","id":5597569,"avatar_url":"https://avatars.githubusercontent.com/u/5597569?v=3","gravatar_id":"","url":"https://api.github.com/users/javagl","html_url":"https://github.com/javagl","followers_url":"https://api.github.com/users/javagl/followers","following_url":"https://api.github.com/users/javagl/following{/other_user}","gists_url":"https://api.github.com/users/javagl/gists{/gist_id}","starred_url":"https://api.github.com/users/javagl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/javagl/subscriptions","organizations_url":"https://api.github.com/users/javagl/orgs","repos_url":"https://api.github.com/users/javagl/repos","events_url":"https://api.github.com/users/javagl/events{/privacy}","received_events_url":"https://api.github.com/users/javagl/received_events","type":"User","site_admin":false},"created_at":"2016-06-14T15:05:52Z","updated_at":"2016-06-14T15:05:52Z","body":"Just minor remarks:\r\n\r\n2. The Armature is likely a leftover from the Blender export, where \"The Armature\" has a special meaning: https://www.blender.org/manual/rigging/armatures/introduction.html - It's also contained in the original DAE: https://github.com/KhronosGroup/glTF/blob/master/sampleModels/RiggedSimple/collada/riggedSimple.dae#L191 \r\n\r\n3. This is (fortunately) only the readme. The spec is right ( https://github.com/KhronosGroup/glTF/blob/1.0.1/specification/schema/skin.schema.json#L22 ) but it should be fixed in the readme as well. \r\n\r\n8. The description of `jointName` says *\"Name used when this node is a joint in a skin\"* sounds like it is not strictly necessary (only, obviously, when the node really is referred to in the `skin.jointNames`). Based on this description, it should be possible to have a skeleton like \r\n\r\n    nodeWithJointNameA -> nodeWithoutJointName -> nodeWithJointNameB\r\n\r\nwhen the middle one is simply not needed in the skin, but this could indeed be stated more clearly.\r\n\r\n---\r\n\r\n(Side note: I appreciate the diligent care and efforts that you put into your issue descriptions!)"}}
{"actor":{"display_login":"javagl"}}