Skip to main content

Variable: skin

const skin: object

Defined in: modules/engine/skin/skin.ts:144

Type Declaration​

bindingLayout​

readonly bindingLayout: readonly [{ group: 0; name: "skin"; }, { group: 0; name: "skinJointMatrices"; visibility: 1; }]

bindings​

readonly bindings: SkinBindings

defines​

readonly defines: object

defines.SKIN_MAX_JOINTS​

SKIN_MAX_JOINTS: 64

Fits comfortably inside the minimum portable WebGL uniform-block limit.

dependencies​

readonly dependencies: [] = []

fs​

fs: ""

getUniforms​

readonly getUniforms: (props, _previousUniforms?) => SkinUniforms & SkinBindings

Parameters​

props?​

SkinProps = {}

_previousUniforms?​

SkinUniforms

Returns​

SkinUniforms & SkinBindings

name​

readonly name: "skin" = 'skin'

props​

readonly props: SkinProps

source​

source: "\nstruct skinUniforms {\n jointMatrix: array<mat4x4<f32>, 64>,\n};\n\n@group(0) @binding(auto) var<uniform> skin: skinUniforms;\n\n#ifdef HAS_INSTANCED_SKIN\n@group(0) @binding(auto) var<storage, read> skinJointMatrices: array<mat4x4<f32>>;\n\nfn getInstancedSkinMatrix(\n weights: vec4f,\n joints: vec4u,\n instanceIndex: u32,\n jointsPerInstance: u32\n) -> mat4x4<f32> {\n let firstJoint = instanceIndex * jointsPerInstance;\n return (weights.x * skinJointMatrices[firstJoint + joints.x])\n + (weights.y * skinJointMatrices[firstJoint + joints.y])\n + (weights.z * skinJointMatrices[firstJoint + joints.z])\n + (weights.w * skinJointMatrices[firstJoint + joints.w]);\n}\n#else\n#ifdef HAS_LARGE_SKIN\n@group(0) @binding(auto) var<storage, read> skinJointMatrices: array<mat4x4<f32>>;\n#endif\n#endif\n\nfn getSkinMatrix(weights: vec4f, joints: vec4u) -> mat4x4<f32> {\n#ifdef HAS_LARGE_SKIN\n return (weights.x * skinJointMatrices[joints.x])\n + (weights.y * skinJointMatrices[joints.y])\n + (weights.z * skinJointMatrices[joints.z])\n + (weights.w * skinJointMatrices[joints.w]);\n#else\n return (weights.x * skin.jointMatrix[joints.x])\n + (weights.y * skin.jointMatrix[joints.y])\n + (weights.z * skin.jointMatrix[joints.z])\n + (weights.w * skin.jointMatrix[joints.w]);\n#endif\n}\n"

uniforms​

readonly uniforms: SkinUniforms

uniformTypes​

readonly uniformTypes: object

uniformTypes.jointMatrix​

readonly jointMatrix: readonly ["mat4x4<f32>", 64]

vs​

vs: "\nlayout(std140) uniform skinUniforms {\n mat4 jointMatrix[SKIN_MAX_JOINTS];\n} skin;\n\n#ifdef HAS_INSTANCED_SKIN\nuniform highp sampler2D skinJointMatrices;\n\nmat4 getInstancedJointMatrix(uint jointIndex, uint instanceIndex) {\n int firstColumn = int(jointIndex * 4u);\n int row = int(instanceIndex);\n return mat4(\n texelFetch(skinJointMatrices, ivec2(firstColumn, row), 0),\n texelFetch(skinJointMatrices, ivec2(firstColumn + 1, row), 0),\n texelFetch(skinJointMatrices, ivec2(firstColumn + 2, row), 0),\n texelFetch(skinJointMatrices, ivec2(firstColumn + 3, row), 0)\n );\n}\n\nmat4 getInstancedSkinMatrix(\n vec4 weights,\n uvec4 joints,\n uint instanceIndex,\n uint jointsPerInstance\n) {\n return (weights.x * getInstancedJointMatrix(joints.x, instanceIndex))\n + (weights.y * getInstancedJointMatrix(joints.y, instanceIndex))\n + (weights.z * getInstancedJointMatrix(joints.z, instanceIndex))\n + (weights.w * getInstancedJointMatrix(joints.w, instanceIndex));\n}\n#else\n#ifdef HAS_LARGE_SKIN\nuniform highp sampler2D skinJointMatrices;\n\nmat4 getSkinJointMatrix(uint jointIndex) {\n int firstColumn = int(jointIndex * 4u);\n return mat4(\n texelFetch(skinJointMatrices, ivec2(firstColumn, 0), 0),\n texelFetch(skinJointMatrices, ivec2(firstColumn + 1, 0), 0),\n texelFetch(skinJointMatrices, ivec2(firstColumn + 2, 0), 0),\n texelFetch(skinJointMatrices, ivec2(firstColumn + 3, 0), 0)\n );\n}\n#endif\n#endif\n\nmat4 getSkinMatrix(vec4 weights, uvec4 joints) {\n#ifdef HAS_LARGE_SKIN\n return (weights.x * getSkinJointMatrix(joints.x))\n + (weights.y * getSkinJointMatrix(joints.y))\n + (weights.z * getSkinJointMatrix(joints.z))\n + (weights.w * getSkinJointMatrix(joints.w));\n#else\n return (weights.x * skin.jointMatrix[joints.x])\n + (weights.y * skin.jointMatrix[joints.y])\n + (weights.z * skin.jointMatrix[joints.z])\n + (weights.w * skin.jointMatrix[joints.w]);\n#endif\n}\n\n"