aboutsummaryrefslogtreecommitdiff
path: root/adapters/fparkan-render-vulkan/shaders
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-11-01 13:39:37 +0300
committerValentin Popov <valentin@popov.link>2026-11-01 13:39:37 +0300
commit55e98d7ff6224aa3bf4b5d4260a594705ee2133f (patch)
tree828a6ea2ad0ebf7cc127e20fb8a0a03673636a35 /adapters/fparkan-render-vulkan/shaders
parentbbd31fc25336d6a2e6c5927ad4d7101696f8bd78 (diff)
downloadfparkan-55e98d7ff6224aa3bf4b5d4260a594705ee2133f.tar.xz
fparkan-55e98d7ff6224aa3bf4b5d4260a594705ee2133f.zip
fix(render): draw translucent water into planar reflectionstrunk
Diffstat (limited to 'adapters/fparkan-render-vulkan/shaders')
-rw-r--r--adapters/fparkan-render-vulkan/shaders/triangle.frag11
-rw-r--r--adapters/fparkan-render-vulkan/shaders/triangle.frag.spvbin14716 -> 15060 bytes
2 files changed, 7 insertions, 4 deletions
diff --git a/adapters/fparkan-render-vulkan/shaders/triangle.frag b/adapters/fparkan-render-vulkan/shaders/triangle.frag
index 2c71278..b945905 100644
--- a/adapters/fparkan-render-vulkan/shaders/triangle.frag
+++ b/adapters/fparkan-render-vulkan/shaders/triangle.frag
@@ -75,7 +75,9 @@ void main() {
if ((mode & 32) != 0 && (mode & 4) == 0 && in_world_position.z < frame.camera_position.w) {
discard;
}
- if ((mode & 64) != 0) {
+ vec2 base_uv = vec2(material.base_page_x, material.base_page_y)
+ + in_uv * vec2(material.base_page_w, material.base_page_h);
+ if ((mode & (64 | 256)) != 0) {
vec2 reflection_uv = gl_FragCoord.xy / vec2(textureSize(reflection_color, 0));
vec2 span = frame.embm_bounds.zw - frame.embm_bounds.xy;
vec2 plane_uv = vec2(1.0) - (in_world_position.yx - frame.embm_bounds.yx) / span.yx;
@@ -92,15 +94,16 @@ void main() {
reflection_uv = displaced_clip.xy / displaced_clip.w * 0.5 + 0.5;
}
}
- vec3 rgb = texture(reflection_color, reflection_uv).rgb * in_base_diffuse + in_base_specular;
+ vec3 water_color = (mode & 256) != 0
+ ? texture(base_color, base_uv).rgb
+ : texture(reflection_color, reflection_uv).rgb;
+ vec3 rgb = water_color * 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)
+ in_detail_uv * vec2(material.detail_page_w, material.detail_page_h);
vec2 overlay_uv = vec2(material.overlay_page_x, material.overlay_page_y)
diff --git a/adapters/fparkan-render-vulkan/shaders/triangle.frag.spv b/adapters/fparkan-render-vulkan/shaders/triangle.frag.spv
index 6deef9d..02596d1 100644
--- a/adapters/fparkan-render-vulkan/shaders/triangle.frag.spv
+++ b/adapters/fparkan-render-vulkan/shaders/triangle.frag.spv
Binary files differ