From 251b611fef77533082165bab0b88eefa05b49fbe Mon Sep 17 00:00:00 2001 From: Connor Thomson Date: Sat, 12 Sep 2026 14:16:55 -0700 Subject: Add simple shadows --- shaders/model.vert.slang | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'shaders/model.vert.slang') diff --git a/shaders/model.vert.slang b/shaders/model.vert.slang index 380ff37..3ddb39d 100644 --- a/shaders/model.vert.slang +++ b/shaders/model.vert.slang @@ -19,8 +19,9 @@ struct model_uniforms { float4x4 mvp; float4x4 model; + float4x4 light_view_projection; float3 camera_position; - float padding; + float shadow_normal_offset; }; [[vk::binding(0, 1)]] @@ -32,18 +33,22 @@ struct VSInput { }; struct VSOutput { - float4 position : SV_Position; - float3 normal : TEXCOORD0; - float3 world_position : TEXCOORD1; - float3 camera_position : TEXCOORD2; + float4 position : SV_Position; + float3 normal : TEXCOORD0; + float3 world_position : TEXCOORD1; + float3 camera_position : TEXCOORD2; + float4 light_space_position : TEXCOORD3; }; VSOutput main(VSInput input) { VSOutput output; - float4 world_position = mul(uniforms.model, float4(input.position, 1.0)); - output.position = mul(uniforms.mvp, float4(input.position, 1.0)); - output.normal = normalize(mul((float3x3)uniforms.model, input.normal)); - output.world_position = world_position.xyz; - output.camera_position = uniforms.camera_position; + float4 world_position = mul(uniforms.model, float4(input.position, 1.0)); + float3 world_normal = normalize(mul((float3x3)uniforms.model, input.normal)); + output.position = mul(uniforms.mvp, float4(input.position, 1.0)); + output.normal = world_normal; + output.world_position = world_position.xyz; + output.camera_position = uniforms.camera_position; + float3 offset_position = world_position.xyz + world_normal * uniforms.shadow_normal_offset; + output.light_space_position = mul(uniforms.light_view_projection, float4(offset_position, 1.0)); return output; } \ No newline at end of file -- cgit v1.2.3