diff options
Diffstat (limited to 'shaders/model.vert.slang')
| -rw-r--r-- | shaders/model.vert.slang | 25 |
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 |