UNPKG

playcanvas

Version:

PlayCanvas WebGL game engine

3 lines (2 loc) 1.62 kB
declare const _default: "\n\nattribute vertex_boneWeights: vec4f;\nattribute vertex_boneIndices: vec4f;\n\nvar texture_poseMap: texture_2d<f32>;\n\nstruct BoneMatrix {\n v1: vec4f,\n v2: vec4f,\n v3: vec4f,\n}\n\nfn getBoneMatrix(width: i32, index: i32) -> BoneMatrix {\n\n let v = index / width;\n let u = index % width;\n\n var result: BoneMatrix;\n result.v1 = textureLoad(texture_poseMap, vec2i(u + 0, v), 0);\n result.v2 = textureLoad(texture_poseMap, vec2i(u + 1, v), 0);\n result.v3 = textureLoad(texture_poseMap, vec2i(u + 2, v), 0);\n return result;\n}\n\nfn getSkinMatrix(indicesFloat: vec4f, weights: vec4f) -> mat4x4f {\n\n let width = i32(textureDimensions(texture_poseMap).x);\n var indices = vec4i(indicesFloat + 0.5) * 3;\n\n let boneA = getBoneMatrix(width, indices.x);\n let boneB = getBoneMatrix(width, indices.y);\n let boneC = getBoneMatrix(width, indices.z);\n let boneD = getBoneMatrix(width, indices.w);\n\n // ... rest of getSkinMatrix remains the same ...\n let v1 = boneA.v1 * weights.x + boneB.v1 * weights.y + boneC.v1 * weights.z + boneD.v1 * weights.w;\n let v2 = boneA.v2 * weights.x + boneB.v2 * weights.y + boneC.v2 * weights.z + boneD.v2 * weights.w;\n let v3 = boneA.v3 * weights.x + boneB.v3 * weights.y + boneC.v3 * weights.z + boneD.v3 * weights.w;\n\n let one = dot(weights, vec4f(1.0, 1.0, 1.0, 1.0));\n\n // transpose to 4x4 matrix\n return mat4x4f(\n v1.x, v2.x, v3.x, 0,\n v1.y, v2.y, v3.y, 0,\n v1.z, v2.z, v3.z, 0,\n v1.w, v2.w, v3.w, one\n );\n}\n"; export default _default;