From 3f2efea4f2f3c5bfb80ae76e5dde132fea989bd5 Mon Sep 17 00:00:00 2001 From: Joshua Barretto Date: Fri, 23 Sep 2022 15:04:47 +0100 Subject: [PATCH] Experimental river velocity in shaders --- assets/voxygen/i18n/en/hud/settings.ftl | 5 +- assets/voxygen/shaders/clouds-frag.glsl | 2 +- assets/voxygen/shaders/clouds-vert.glsl | 2 +- assets/voxygen/shaders/figure-frag.glsl | 6 +- assets/voxygen/shaders/fluid-frag/cheap.glsl | 5 +- assets/voxygen/shaders/fluid-frag/shiny.glsl | 80 ++++++++++++++----- assets/voxygen/shaders/fluid-vert.glsl | 10 ++- assets/voxygen/shaders/include/constants.glsl | 3 +- .../shaders/light-shadows-directed-vert.glsl | 2 +- .../shaders/light-shadows-figure-vert.glsl | 2 +- .../voxygen/shaders/light-shadows-frag.glsl | 2 +- .../voxygen/shaders/light-shadows-geom.glsl | 2 +- .../voxygen/shaders/light-shadows-vert.glsl | 2 +- assets/voxygen/shaders/lod-object-frag.glsl | 4 +- assets/voxygen/shaders/lod-terrain-frag.glsl | 6 +- assets/voxygen/shaders/lod-terrain-vert.glsl | 2 +- assets/voxygen/shaders/particle-frag.glsl | 6 +- .../shaders/point-light-shadows-vert.glsl | 2 +- assets/voxygen/shaders/postprocess-frag.glsl | 2 +- assets/voxygen/shaders/postprocess-vert.glsl | 2 +- .../shaders/rain-occlusion-directed-vert.glsl | 2 +- .../shaders/rain-occlusion-figure-vert.glsl | 2 +- assets/voxygen/shaders/skybox-frag.glsl | 2 +- assets/voxygen/shaders/skybox-vert.glsl | 2 +- assets/voxygen/shaders/sprite-frag.glsl | 6 +- assets/voxygen/shaders/terrain-frag.glsl | 6 +- assets/voxygen/shaders/terrain-vert.glsl | 2 +- assets/voxygen/shaders/trail-frag.glsl | 2 +- voxygen/src/hud/settings_window/video.rs | 6 +- voxygen/src/mesh/terrain.rs | 21 ++++- voxygen/src/render/mod.rs | 5 +- voxygen/src/render/pipelines/fluid.rs | 11 ++- .../src/render/renderer/pipeline_creation.rs | 5 +- voxygen/src/scene/terrain.rs | 10 +-- 34 files changed, 150 insertions(+), 79 deletions(-) diff --git a/assets/voxygen/i18n/en/hud/settings.ftl b/assets/voxygen/i18n/en/hud/settings.ftl index cb895bebe5..9dcf8e2988 100644 --- a/assets/voxygen/i18n/en/hud/settings.ftl +++ b/assets/voxygen/i18n/en/hud/settings.ftl @@ -73,7 +73,8 @@ hud-settings-upscale_factor = Internal Resolution hud-settings-cloud_rendering_mode = Cloud Rendering Mode hud-settings-fluid_rendering_mode = Fluid Rendering Mode hud-settings-fluid_rendering_mode-cheap = Cheap -hud-settings-fluid_rendering_mode-shiny = Shiny +hud-settings-fluid_rendering_mode-medium = Medium +hud-settings-fluid_rendering_mode-high = High hud-settings-cloud_rendering_mode-minimal = Minimal hud-settings-cloud_rendering_mode-low = Low hud-settings-cloud_rendering_mode-medium = Medium @@ -93,7 +94,7 @@ hud-settings-resolution = Resolution hud-settings-bit_depth = Bit Depth hud-settings-refresh_rate = Refresh Rate hud-settings-lighting_rendering_mode = Lighting Rendering Mode -hud-settings-lighting_rendering_mode-ashikhmin = Type A - High +hud-settings-lighting_rendering_mode-ashikhmin = Type A - High hud-settings-lighting_rendering_mode-blinnphong = Type B - Medium hud-settings-lighting_rendering_mode-lambertian = Type L - Cheap hud-settings-shadow_rendering_mode = Shadow Rendering Mode diff --git a/assets/voxygen/shaders/clouds-frag.glsl b/assets/voxygen/shaders/clouds-frag.glsl index 273bf4f4db..933f73c465 100644 --- a/assets/voxygen/shaders/clouds-frag.glsl +++ b/assets/voxygen/shaders/clouds-frag.glsl @@ -8,7 +8,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/assets/voxygen/shaders/clouds-vert.glsl b/assets/voxygen/shaders/clouds-vert.glsl index 933d3a3dc3..727e94b4a8 100644 --- a/assets/voxygen/shaders/clouds-vert.glsl +++ b/assets/voxygen/shaders/clouds-vert.glsl @@ -8,7 +8,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/assets/voxygen/shaders/figure-frag.glsl b/assets/voxygen/shaders/figure-frag.glsl index 1dbd776170..be30076f8c 100644 --- a/assets/voxygen/shaders/figure-frag.glsl +++ b/assets/voxygen/shaders/figure-frag.glsl @@ -10,7 +10,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif @@ -135,7 +135,7 @@ void main() { // float moon_light = get_moon_brightness(moon_dir); /* float sun_shade_frac = horizon_at(f_pos, sun_dir); float moon_shade_frac = horizon_at(f_pos, moon_dir); */ -#if (SHADOW_MODE == SHADOW_MODE_CHEAP || SHADOW_MODE == SHADOW_MODE_MAP || FLUID_MODE == FLUID_MODE_SHINY) +#if (SHADOW_MODE == SHADOW_MODE_CHEAP || SHADOW_MODE == SHADOW_MODE_MAP || FLUID_MODE >= FLUID_MODE_MEDIUM) float f_alt = alt_at(f_pos.xy); #elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP) float f_alt = f_pos.z; @@ -206,7 +206,7 @@ void main() { vec3 cam_attenuation = vec3(1); float fluid_alt = max(f_pos.z + 1, floor(f_alt + 1)); vec3 mu = medium.x == MEDIUM_WATER ? MU_WATER : vec3(0.0); - #if (FLUID_MODE == FLUID_MODE_SHINY) + #if (FLUID_MODE >= FLUID_MODE_MEDIUM) cam_attenuation = medium.x == MEDIUM_WATER ? compute_attenuation_point(cam_pos.xyz, view_dir, mu, fluid_alt, /*cam_pos.z <= fluid_alt ? cam_pos.xyz : f_pos*/f_pos) : compute_attenuation_point(f_pos, -view_dir, mu, fluid_alt, /*cam_pos.z <= fluid_alt ? cam_pos.xyz : f_pos*/cam_pos.xyz); diff --git a/assets/voxygen/shaders/fluid-frag/cheap.glsl b/assets/voxygen/shaders/fluid-frag/cheap.glsl index 39903c1324..8a598964e2 100644 --- a/assets/voxygen/shaders/fluid-frag/cheap.glsl +++ b/assets/voxygen/shaders/fluid-frag/cheap.glsl @@ -8,7 +8,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif @@ -23,6 +23,7 @@ layout(location = 0) in vec3 f_pos; layout(location = 1) flat in uint f_pos_norm; +layout(location = 2) in vec2 f_vel; // in vec3 f_col; // in float f_light; // in vec3 light_pos[2]; @@ -88,7 +89,7 @@ void main() { /* vec3 sun_dir = get_sun_dir(time_of_day.x); vec3 moon_dir = get_moon_dir(time_of_day.x); */ -#if (SHADOW_MODE == SHADOW_MODE_CHEAP || SHADOW_MODE == SHADOW_MODE_MAP || FLUID_MODE == FLUID_MODE_SHINY) +#if (SHADOW_MODE == SHADOW_MODE_CHEAP || SHADOW_MODE == SHADOW_MODE_MAP || FLUID_MODE >= FLUID_MODE_MEDIUM) float f_alt = alt_at(f_pos.xy); #elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP) float f_alt = f_pos.z; diff --git a/assets/voxygen/shaders/fluid-frag/shiny.glsl b/assets/voxygen/shaders/fluid-frag/shiny.glsl index 4c4b58a961..5ff512e3e4 100644 --- a/assets/voxygen/shaders/fluid-frag/shiny.glsl +++ b/assets/voxygen/shaders/fluid-frag/shiny.glsl @@ -8,7 +8,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif @@ -25,6 +25,7 @@ layout(location = 0) in vec3 f_pos; layout(location = 1) flat in uint f_pos_norm; +layout(location = 2) in vec2 f_vel; // in vec3 f_col; // in float f_light; // in vec3 light_pos[2]; @@ -60,29 +61,66 @@ vec2 wavedx(vec2 position, vec2 direction, float speed, float frequency, float t } // Based on https://www.shadertoy.com/view/MdXyzX -float wave_height(vec3 pos){ - pos *= 0.3; +float wave_height(vec2 pos){ float iter = 0.0; - float phase = 6.0; - float speed = 2.0; - float weight = 1.0; + float phase = 4.0; + float weight = 1.5; float w = 0.0; float ws = 0.0; - const float drag_factor = 0.048; - for(int i = 0; i < 11; i ++){ + const float speed_per_iter = 0.1; + #if (FLUID_MODE == FLUID_MODE_HIGH) + float speed = 1.0; + pos *= 0.15; + const float drag_factor = 0.03; + const float iters = 21; + #else + float speed = 2.0; + pos *= 0.3; + const float drag_factor = 0.04; + const float iters = 11; + #endif + const float iter_shift = (3.14159 * 2.0) / 7.3; + + vec2 dir = vec2( + sin(pos.y * 0.1), + sin(pos.x * 0.1) + ) * 0; + for(int i = 0; i < iters; i ++) { vec2 p = vec2(sin(iter), cos(iter)); - vec2 res = wavedx(pos.xy, p, speed, phase, tick.x); - pos.xy += p * res.y * weight * drag_factor; - w += res.x * weight; - iter += 10.0; + vec2 res = wavedx(pos, p, speed, phase, tick.x); + pos += p * res.y * weight * drag_factor; + w += res.x * weight * (1.0 + max(dot(p, -dir), 0.0)); + iter += iter_shift * 1.5; ws += weight; - weight = mix(weight, 0.0, 0.15); - phase *= 1.18; - speed *= 1.07; + weight = mix(weight, 0.0, 0.2); + phase *= 1.23; + speed += speed_per_iter; } return w / ws * 10.0; } +float wave_height2(vec2 pos){ + vec2 vel = vec2(sin(pos.x * 0.2), cos(pos.y * 0.2)) * 2.0; + vel = cross(vec3(vel, 0), vec3(0, 0, 1)).xy; + vel = lod_norm(f_pos.xy - 16).xy * 10.0; + vel = f_vel * 3.5; + float hx = mix( + wave_height(pos - vec2(1, 0) * tick.x * floor(vel.x) - vec2(0, 1) * tick.x * floor(vel.y)), + wave_height(pos - vec2(1, 0) * tick.x * floor(vel.x + 1.0) - vec2(0, 1) * tick.x * floor(vel.y)), + fract(vel.x + 1.0) + ); + float hx2 = mix( + wave_height(pos - vec2(1, 0) * tick.x * floor(vel.x) - vec2(0, 1) * tick.x * floor(vel.y + 1.0)), + wave_height(pos - vec2(1, 0) * tick.x * floor(vel.x + 1.0) - vec2(0, 1) * tick.x * floor(vel.y + 1.0)), + fract(vel.x + 1.0) + ); + return mix( + hx, + hx2, + fract(vel.y + 1.0) + ); +} + void main() { #ifdef EXPERIMENTAL_BAREMINIMUM tgt_color = vec4(simple_lighting(f_pos.xyz, MU_SCATTER, 1.0), 0.5); @@ -127,11 +165,11 @@ void main() { } vec3 c_norm = cross(f_norm, b_norm); - vec3 wave_pos = mod(f_pos + focus_off.xyz, vec3(3000.0)); - float wave_sample_dist = 0.025; - float wave00 = wave_height(wave_pos); - float wave10 = wave_height(wave_pos + vec3(wave_sample_dist, 0, 0)); - float wave01 = wave_height(wave_pos + vec3(0, wave_sample_dist, 0)); + vec3 wave_pos = mod(f_pos + focus_off.xyz, vec3(3000.0)) - (f_pos.z + focus_off.z) * 0.2; + float wave_sample_dist = 0.1; + float wave00 = wave_height2(wave_pos.xy); + float wave10 = wave_height2(wave_pos.xy + vec2(wave_sample_dist, 0)); + float wave01 = wave_height2(wave_pos.xy + vec2(0, wave_sample_dist)); // Possibility of div by zero when slope = 0, // however this only results in no water surface appearing @@ -175,7 +213,7 @@ void main() { //norm = f_norm; vec3 water_color = (1.0 - MU_WATER) * MU_SCATTER; -#if (SHADOW_MODE == SHADOW_MODE_CHEAP || SHADOW_MODE == SHADOW_MODE_MAP || FLUID_MODE == FLUID_MODE_SHINY) +#if (SHADOW_MODE == SHADOW_MODE_CHEAP || SHADOW_MODE == SHADOW_MODE_MAP || FLUID_MODE >= FLUID_MODE_MEDIUM) float f_alt = alt_at(f_pos.xy); #elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP) float f_alt = f_pos.z; diff --git a/assets/voxygen/shaders/fluid-vert.glsl b/assets/voxygen/shaders/fluid-vert.glsl index b078b87407..b9b9a79a21 100644 --- a/assets/voxygen/shaders/fluid-vert.glsl +++ b/assets/voxygen/shaders/fluid-vert.glsl @@ -8,7 +8,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif @@ -21,6 +21,7 @@ #include layout(location = 0) in uint v_pos_norm; +layout(location = 1) in uint v_vel; // in uint v_col_light; layout(std140, set = 2, binding = 0) @@ -42,6 +43,7 @@ uniform u_locals { layout(location = 0) out vec3 f_pos; layout(location = 1) flat out uint f_pos_norm; +layout(location = 2) out vec2 f_vel; // out vec3 f_col; // out float f_light; // out vec3 light_pos[2]; @@ -50,6 +52,10 @@ const float EXTRA_NEG_Z = 65536.0/*65536.1*/; void main() { f_pos = vec3(v_pos_norm & 0x3Fu, (v_pos_norm >> 6) & 0x3Fu, float((v_pos_norm >> 12) & 0x1FFFFu) - EXTRA_NEG_Z) + model_offs - focus_off.xyz; + f_vel = vec2( + (float(v_vel & 0xFFFFu) - 32768.0) / 1000.0, + (float((v_vel >> 16u) & 0xFFFFu) - 32768.0) / 1000.0 + ); // f_pos.z -= 250.0 * (1.0 - min(1.0001 - 0.02 / pow(tick.x - load_time, 10.0), 1.0)); // f_pos.z -= min(32.0, 25.0 * pow(distance(focus_pos.xy, f_pos.xy) / view_distance.x, 20.0)); @@ -73,7 +79,7 @@ void main() { // f_pos.xy += 0.01; // Avoid z-fighting // f_pos.x += 0.1 * sin(tick.x / 60 * hash(vec4(f_pos.xyz, 1.0))); // f_pos.y += 0.1 * sin(tick.x / 60 * hash(vec4(f_pos.xyz, 2.0))); -#if (FLUID_MODE == FLUID_MODE_SHINY) +#if (FLUID_MODE >= FLUID_MODE_MEDIUM) // f_pos.z -= 0.1 + 0.1 * (sin(tick.x/* / 60.0*/* 2.0 + f_pos.x * 2.0 + f_pos.y * 2.0) + 1.0) * 0.5; #endif diff --git a/assets/voxygen/shaders/include/constants.glsl b/assets/voxygen/shaders/include/constants.glsl index edd1e27b91..02bd473cb5 100644 --- a/assets/voxygen/shaders/include/constants.glsl +++ b/assets/voxygen/shaders/include/constants.glsl @@ -7,7 +7,8 @@ #define VOXYGEN_COMPUTATION_PREFERENCE_VERTEX 1 #define FLUID_MODE_CHEAP 0 -#define FLUID_MODE_SHINY 1 +#define FLUID_MODE_MEDIUM 1 +#define FLUID_MODE_HIGH 2 #define CLOUD_MODE_NONE 0 #define CLOUD_MODE_MINIMAL 1 diff --git a/assets/voxygen/shaders/light-shadows-directed-vert.glsl b/assets/voxygen/shaders/light-shadows-directed-vert.glsl index 1ff6fbffd9..7e2345f649 100644 --- a/assets/voxygen/shaders/light-shadows-directed-vert.glsl +++ b/assets/voxygen/shaders/light-shadows-directed-vert.glsl @@ -9,7 +9,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/assets/voxygen/shaders/light-shadows-figure-vert.glsl b/assets/voxygen/shaders/light-shadows-figure-vert.glsl index 1df58ae055..0f44dddfaf 100644 --- a/assets/voxygen/shaders/light-shadows-figure-vert.glsl +++ b/assets/voxygen/shaders/light-shadows-figure-vert.glsl @@ -11,7 +11,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/assets/voxygen/shaders/light-shadows-frag.glsl b/assets/voxygen/shaders/light-shadows-frag.glsl index 3671ace978..8adbcae038 100644 --- a/assets/voxygen/shaders/light-shadows-frag.glsl +++ b/assets/voxygen/shaders/light-shadows-frag.glsl @@ -13,7 +13,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/assets/voxygen/shaders/light-shadows-geom.glsl b/assets/voxygen/shaders/light-shadows-geom.glsl index 459232a926..adf22792af 100644 --- a/assets/voxygen/shaders/light-shadows-geom.glsl +++ b/assets/voxygen/shaders/light-shadows-geom.glsl @@ -13,7 +13,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/assets/voxygen/shaders/light-shadows-vert.glsl b/assets/voxygen/shaders/light-shadows-vert.glsl index 4bdbae25f4..14ab18eb1b 100644 --- a/assets/voxygen/shaders/light-shadows-vert.glsl +++ b/assets/voxygen/shaders/light-shadows-vert.glsl @@ -9,7 +9,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/assets/voxygen/shaders/lod-object-frag.glsl b/assets/voxygen/shaders/lod-object-frag.glsl index feb33a4362..ddbfcf0c3d 100644 --- a/assets/voxygen/shaders/lod-object-frag.glsl +++ b/assets/voxygen/shaders/lod-object-frag.glsl @@ -8,7 +8,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif @@ -41,7 +41,7 @@ void main() { vec3 cam_to_frag = normalize(f_pos - cam_pos.xyz); vec3 view_dir = -cam_to_frag; -#if (SHADOW_MODE == SHADOW_MODE_CHEAP || SHADOW_MODE == SHADOW_MODE_MAP || FLUID_MODE == FLUID_MODE_SHINY) +#if (SHADOW_MODE == SHADOW_MODE_CHEAP || SHADOW_MODE == SHADOW_MODE_MAP || FLUID_MODE >= FLUID_MODE_MEDIUM) float f_alt = alt_at(f_pos.xy); #elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP) float f_alt = f_pos.z; diff --git a/assets/voxygen/shaders/lod-terrain-frag.glsl b/assets/voxygen/shaders/lod-terrain-frag.glsl index 2358611b0a..892c57a707 100644 --- a/assets/voxygen/shaders/lod-terrain-frag.glsl +++ b/assets/voxygen/shaders/lod-terrain-frag.glsl @@ -8,7 +8,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif @@ -445,7 +445,7 @@ void main() { vec3 moon_dir = get_moon_dir(time_of_day.x); */ // voxel_norm = vec3(0.0); -#if (SHADOW_MODE == SHADOW_MODE_CHEAP || SHADOW_MODE == SHADOW_MODE_MAP || FLUID_MODE == FLUID_MODE_SHINY) +#if (SHADOW_MODE == SHADOW_MODE_CHEAP || SHADOW_MODE == SHADOW_MODE_MAP || FLUID_MODE >= FLUID_MODE_MEDIUM) float shadow_alt = /*f_pos.z;*/alt_at(f_pos.xy);//max(alt_at(f_pos.xy), f_pos.z); // float shadow_alt = f_pos.z; #elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP) @@ -648,7 +648,7 @@ void main() { // vec3 surf_color = illuminate(f_col, light, diffuse_light, ambient_light); // f_col = f_col + (hash(vec4(floor(vec3(focus_pos.xy + splay(v_pos_orig), f_pos.z)) * 3.0 - round(f_norm) * 0.5, 0)) - 0.5) * 0.05; // Small-scale noise vec3 surf_color; - #if (FLUID_MODE == FLUID_MODE_SHINY) + #if (FLUID_MODE >= FLUID_MODE_MEDIUM) if (length(f_col_raw - vec3(0.02, 0.06, 0.22)) < 0.025 && dot(vec3(0, 0, 1), f_norm) > 0.9) { vec3 water_color = (1.0 - MU_WATER) * MU_SCATTER; diff --git a/assets/voxygen/shaders/lod-terrain-vert.glsl b/assets/voxygen/shaders/lod-terrain-vert.glsl index da9f890bfd..f55bf9a091 100644 --- a/assets/voxygen/shaders/lod-terrain-vert.glsl +++ b/assets/voxygen/shaders/lod-terrain-vert.glsl @@ -8,7 +8,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/assets/voxygen/shaders/particle-frag.glsl b/assets/voxygen/shaders/particle-frag.glsl index a9259598c8..eaf05fc52b 100644 --- a/assets/voxygen/shaders/particle-frag.glsl +++ b/assets/voxygen/shaders/particle-frag.glsl @@ -8,7 +8,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif @@ -42,7 +42,7 @@ void main() { vec3 cam_to_frag = normalize(f_pos - cam_pos.xyz); vec3 view_dir = -cam_to_frag; -#if (SHADOW_MODE == SHADOW_MODE_CHEAP || SHADOW_MODE == SHADOW_MODE_MAP || FLUID_MODE == FLUID_MODE_SHINY) +#if (SHADOW_MODE == SHADOW_MODE_CHEAP || SHADOW_MODE == SHADOW_MODE_MAP || FLUID_MODE >= FLUID_MODE_MEDIUM) float f_alt = alt_at(f_pos.xy); #elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP) float f_alt = f_pos.z; @@ -88,7 +88,7 @@ void main() { vec3 cam_attenuation = vec3(1); float fluid_alt = max(f_pos.z + 1, floor(f_alt + 1)); vec3 mu = medium.x == MEDIUM_WATER ? MU_WATER : vec3(0.0); - #if (FLUID_MODE == FLUID_MODE_SHINY) + #if (FLUID_MODE >= FLUID_MODE_MEDIUM) cam_attenuation = medium.x == MEDIUM_WATER ? compute_attenuation_point(cam_pos.xyz, view_dir, MU_WATER, fluid_alt, /*cam_pos.z <= fluid_alt ? cam_pos.xyz : f_pos*/f_pos) : compute_attenuation_point(f_pos, -view_dir, vec3(0), fluid_alt, /*cam_pos.z <= fluid_alt ? cam_pos.xyz : f_pos*/cam_pos.xyz); diff --git a/assets/voxygen/shaders/point-light-shadows-vert.glsl b/assets/voxygen/shaders/point-light-shadows-vert.glsl index 507c831bc0..3c200474c8 100644 --- a/assets/voxygen/shaders/point-light-shadows-vert.glsl +++ b/assets/voxygen/shaders/point-light-shadows-vert.glsl @@ -9,7 +9,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/assets/voxygen/shaders/postprocess-frag.glsl b/assets/voxygen/shaders/postprocess-frag.glsl index 4276bde368..bdd0dc74cb 100644 --- a/assets/voxygen/shaders/postprocess-frag.glsl +++ b/assets/voxygen/shaders/postprocess-frag.glsl @@ -8,7 +8,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/assets/voxygen/shaders/postprocess-vert.glsl b/assets/voxygen/shaders/postprocess-vert.glsl index 21a6b3d8c2..de7998355b 100644 --- a/assets/voxygen/shaders/postprocess-vert.glsl +++ b/assets/voxygen/shaders/postprocess-vert.glsl @@ -8,7 +8,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/assets/voxygen/shaders/rain-occlusion-directed-vert.glsl b/assets/voxygen/shaders/rain-occlusion-directed-vert.glsl index c8bfd187e4..605f0a2dff 100644 --- a/assets/voxygen/shaders/rain-occlusion-directed-vert.glsl +++ b/assets/voxygen/shaders/rain-occlusion-directed-vert.glsl @@ -9,7 +9,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/assets/voxygen/shaders/rain-occlusion-figure-vert.glsl b/assets/voxygen/shaders/rain-occlusion-figure-vert.glsl index b7f940ea2b..f90d444e52 100644 --- a/assets/voxygen/shaders/rain-occlusion-figure-vert.glsl +++ b/assets/voxygen/shaders/rain-occlusion-figure-vert.glsl @@ -11,7 +11,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/assets/voxygen/shaders/skybox-frag.glsl b/assets/voxygen/shaders/skybox-frag.glsl index af28a40aa9..54da8cbc1b 100644 --- a/assets/voxygen/shaders/skybox-frag.glsl +++ b/assets/voxygen/shaders/skybox-frag.glsl @@ -8,7 +8,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/assets/voxygen/shaders/skybox-vert.glsl b/assets/voxygen/shaders/skybox-vert.glsl index 9f362fedb7..d4d34077ea 100644 --- a/assets/voxygen/shaders/skybox-vert.glsl +++ b/assets/voxygen/shaders/skybox-vert.glsl @@ -8,7 +8,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/assets/voxygen/shaders/sprite-frag.glsl b/assets/voxygen/shaders/sprite-frag.glsl index fd3ebdd503..6e276558c6 100644 --- a/assets/voxygen/shaders/sprite-frag.glsl +++ b/assets/voxygen/shaders/sprite-frag.glsl @@ -8,7 +8,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif @@ -51,7 +51,7 @@ void main() { vec3 cam_to_frag = normalize(f_pos - cam_pos.xyz); vec3 view_dir = -cam_to_frag; -#if (SHADOW_MODE == SHADOW_MODE_CHEAP || SHADOW_MODE == SHADOW_MODE_MAP || FLUID_MODE == FLUID_MODE_SHINY) +#if (SHADOW_MODE == SHADOW_MODE_CHEAP || SHADOW_MODE == SHADOW_MODE_MAP || FLUID_MODE >= FLUID_MODE_MEDIUM) float f_alt = alt_at(f_pos.xy); #elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP) float f_alt = f_pos.z; @@ -94,7 +94,7 @@ void main() { vec3 cam_attenuation = vec3(1); float fluid_alt = max(f_pos.z + 1, floor(f_alt + 1)); vec3 mu = medium.x == MEDIUM_WATER ? MU_WATER : vec3(0.0); - #if (FLUID_MODE == FLUID_MODE_SHINY) + #if (FLUID_MODE >= FLUID_MODE_MEDIUM) cam_attenuation = medium.x == MEDIUM_WATER ? compute_attenuation_point(cam_pos.xyz, view_dir, mu, fluid_alt, /*cam_pos.z <= fluid_alt ? cam_pos.xyz : f_pos*/f_pos) : compute_attenuation_point(f_pos, -view_dir, mu, fluid_alt, /*cam_pos.z <= fluid_alt ? cam_pos.xyz : f_pos*/cam_pos.xyz); diff --git a/assets/voxygen/shaders/terrain-frag.glsl b/assets/voxygen/shaders/terrain-frag.glsl index 34e38ef55c..4b5497b4ea 100644 --- a/assets/voxygen/shaders/terrain-frag.glsl +++ b/assets/voxygen/shaders/terrain-frag.glsl @@ -9,7 +9,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif @@ -209,7 +209,7 @@ void main() { /* vec3 sun_dir = get_sun_dir(time_of_day.x); vec3 moon_dir = get_moon_dir(time_of_day.x); */ -#if (SHADOW_MODE == SHADOW_MODE_CHEAP || SHADOW_MODE == SHADOW_MODE_MAP || FLUID_MODE == FLUID_MODE_SHINY) +#if (SHADOW_MODE == SHADOW_MODE_CHEAP || SHADOW_MODE == SHADOW_MODE_MAP || FLUID_MODE >= FLUID_MODE_MEDIUM) float f_alt = alt_at(f_pos.xy); #elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP) float f_alt = f_pos.z; @@ -396,7 +396,7 @@ void main() { reflected_light *= 0.4 + f_ao * 0.6; #ifndef EXPERIMENTAL_NOCAUSTICS - #if (FLUID_MODE == FLUID_MODE_SHINY) + #if (FLUID_MODE >= FLUID_MODE_MEDIUM) if (faces_fluid) { vec3 wpos = f_pos + vec3(focus_off.xy, 0); vec3 spos = (wpos + (fluid_alt - wpos.z) * vec3(sun_dir.xy, 0)) * 0.25; diff --git a/assets/voxygen/shaders/terrain-vert.glsl b/assets/voxygen/shaders/terrain-vert.glsl index d13a240587..166caa87f3 100644 --- a/assets/voxygen/shaders/terrain-vert.glsl +++ b/assets/voxygen/shaders/terrain-vert.glsl @@ -8,7 +8,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/assets/voxygen/shaders/trail-frag.glsl b/assets/voxygen/shaders/trail-frag.glsl index 23d6585f49..f99d4c83a6 100644 --- a/assets/voxygen/shaders/trail-frag.glsl +++ b/assets/voxygen/shaders/trail-frag.glsl @@ -8,7 +8,7 @@ #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE -#elif (FLUID_MODE == FLUID_MODE_SHINY) +#elif (FLUID_MODE >= FLUID_MODE_MEDIUM) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif diff --git a/voxygen/src/hud/settings_window/video.rs b/voxygen/src/hud/settings_window/video.rs index 81b7ba116d..47de730d48 100644 --- a/voxygen/src/hud/settings_window/video.rs +++ b/voxygen/src/hud/settings_window/video.rs @@ -1038,12 +1038,14 @@ impl<'a> Widget for Video<'a> { .color(TEXT_COLOR) .set(state.ids.fluid_mode_text, ui); - let mode_list = [FluidMode::Cheap, FluidMode::Shiny]; + let mode_list = [FluidMode::Cheap, FluidMode::Medium, FluidMode::High]; let mode_label_list = [ self.localized_strings .get_msg("hud-settings-fluid_rendering_mode-cheap"), self.localized_strings - .get_msg("hud-settings-fluid_rendering_mode-shiny"), + .get_msg("hud-settings-fluid_rendering_mode-medium"), + self.localized_strings + .get_msg("hud-settings-fluid_rendering_mode-high"), ]; // Get which fluid rendering mode is currently active diff --git a/voxygen/src/mesh/terrain.rs b/voxygen/src/mesh/terrain.rs index 13619b51df..6c41e0601a 100644 --- a/voxygen/src/mesh/terrain.rs +++ b/voxygen/src/mesh/terrain.rs @@ -9,7 +9,7 @@ use crate::{ scene::terrain::BlocksOfInterest, }; use common::{ - terrain::Block, + terrain::{Block, TerrainChunk}, util::either_with, vol::{ReadVol, RectRasterableVol}, volumes::vol_grid_2d::{CachedVolGrid2d, VolGrid2d}, @@ -226,8 +226,8 @@ fn calc_light + ReadVol + Debug>( } #[allow(clippy::type_complexity)] -pub fn generate_mesh<'a, V: RectRasterableVol + ReadVol + Debug + 'static>( - vol: &'a VolGrid2d, +pub fn generate_mesh<'a>( + vol: &'a VolGrid2d, (range, max_texture_size, _boi): (Aabb, Vec2, &'a BlocksOfInterest), ) -> MeshGen< TerrainVertex, @@ -390,7 +390,20 @@ pub fn generate_mesh<'a, V: RectRasterableVol + ReadVol + Debug + ' let mesh_delta = Vec3::new(0.0, 0.0, (z_start + range.min.z) as f32); let create_opaque = |atlas_pos, pos, norm, meta| TerrainVertex::new(atlas_pos, pos + mesh_delta, norm, meta); - let create_transparent = |_atlas_pos, pos, norm| FluidVertex::new(pos + mesh_delta, norm); + let create_transparent = |_atlas_pos, pos: Vec3, norm| { + let key = vol.pos_key(pos.map(|e| e.floor() as i32) + range.min); + let v00 = vol.get_key(key + Vec2::new(0, 0)).map_or(Vec3::zero(), |c| c.meta().river_velocity()); + let v10 = vol.get_key(key + Vec2::new(1, 0)).map_or(Vec3::zero(), |c| c.meta().river_velocity()); + let v01 = vol.get_key(key + Vec2::new(0, 1)).map_or(Vec3::zero(), |c| c.meta().river_velocity()); + let v11 = vol.get_key(key + Vec2::new(1, 1)).map_or(Vec3::zero(), |c| c.meta().river_velocity()); + let factor = pos / TerrainChunk::RECT_SIZE.map(|e| e as f32); + let vel = Lerp::lerp( + Lerp::lerp(v00, v10, factor.x.rem_euclid(1.0)), + Lerp::lerp(v01, v11, factor.x.rem_euclid(1.0)), + factor.y.rem_euclid(1.0), + ); + FluidVertex::new(pos + mesh_delta, norm, vel.xy()) + }; let mut greedy = GreedyMesh::::new(max_size, greedy::general_config()); diff --git a/voxygen/src/render/mod.rs b/voxygen/src/render/mod.rs index 5ddc5e8974..45d1d04cbd 100644 --- a/voxygen/src/render/mod.rs +++ b/voxygen/src/render/mod.rs @@ -155,6 +155,7 @@ pub enum FluidMode { /// diffraction, and no light attenuation through water. As a result, /// it can be much cheaper than shiny reflection. Cheap, + High, /// "Shiny" water. This water implements waves on the surfaces, some /// attempt at reflections, and tries to compute accurate light /// attenuation through water (this is what results in the @@ -172,11 +173,11 @@ pub enum FluidMode { /// which causes attenuation to be computed incorrectly; this can be /// addressed by using shadow maps (at least for terrain). #[serde(other)] - Shiny, + Medium, } impl Default for FluidMode { - fn default() -> Self { FluidMode::Shiny } + fn default() -> Self { FluidMode::Medium } } /// Lighting modes diff --git a/voxygen/src/render/pipelines/fluid.rs b/voxygen/src/render/pipelines/fluid.rs index a5c37fe961..6c89915927 100644 --- a/voxygen/src/render/pipelines/fluid.rs +++ b/voxygen/src/render/pipelines/fluid.rs @@ -7,10 +7,11 @@ use vek::*; #[derive(Copy, Clone, Debug, Zeroable, Pod)] pub struct Vertex { pos_norm: u32, + vel: u32, } impl Vertex { - pub fn new(pos: Vec3, norm: Vec3) -> Self { + pub fn new(pos: Vec3, norm: Vec3, river_velocity: Vec2) -> Self { let (norm_axis, norm_dir) = norm .as_slice() .iter() @@ -27,11 +28,17 @@ impl Vertex { | ((pos.y as u32) & 0x003F) << 6 | (((pos.z + EXTRA_NEG_Z).max(0.0).min((1 << 17) as f32) as u32) & 0x1FFFF) << 12 | (norm_bits & 0x7) << 29, + vel: river_velocity + .map2(Vec2::new(0, 16), |e, off| (((e * 1000.0 + 32768.9) as u16 as u32) << off)) + .reduce_bitor(), } } fn desc<'a>() -> wgpu::VertexBufferLayout<'a> { - const ATTRIBUTES: [wgpu::VertexAttribute; 1] = wgpu::vertex_attr_array![0 => Uint32]; + const ATTRIBUTES: [wgpu::VertexAttribute; 2] = wgpu::vertex_attr_array![ + 0 => Uint32, + 1 => Uint32, + ]; wgpu::VertexBufferLayout { array_stride: Self::STRIDE, step_mode: wgpu::InputStepMode::Vertex, diff --git a/voxygen/src/render/renderer/pipeline_creation.rs b/voxygen/src/render/renderer/pipeline_creation.rs index b7d8a00afe..e36d982b17 100644 --- a/voxygen/src/render/renderer/pipeline_creation.rs +++ b/voxygen/src/render/renderer/pipeline_creation.rs @@ -182,7 +182,8 @@ impl ShaderModules { "VOXYGEN_COMPUTATION_PREFERENCE_FRAGMENT", match pipeline_modes.fluid { FluidMode::Cheap => "FLUID_MODE_CHEAP", - FluidMode::Shiny => "FLUID_MODE_SHINY", + FluidMode::Medium => "FLUID_MODE_MEDIUM", + FluidMode::High => "FLUID_MODE_HIGH", }, match pipeline_modes.cloud { CloudMode::None => "CLOUD_MODE_NONE", @@ -299,7 +300,7 @@ impl ShaderModules { let selected_fluid_shader = ["fluid-frag.", match pipeline_modes.fluid { FluidMode::Cheap => "cheap", - FluidMode::Shiny => "shiny", + _ => "shiny", }] .concat(); diff --git a/voxygen/src/scene/terrain.rs b/voxygen/src/scene/terrain.rs index c26244ff26..cf23c3bc6a 100644 --- a/voxygen/src/scene/terrain.rs +++ b/voxygen/src/scene/terrain.rs @@ -224,12 +224,12 @@ impl assets::Asset for SpriteSpec { /// skip_remesh is either None (do the full remesh, including recomputing the /// light map), or Some((light_map, glow_map)). -fn mesh_worker + RectRasterableVol + ReadVol + Debug + 'static>( +fn mesh_worker( pos: Vec2, z_bounds: (f32, f32), skip_remesh: Option<(LightMapFn, LightMapFn)>, started_tick: u64, - volume: as SampleVol>>::Sample, + volume: as SampleVol>>::Sample, max_texture_size: u16, chunk: Arc, range: Aabb, @@ -274,11 +274,11 @@ fn mesh_worker + RectRasterableVol + ReadVol + Debug + ' prof_span!("extract sprite_instances"); let mut instances = [(); SPRITE_LOD_LEVELS].map(|()| Vec::new()); - for x in 0..V::RECT_SIZE.x as i32 { - for y in 0..V::RECT_SIZE.y as i32 { + for x in 0..TerrainChunk::RECT_SIZE.x as i32 { + for y in 0..TerrainChunk::RECT_SIZE.y as i32 { for z in z_bounds.0 as i32..z_bounds.1 as i32 + 1 { let rel_pos = Vec3::new(x, y, z); - let wpos = Vec3::from(pos * V::RECT_SIZE.map(|e: u32| e as i32)) + rel_pos; + let wpos = Vec3::from(pos * TerrainChunk::RECT_SIZE.map(|e: u32| e as i32)) + rel_pos; let block = if let Ok(block) = volume.get(wpos) { block