diff options
| author | Valentin Popov <valentin@popov.link> | 2026-10-31 18:13:43 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-10-31 18:13:43 +0300 |
| commit | 9f643149a69a149612cffd65a953527630e95647 (patch) | |
| tree | 16954a813dc0b7a870f75f2e1f113041676d0837 /adapters/fparkan-render-vulkan/shaders/triangle.vert | |
| parent | 108a04b70e0cd5032d417cc7fd00cec2a385246b (diff) | |
| download | fparkan-9f643149a69a149612cffd65a953527630e95647.tar.xz fparkan-9f643149a69a149612cffd65a953527630e95647.zip | |
fix(render): use native squared distance for vertex fog
Diffstat (limited to 'adapters/fparkan-render-vulkan/shaders/triangle.vert')
| -rw-r--r-- | adapters/fparkan-render-vulkan/shaders/triangle.vert | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/adapters/fparkan-render-vulkan/shaders/triangle.vert b/adapters/fparkan-render-vulkan/shaders/triangle.vert index d1e2e04..078a0d1 100644 --- a/adapters/fparkan-render-vulkan/shaders/triangle.vert +++ b/adapters/fparkan-render-vulkan/shaders/triangle.vert @@ -130,12 +130,13 @@ float native_specular_power(float cosine, float power) { } float native_fog_factor(vec3 world_position) { - float fog_span = frame.fog_distances.y - frame.fog_distances.x; - float distance_to_camera = distance(world_position, frame.camera_position.xyz); - if (fog_span <= 0.000001 || distance_to_camera <= frame.fog_distances.x) { + float fog_span_squared = frame.fog_distances.w - frame.fog_distances.z; + vec3 to_camera = world_position - frame.camera_position.xyz; + float distance_squared = dot(to_camera, to_camera); + if (fog_span_squared <= 0.000001 || distance_squared <= frame.fog_distances.z) { return 0.0; } - return clamp((distance_to_camera - frame.fog_distances.x) / fog_span, 0.0, 1.0); + return clamp((distance_squared - frame.fog_distances.z) / fog_span_squared, 0.0, 1.0); } vec3 normalized_or(vec3 value, vec3 fallback) { |
