summaryrefslogtreecommitdiff
path: root/shaders/model.vert.slang
diff options
context:
space:
mode:
authorConnor Thomson <blumatrikz@gmail.com>2026-09-12 14:16:55 -0700
committerConnor Thomson <blumatrikz@gmail.com>2026-09-12 14:16:55 -0700
commit251b611fef77533082165bab0b88eefa05b49fbe (patch)
treea3286e1fb991f5b0ecbace6208cb6c0ef1dcb845 /shaders/model.vert.slang
parent8fc46365d6bdcde0c18a8b413b9f7a80fa487107 (diff)
Add simple shadowsHEADmaster
Diffstat (limited to 'shaders/model.vert.slang')
-rw-r--r--shaders/model.vert.slang25
1 files changed, 15 insertions, 10 deletions
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