adding custom pipeline for water (what a journey to do so...)

This commit is contained in:
2025-06-02 00:00:08 +02:00
parent ce9335ba6a
commit f6decee5fa
22 changed files with 355 additions and 122 deletions

39
Resources/Shaders/WaterFragment.nzsl git.filemode.normal_file
View File

@@ -0,0 +1,39 @@
[nzsl_version("1.0")]
module;
struct VertOut
{
[location(0)] color: vec4[f32],
[location(1)] uv: vec2[f32],
[location(2)] time: f32,
[builtin(position)] pos: vec4[f32]
}
struct FragmentData
{
dissolve_texture_factor: f32,
dissolve_black_white_colors_factor: f32,
dissolve_normals_colors_factor: f32,
}
struct FragOut
{
[location(0)] color: vec4[f32]
}
external
{
[set(1), binding(0)] u_albedo: sampler2D[f32],
[set(1), binding(1)] u_fragment_data: uniform[FragmentData],
}
[entry(frag)]
fn main(input: VertOut) -> FragOut
{
if(input.color.a == 0.0)
discard;
let output: FragOut;
output.color = input.color * u_albedo.Sample(input.uv) * vec4[f32](sin(input.time), 1.0, cos(input.time), 1.0);
return output;
}

49
Resources/Shaders/WaterVertex.nzsl git.filemode.normal_file
View File

@@ -0,0 +1,49 @@
[nzsl_version("1.0")]
module;
import ViewerData from ScopEngine.ViewerData;
struct VertIn
{
[location(0)] pos: vec4[f32],
[location(1)] color: vec4[f32],
[location(2)] normal: vec4[f32],
[location(3)] uv: vec2[f32]
}
struct VertOut
{
[location(0)] color: vec4[f32],
[location(1)] uv: vec2[f32],
[location(2)] time: f32,
[builtin(position)] pos: vec4[f32]
}
struct ModelData
{
matrix: mat4[f32],
normal: mat4[f32],
}
struct CustomData
{
time: f32,
}
external
{
[set(0), binding(0)] viewer_data: uniform[ViewerData],
[set(0), binding(1)] data: uniform[CustomData],
model: push_constant[ModelData]
}
[entry(vert)]
fn main(input: VertIn) -> VertOut
{
let output: VertOut;
output.color = input.color;
output.uv = input.uv;
output.time = data.time;
output.pos = viewer_data.view_proj_matrix * model.matrix * input.pos;
return output;
}