Closed kmammou closed 6 years ago
@fabrobinet post 1.0?
yes, post 1.0
@FrankGalligan do you have any interest/plans for morph/skin compression? Is this a useful issue to keep open here?
Closing, I think we have both interest and tentative plans to iterate from KHR_draco_mesh_compression to support morphs, skinning, or both, but probably do not need an issue open at this stage.
For morph/skinning compression, I would like to propose the following approach.
Let's say that we have a base mesh M with the following associated attributes:
M.position: vertices positions, M.normal: vertices normals, M.floatAttribute0: vertices texCoord set 0, M.floatAttribute1: vertices texCoord set 1, M.floatAttribute2: vertices animation weights, M.intAttribute0: vertices joint IDs. Let T(0), T(1), ..., T(n) be the associated morphing targets and let's suppose than only the vertices positions and attributes are update by the morphing. Therefore, only the following information need to be stored for each target T(i):
T(i).position: vertices positions, and T(i).normal: vertices normals. I propose to encode {M, (Ti)i} in one stream to be able to exploit the correlations between the base mesh M and the targets (Ti)i. More precisely, we will encode a mesh C composed of the following information:
C.position = M.position, C.normal = M.normal, C.floatAttribute0: vertices texCoord set 0, C.floatAttribute1: vertices texCoord set 1, C.floatAttribute2: vertices animation weights, C.intAttribute0: vertices joint IDs. C.floatAttribute3 = T(0).position- M.position, C.floatAttribute4 = T(0).normal - M.normal, C.floatAttribute5 = T(1).position - M.position, C.floatAttribute6 = T(1).normal- M.normal, ... C.floatAttribute2n+3 = T(n).position - M.position, C.floatAttribute2n+4 = T(n).normal- M.normal, Any thoughts?