diff options
author | metamuffin <metamuffin@disroot.org> | 2025-01-24 21:18:55 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-01-24 21:18:55 +0100 |
commit | 006ad7ce6d30d764411dcf8c2527f2c80e722491 (patch) | |
tree | 957b60eec535ddcea4f842919a99f806b6d55217 /client/src/shaders/vertex_world_skin.wgsl | |
parent | b4aaaae52b3b746a5e1ef8a98151c627f2787e38 (diff) | |
download | weareserver-006ad7ce6d30d764411dcf8c2527f2c80e722491.tar weareserver-006ad7ce6d30d764411dcf8c2527f2c80e722491.tar.bz2 weareserver-006ad7ce6d30d764411dcf8c2527f2c80e722491.tar.zst |
minimal progress but diffuse lighting works again
Diffstat (limited to 'client/src/shaders/vertex_world_skin.wgsl')
-rw-r--r-- | client/src/shaders/vertex_world_skin.wgsl | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/client/src/shaders/vertex_world_skin.wgsl b/client/src/shaders/vertex_world_skin.wgsl index 633f06b..6e2b308 100644 --- a/client/src/shaders/vertex_world_skin.wgsl +++ b/client/src/shaders/vertex_world_skin.wgsl @@ -31,7 +31,7 @@ struct VertexOut { struct PushConst { modelviewproject: mat4x4<f32>, - modelview: mat4x4<f32>, + model: mat4x4<f32>, } @group(3) @binding(0) var<uniform> joints: array<mat4x4<f32>, 128>; @@ -39,13 +39,20 @@ var<push_constant> pc: PushConst; @vertex fn main(vi: VertexIn) -> VertexOut { - let clip = pc.modelview * vec4(vi.position, 1.); + let pos_in = vec4(vi.position, 1.); + let j0 = vi.joint_weight.x * (joints[vi.joint_index.x] * pos_in); + let j1 = vi.joint_weight.y * (joints[vi.joint_index.y] * pos_in); + let j2 = vi.joint_weight.z * (joints[vi.joint_index.z] * pos_in); + let j3 = vi.joint_weight.w * (joints[vi.joint_index.w] * pos_in); + let position = j0 + j1 + j2 + j3; + + let clip = pc.modelviewproject * position; let vo = VertexOut( clip, - normalize((pc.modelview * vec4(vi.normal, 0.)).xyz), - normalize((pc.modelview * vec4(vi.tangent, 0.)).xyz), + normalize((pc.model * vec4(vi.normal, 0.)).xyz), + normalize((pc.model * vec4(vi.tangent, 0.)).xyz), vi.texcoord, - (pc.modelview * vec4(vi.position, 1.)).xyz, + (pc.model * vec4(vi.position, 1.)).xyz, ); return vo; } |