diff options
| author | Valentin Popov <valentin@popov.link> | 2026-11-01 04:31:43 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-11-01 04:31:43 +0300 |
| commit | dfa2db65cc7b052d91c30ce179df8bc07af0cb1b (patch) | |
| tree | e68748431233b85f92e33792cb8c8e05c9ed7a0b /adapters/fparkan-render-vulkan/shaders | |
| parent | 2de24962e01ee48dd11eaf64edb75ef3958e71d8 (diff) | |
| download | fparkan-dfa2db65cc7b052d91c30ce179df8bc07af0cb1b.tar.xz fparkan-dfa2db65cc7b052d91c30ce179df8bc07af0cb1b.zip | |
feat(render): add planar water reflections
Diffstat (limited to 'adapters/fparkan-render-vulkan/shaders')
| -rw-r--r-- | adapters/fparkan-render-vulkan/shaders/triangle.frag | 16 | ||||
| -rw-r--r-- | adapters/fparkan-render-vulkan/shaders/triangle.frag.spv | bin | 10632 -> 12292 bytes | |||
| -rw-r--r-- | adapters/fparkan-render-vulkan/shaders/triangle.vert | 2 | ||||
| -rw-r--r-- | adapters/fparkan-render-vulkan/shaders/triangle.vert.spv | bin | 20196 -> 20300 bytes |
4 files changed, 17 insertions, 1 deletions
diff --git a/adapters/fparkan-render-vulkan/shaders/triangle.frag b/adapters/fparkan-render-vulkan/shaders/triangle.frag index 6a6e752..ec0acdb 100644 --- a/adapters/fparkan-render-vulkan/shaders/triangle.frag +++ b/adapters/fparkan-render-vulkan/shaders/triangle.frag @@ -9,12 +9,14 @@ layout(location = 5) in vec3 in_base_diffuse; layout(location = 6) in vec3 in_base_specular; layout(location = 7) in vec3 in_overlay_diffuse; layout(location = 8) in vec3 in_overlay_specular; +layout(location = 9) in float in_world_z; layout(location = 0) out vec4 out_color; layout(set = 0, binding = 0) uniform sampler2D base_color; layout(set = 0, binding = 1) uniform sampler2D base_detail; layout(set = 0, binding = 2) uniform sampler2D overlay_color; layout(set = 0, binding = 3) uniform sampler2D overlay_detail; +layout(set = 1, binding = 0) uniform sampler2D reflection_color; layout(std140, set = 0, binding = 4) uniform FrameConstants { mat4 clip_from_world; @@ -66,6 +68,19 @@ layout(push_constant) uniform MaterialConstants { } material; void main() { + int mode = int(round(material.material_mode)); + if ((mode & 32) != 0 && (mode & 4) == 0 && in_world_z < frame.camera_position.w) { + discard; + } + if ((mode & 64) != 0) { + vec2 reflection_uv = gl_FragCoord.xy / vec2(textureSize(reflection_color, 0)); + vec3 rgb = texture(reflection_color, reflection_uv).rgb * in_base_diffuse + in_base_specular; + out_color = vec4(mix(rgb * in_color, frame.fog_color.rgb, in_fog_factor), material.diffuse_alpha); + if (out_color.a < material.alpha_cutoff) { + discard; + } + return; + } vec2 base_uv = vec2(material.base_page_x, material.base_page_y) + in_uv * vec2(material.base_page_w, material.base_page_h); vec2 detail_uv = vec2(material.detail_page_x, material.detail_page_y) @@ -78,7 +93,6 @@ void main() { vec4 detail = texture(base_detail, detail_uv); vec4 overlay = texture(overlay_color, overlay_uv); vec4 overlay_detail_sample = texture(overlay_detail, overlay_detail_uv); - int mode = int(round(material.material_mode)); int combiner_mode = mode & 3; // Native sky mode 4 combines nebula and stars as diff --git a/adapters/fparkan-render-vulkan/shaders/triangle.frag.spv b/adapters/fparkan-render-vulkan/shaders/triangle.frag.spv Binary files differindex 7b7c3da..84c8a0c 100644 --- a/adapters/fparkan-render-vulkan/shaders/triangle.frag.spv +++ b/adapters/fparkan-render-vulkan/shaders/triangle.frag.spv diff --git a/adapters/fparkan-render-vulkan/shaders/triangle.vert b/adapters/fparkan-render-vulkan/shaders/triangle.vert index 078a0d1..889a379 100644 --- a/adapters/fparkan-render-vulkan/shaders/triangle.vert +++ b/adapters/fparkan-render-vulkan/shaders/triangle.vert @@ -19,6 +19,7 @@ layout(location = 5) out vec3 out_base_diffuse; layout(location = 6) out vec3 out_base_specular; layout(location = 7) out vec3 out_overlay_diffuse; layout(location = 8) out vec3 out_overlay_specular; +layout(location = 9) out float out_world_z; layout(std140, set = 0, binding = 4) uniform FrameConstants { mat4 clip_from_world; @@ -241,6 +242,7 @@ LightingTerms native_material_lighting( } void main() { + out_world_z = in_position.z; out_color = in_color; out_uv = in_uv; out_detail_uv = in_detail_uv; diff --git a/adapters/fparkan-render-vulkan/shaders/triangle.vert.spv b/adapters/fparkan-render-vulkan/shaders/triangle.vert.spv Binary files differindex 4fc9a1b..ff28c23 100644 --- a/adapters/fparkan-render-vulkan/shaders/triangle.vert.spv +++ b/adapters/fparkan-render-vulkan/shaders/triangle.vert.spv |
