1import package::render::mesh_types::SkinnedMesh; 2import package::render::mesh_bindings::mesh; 4@if(SKINNED && SKINS_USE_UNIFORM_BUFFERS) 5@group(2) @binding(1) var<uniform> joint_matrices: SkinnedMesh; 6@if(SKINNED && !SKINS_USE_UNIFORM_BUFFERS) 7@group(2) @binding(1) var<storage> joint_matrices: array<mat4x4<f32>>; 15@if(SKINNED && SKINS_USE_UNIFORM_BUFFERS) 16@group(2) @binding(6) var<uniform> prev_joint_matrices: SkinnedMesh; 17@if(SKINNED && !SKINS_USE_UNIFORM_BUFFERS) 18@group(2) @binding(6) var<storage> prev_joint_matrices: array<mat4x4<f32>>; 26@if(SKINS_USE_UNIFORM_BUFFERS) 27 return weights.x * joint_matrices.data[indexes.x] 28 + weights.y * joint_matrices.data[indexes.y] 29 + weights.z * joint_matrices.data[indexes.z] 30 + weights.w * joint_matrices.data[indexes.w]; 31@if(!SKINS_USE_UNIFORM_BUFFERS) 32 var skin_index = mesh[instance_index].current_skin_index; 33@if(!SKINS_USE_UNIFORM_BUFFERS) 34 return weights.x * joint_matrices[skin_index + indexes.x] 35 + weights.y * joint_matrices[skin_index + indexes.y] 36 + weights.z * joint_matrices[skin_index + indexes.z] 37 + weights.w * joint_matrices[skin_index + indexes.w]; 50@if(SKINS_USE_UNIFORM_BUFFERS) 51 return weights.x * prev_joint_matrices.data[indexes.x] 52 + weights.y * prev_joint_matrices.data[indexes.y] 53 + weights.z * prev_joint_matrices.data[indexes.z] 54 + weights.w * prev_joint_matrices.data[indexes.w]; 55@if(!SKINS_USE_UNIFORM_BUFFERS) 56 let skin_index = mesh[instance_index].current_skin_index; 57@if(!SKINS_USE_UNIFORM_BUFFERS) 58 return weights.x * prev_joint_matrices[skin_index + indexes.x] 59 + weights.y * prev_joint_matrices[skin_index + indexes.y] 60 + weights.z * prev_joint_matrices[skin_index + indexes.z] 61 + weights.w * prev_joint_matrices[skin_index + indexes.w]; 65fn inverse_transpose_3x3m(in: mat3x3<f32>) -> mat3x3<f32> { 66 let x = cross(in[1], in[2]); 67 let y = cross(in[2], in[0]); 68 let z = cross(in[0], in[1]); 69 let det = dot(in[2], z); 79 world_from_local: mat4x4<f32>, 83 inverse_transpose_3x3m( 85 world_from_local[0].xyz, 86 world_from_local[1].xyz, 87 world_from_local[2].xyz