mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Experimental river velocity in shaders
This commit is contained in:
parent
8d8d9309b0
commit
3f2efea4f2
@ -73,7 +73,8 @@ hud-settings-upscale_factor = Internal Resolution
|
|||||||
hud-settings-cloud_rendering_mode = Cloud Rendering Mode
|
hud-settings-cloud_rendering_mode = Cloud Rendering Mode
|
||||||
hud-settings-fluid_rendering_mode = Fluid Rendering Mode
|
hud-settings-fluid_rendering_mode = Fluid Rendering Mode
|
||||||
hud-settings-fluid_rendering_mode-cheap = Cheap
|
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-minimal = Minimal
|
||||||
hud-settings-cloud_rendering_mode-low = Low
|
hud-settings-cloud_rendering_mode-low = Low
|
||||||
hud-settings-cloud_rendering_mode-medium = Medium
|
hud-settings-cloud_rendering_mode-medium = Medium
|
||||||
@ -93,7 +94,7 @@ hud-settings-resolution = Resolution
|
|||||||
hud-settings-bit_depth = Bit Depth
|
hud-settings-bit_depth = Bit Depth
|
||||||
hud-settings-refresh_rate = Refresh Rate
|
hud-settings-refresh_rate = Refresh Rate
|
||||||
hud-settings-lighting_rendering_mode = Lighting Rendering Mode
|
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-blinnphong = Type B - Medium
|
||||||
hud-settings-lighting_rendering_mode-lambertian = Type L - Cheap
|
hud-settings-lighting_rendering_mode-lambertian = Type L - Cheap
|
||||||
hud-settings-shadow_rendering_mode = Shadow Rendering Mode
|
hud-settings-shadow_rendering_mode = Shadow Rendering Mode
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -135,7 +135,7 @@ void main() {
|
|||||||
// float moon_light = get_moon_brightness(moon_dir);
|
// float moon_light = get_moon_brightness(moon_dir);
|
||||||
/* float sun_shade_frac = horizon_at(f_pos, sun_dir);
|
/* float sun_shade_frac = horizon_at(f_pos, sun_dir);
|
||||||
float moon_shade_frac = horizon_at(f_pos, moon_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);
|
float f_alt = alt_at(f_pos.xy);
|
||||||
#elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP)
|
#elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
float f_alt = f_pos.z;
|
float f_alt = f_pos.z;
|
||||||
@ -206,7 +206,7 @@ void main() {
|
|||||||
vec3 cam_attenuation = vec3(1);
|
vec3 cam_attenuation = vec3(1);
|
||||||
float fluid_alt = max(f_pos.z + 1, floor(f_alt + 1));
|
float fluid_alt = max(f_pos.z + 1, floor(f_alt + 1));
|
||||||
vec3 mu = medium.x == MEDIUM_WATER ? MU_WATER : vec3(0.0);
|
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 =
|
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)
|
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);
|
: compute_attenuation_point(f_pos, -view_dir, mu, fluid_alt, /*cam_pos.z <= fluid_alt ? cam_pos.xyz : f_pos*/cam_pos.xyz);
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
layout(location = 0) in vec3 f_pos;
|
layout(location = 0) in vec3 f_pos;
|
||||||
layout(location = 1) flat in uint f_pos_norm;
|
layout(location = 1) flat in uint f_pos_norm;
|
||||||
|
layout(location = 2) in vec2 f_vel;
|
||||||
// in vec3 f_col;
|
// in vec3 f_col;
|
||||||
// in float f_light;
|
// in float f_light;
|
||||||
// in vec3 light_pos[2];
|
// in vec3 light_pos[2];
|
||||||
@ -88,7 +89,7 @@ void main() {
|
|||||||
|
|
||||||
/* vec3 sun_dir = get_sun_dir(time_of_day.x);
|
/* vec3 sun_dir = get_sun_dir(time_of_day.x);
|
||||||
vec3 moon_dir = get_moon_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);
|
float f_alt = alt_at(f_pos.xy);
|
||||||
#elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP)
|
#elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
float f_alt = f_pos.z;
|
float f_alt = f_pos.z;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
layout(location = 0) in vec3 f_pos;
|
layout(location = 0) in vec3 f_pos;
|
||||||
layout(location = 1) flat in uint f_pos_norm;
|
layout(location = 1) flat in uint f_pos_norm;
|
||||||
|
layout(location = 2) in vec2 f_vel;
|
||||||
// in vec3 f_col;
|
// in vec3 f_col;
|
||||||
// in float f_light;
|
// in float f_light;
|
||||||
// in vec3 light_pos[2];
|
// 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
|
// Based on https://www.shadertoy.com/view/MdXyzX
|
||||||
float wave_height(vec3 pos){
|
float wave_height(vec2 pos){
|
||||||
pos *= 0.3;
|
|
||||||
float iter = 0.0;
|
float iter = 0.0;
|
||||||
float phase = 6.0;
|
float phase = 4.0;
|
||||||
float speed = 2.0;
|
float weight = 1.5;
|
||||||
float weight = 1.0;
|
|
||||||
float w = 0.0;
|
float w = 0.0;
|
||||||
float ws = 0.0;
|
float ws = 0.0;
|
||||||
const float drag_factor = 0.048;
|
const float speed_per_iter = 0.1;
|
||||||
for(int i = 0; i < 11; i ++){
|
#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 p = vec2(sin(iter), cos(iter));
|
||||||
vec2 res = wavedx(pos.xy, p, speed, phase, tick.x);
|
vec2 res = wavedx(pos, p, speed, phase, tick.x);
|
||||||
pos.xy += p * res.y * weight * drag_factor;
|
pos += p * res.y * weight * drag_factor;
|
||||||
w += res.x * weight;
|
w += res.x * weight * (1.0 + max(dot(p, -dir), 0.0));
|
||||||
iter += 10.0;
|
iter += iter_shift * 1.5;
|
||||||
ws += weight;
|
ws += weight;
|
||||||
weight = mix(weight, 0.0, 0.15);
|
weight = mix(weight, 0.0, 0.2);
|
||||||
phase *= 1.18;
|
phase *= 1.23;
|
||||||
speed *= 1.07;
|
speed += speed_per_iter;
|
||||||
}
|
}
|
||||||
return w / ws * 10.0;
|
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() {
|
void main() {
|
||||||
#ifdef EXPERIMENTAL_BAREMINIMUM
|
#ifdef EXPERIMENTAL_BAREMINIMUM
|
||||||
tgt_color = vec4(simple_lighting(f_pos.xyz, MU_SCATTER, 1.0), 0.5);
|
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 c_norm = cross(f_norm, b_norm);
|
||||||
|
|
||||||
vec3 wave_pos = mod(f_pos + focus_off.xyz, vec3(3000.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.025;
|
float wave_sample_dist = 0.1;
|
||||||
float wave00 = wave_height(wave_pos);
|
float wave00 = wave_height2(wave_pos.xy);
|
||||||
float wave10 = wave_height(wave_pos + vec3(wave_sample_dist, 0, 0));
|
float wave10 = wave_height2(wave_pos.xy + vec2(wave_sample_dist, 0));
|
||||||
float wave01 = wave_height(wave_pos + vec3(0, wave_sample_dist, 0));
|
float wave01 = wave_height2(wave_pos.xy + vec2(0, wave_sample_dist));
|
||||||
|
|
||||||
// Possibility of div by zero when slope = 0,
|
// Possibility of div by zero when slope = 0,
|
||||||
// however this only results in no water surface appearing
|
// however this only results in no water surface appearing
|
||||||
@ -175,7 +213,7 @@ void main() {
|
|||||||
//norm = f_norm;
|
//norm = f_norm;
|
||||||
|
|
||||||
vec3 water_color = (1.0 - MU_WATER) * MU_SCATTER;
|
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);
|
float f_alt = alt_at(f_pos.xy);
|
||||||
#elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP)
|
#elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
float f_alt = f_pos.z;
|
float f_alt = f_pos.z;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -21,6 +21,7 @@
|
|||||||
#include <random.glsl>
|
#include <random.glsl>
|
||||||
|
|
||||||
layout(location = 0) in uint v_pos_norm;
|
layout(location = 0) in uint v_pos_norm;
|
||||||
|
layout(location = 1) in uint v_vel;
|
||||||
// in uint v_col_light;
|
// in uint v_col_light;
|
||||||
|
|
||||||
layout(std140, set = 2, binding = 0)
|
layout(std140, set = 2, binding = 0)
|
||||||
@ -42,6 +43,7 @@ uniform u_locals {
|
|||||||
|
|
||||||
layout(location = 0) out vec3 f_pos;
|
layout(location = 0) out vec3 f_pos;
|
||||||
layout(location = 1) flat out uint f_pos_norm;
|
layout(location = 1) flat out uint f_pos_norm;
|
||||||
|
layout(location = 2) out vec2 f_vel;
|
||||||
// out vec3 f_col;
|
// out vec3 f_col;
|
||||||
// out float f_light;
|
// out float f_light;
|
||||||
// out vec3 light_pos[2];
|
// out vec3 light_pos[2];
|
||||||
@ -50,6 +52,10 @@ const float EXTRA_NEG_Z = 65536.0/*65536.1*/;
|
|||||||
|
|
||||||
void main() {
|
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_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 -= 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));
|
// 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.xy += 0.01; // Avoid z-fighting
|
||||||
// f_pos.x += 0.1 * sin(tick.x / 60 * hash(vec4(f_pos.xyz, 1.0)));
|
// 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)));
|
// 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;
|
// 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
|
#endif
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
#define VOXYGEN_COMPUTATION_PREFERENCE_VERTEX 1
|
#define VOXYGEN_COMPUTATION_PREFERENCE_VERTEX 1
|
||||||
|
|
||||||
#define FLUID_MODE_CHEAP 0
|
#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_NONE 0
|
||||||
#define CLOUD_MODE_MINIMAL 1
|
#define CLOUD_MODE_MINIMAL 1
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ void main() {
|
|||||||
vec3 cam_to_frag = normalize(f_pos - cam_pos.xyz);
|
vec3 cam_to_frag = normalize(f_pos - cam_pos.xyz);
|
||||||
vec3 view_dir = -cam_to_frag;
|
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);
|
float f_alt = alt_at(f_pos.xy);
|
||||||
#elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP)
|
#elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
float f_alt = f_pos.z;
|
float f_alt = f_pos.z;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -445,7 +445,7 @@ void main() {
|
|||||||
vec3 moon_dir = get_moon_dir(time_of_day.x); */
|
vec3 moon_dir = get_moon_dir(time_of_day.x); */
|
||||||
// voxel_norm = vec3(0.0);
|
// 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;*/alt_at(f_pos.xy);//max(alt_at(f_pos.xy), f_pos.z);
|
||||||
// float shadow_alt = f_pos.z;
|
// float shadow_alt = f_pos.z;
|
||||||
#elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP)
|
#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);
|
// 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
|
// 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;
|
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) {
|
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;
|
vec3 water_color = (1.0 - MU_WATER) * MU_SCATTER;
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ void main() {
|
|||||||
vec3 cam_to_frag = normalize(f_pos - cam_pos.xyz);
|
vec3 cam_to_frag = normalize(f_pos - cam_pos.xyz);
|
||||||
vec3 view_dir = -cam_to_frag;
|
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);
|
float f_alt = alt_at(f_pos.xy);
|
||||||
#elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP)
|
#elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
float f_alt = f_pos.z;
|
float f_alt = f_pos.z;
|
||||||
@ -88,7 +88,7 @@ void main() {
|
|||||||
vec3 cam_attenuation = vec3(1);
|
vec3 cam_attenuation = vec3(1);
|
||||||
float fluid_alt = max(f_pos.z + 1, floor(f_alt + 1));
|
float fluid_alt = max(f_pos.z + 1, floor(f_alt + 1));
|
||||||
vec3 mu = medium.x == MEDIUM_WATER ? MU_WATER : vec3(0.0);
|
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 =
|
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)
|
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);
|
: compute_attenuation_point(f_pos, -view_dir, vec3(0), fluid_alt, /*cam_pos.z <= fluid_alt ? cam_pos.xyz : f_pos*/cam_pos.xyz);
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ void main() {
|
|||||||
vec3 cam_to_frag = normalize(f_pos - cam_pos.xyz);
|
vec3 cam_to_frag = normalize(f_pos - cam_pos.xyz);
|
||||||
vec3 view_dir = -cam_to_frag;
|
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);
|
float f_alt = alt_at(f_pos.xy);
|
||||||
#elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP)
|
#elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
float f_alt = f_pos.z;
|
float f_alt = f_pos.z;
|
||||||
@ -94,7 +94,7 @@ void main() {
|
|||||||
vec3 cam_attenuation = vec3(1);
|
vec3 cam_attenuation = vec3(1);
|
||||||
float fluid_alt = max(f_pos.z + 1, floor(f_alt + 1));
|
float fluid_alt = max(f_pos.z + 1, floor(f_alt + 1));
|
||||||
vec3 mu = medium.x == MEDIUM_WATER ? MU_WATER : vec3(0.0);
|
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 =
|
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)
|
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);
|
: compute_attenuation_point(f_pos, -view_dir, mu, fluid_alt, /*cam_pos.z <= fluid_alt ? cam_pos.xyz : f_pos*/cam_pos.xyz);
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -209,7 +209,7 @@ void main() {
|
|||||||
/* vec3 sun_dir = get_sun_dir(time_of_day.x);
|
/* vec3 sun_dir = get_sun_dir(time_of_day.x);
|
||||||
vec3 moon_dir = get_moon_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);
|
float f_alt = alt_at(f_pos.xy);
|
||||||
#elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP)
|
#elif (SHADOW_MODE == SHADOW_MODE_NONE || FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
float f_alt = f_pos.z;
|
float f_alt = f_pos.z;
|
||||||
@ -396,7 +396,7 @@ void main() {
|
|||||||
reflected_light *= 0.4 + f_ao * 0.6;
|
reflected_light *= 0.4 + f_ao * 0.6;
|
||||||
|
|
||||||
#ifndef EXPERIMENTAL_NOCAUSTICS
|
#ifndef EXPERIMENTAL_NOCAUSTICS
|
||||||
#if (FLUID_MODE == FLUID_MODE_SHINY)
|
#if (FLUID_MODE >= FLUID_MODE_MEDIUM)
|
||||||
if (faces_fluid) {
|
if (faces_fluid) {
|
||||||
vec3 wpos = f_pos + vec3(focus_off.xy, 0);
|
vec3 wpos = f_pos + vec3(focus_off.xy, 0);
|
||||||
vec3 spos = (wpos + (fluid_alt - wpos.z) * vec3(sun_dir.xy, 0)) * 0.25;
|
vec3 spos = (wpos + (fluid_alt - wpos.z) * vec3(sun_dir.xy, 0)) * 0.25;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
#if (FLUID_MODE == FLUID_MODE_CHEAP)
|
||||||
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE
|
#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
|
#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1038,12 +1038,14 @@ impl<'a> Widget for Video<'a> {
|
|||||||
.color(TEXT_COLOR)
|
.color(TEXT_COLOR)
|
||||||
.set(state.ids.fluid_mode_text, ui);
|
.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 = [
|
let mode_label_list = [
|
||||||
self.localized_strings
|
self.localized_strings
|
||||||
.get_msg("hud-settings-fluid_rendering_mode-cheap"),
|
.get_msg("hud-settings-fluid_rendering_mode-cheap"),
|
||||||
self.localized_strings
|
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
|
// Get which fluid rendering mode is currently active
|
||||||
|
@ -9,7 +9,7 @@ use crate::{
|
|||||||
scene::terrain::BlocksOfInterest,
|
scene::terrain::BlocksOfInterest,
|
||||||
};
|
};
|
||||||
use common::{
|
use common::{
|
||||||
terrain::Block,
|
terrain::{Block, TerrainChunk},
|
||||||
util::either_with,
|
util::either_with,
|
||||||
vol::{ReadVol, RectRasterableVol},
|
vol::{ReadVol, RectRasterableVol},
|
||||||
volumes::vol_grid_2d::{CachedVolGrid2d, VolGrid2d},
|
volumes::vol_grid_2d::{CachedVolGrid2d, VolGrid2d},
|
||||||
@ -226,8 +226,8 @@ fn calc_light<V: RectRasterableVol<Vox = Block> + ReadVol + Debug>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[allow(clippy::type_complexity)]
|
#[allow(clippy::type_complexity)]
|
||||||
pub fn generate_mesh<'a, V: RectRasterableVol<Vox = Block> + ReadVol + Debug + 'static>(
|
pub fn generate_mesh<'a>(
|
||||||
vol: &'a VolGrid2d<V>,
|
vol: &'a VolGrid2d<TerrainChunk>,
|
||||||
(range, max_texture_size, _boi): (Aabb<i32>, Vec2<u16>, &'a BlocksOfInterest),
|
(range, max_texture_size, _boi): (Aabb<i32>, Vec2<u16>, &'a BlocksOfInterest),
|
||||||
) -> MeshGen<
|
) -> MeshGen<
|
||||||
TerrainVertex,
|
TerrainVertex,
|
||||||
@ -390,7 +390,20 @@ pub fn generate_mesh<'a, V: RectRasterableVol<Vox = Block> + ReadVol + Debug + '
|
|||||||
let mesh_delta = Vec3::new(0.0, 0.0, (z_start + range.min.z) as f32);
|
let mesh_delta = Vec3::new(0.0, 0.0, (z_start + range.min.z) as f32);
|
||||||
let create_opaque =
|
let create_opaque =
|
||||||
|atlas_pos, pos, norm, meta| TerrainVertex::new(atlas_pos, pos + mesh_delta, norm, meta);
|
|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<f32>, 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 =
|
let mut greedy =
|
||||||
GreedyMesh::<guillotiere::SimpleAtlasAllocator>::new(max_size, greedy::general_config());
|
GreedyMesh::<guillotiere::SimpleAtlasAllocator>::new(max_size, greedy::general_config());
|
||||||
|
@ -155,6 +155,7 @@ pub enum FluidMode {
|
|||||||
/// diffraction, and no light attenuation through water. As a result,
|
/// diffraction, and no light attenuation through water. As a result,
|
||||||
/// it can be much cheaper than shiny reflection.
|
/// it can be much cheaper than shiny reflection.
|
||||||
Cheap,
|
Cheap,
|
||||||
|
High,
|
||||||
/// "Shiny" water. This water implements waves on the surfaces, some
|
/// "Shiny" water. This water implements waves on the surfaces, some
|
||||||
/// attempt at reflections, and tries to compute accurate light
|
/// attempt at reflections, and tries to compute accurate light
|
||||||
/// attenuation through water (this is what results in the
|
/// 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
|
/// which causes attenuation to be computed incorrectly; this can be
|
||||||
/// addressed by using shadow maps (at least for terrain).
|
/// addressed by using shadow maps (at least for terrain).
|
||||||
#[serde(other)]
|
#[serde(other)]
|
||||||
Shiny,
|
Medium,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for FluidMode {
|
impl Default for FluidMode {
|
||||||
fn default() -> Self { FluidMode::Shiny }
|
fn default() -> Self { FluidMode::Medium }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Lighting modes
|
/// Lighting modes
|
||||||
|
@ -7,10 +7,11 @@ use vek::*;
|
|||||||
#[derive(Copy, Clone, Debug, Zeroable, Pod)]
|
#[derive(Copy, Clone, Debug, Zeroable, Pod)]
|
||||||
pub struct Vertex {
|
pub struct Vertex {
|
||||||
pos_norm: u32,
|
pos_norm: u32,
|
||||||
|
vel: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Vertex {
|
impl Vertex {
|
||||||
pub fn new(pos: Vec3<f32>, norm: Vec3<f32>) -> Self {
|
pub fn new(pos: Vec3<f32>, norm: Vec3<f32>, river_velocity: Vec2<f32>) -> Self {
|
||||||
let (norm_axis, norm_dir) = norm
|
let (norm_axis, norm_dir) = norm
|
||||||
.as_slice()
|
.as_slice()
|
||||||
.iter()
|
.iter()
|
||||||
@ -27,11 +28,17 @@ impl Vertex {
|
|||||||
| ((pos.y as u32) & 0x003F) << 6
|
| ((pos.y as u32) & 0x003F) << 6
|
||||||
| (((pos.z + EXTRA_NEG_Z).max(0.0).min((1 << 17) as f32) as u32) & 0x1FFFF) << 12
|
| (((pos.z + EXTRA_NEG_Z).max(0.0).min((1 << 17) as f32) as u32) & 0x1FFFF) << 12
|
||||||
| (norm_bits & 0x7) << 29,
|
| (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> {
|
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 {
|
wgpu::VertexBufferLayout {
|
||||||
array_stride: Self::STRIDE,
|
array_stride: Self::STRIDE,
|
||||||
step_mode: wgpu::InputStepMode::Vertex,
|
step_mode: wgpu::InputStepMode::Vertex,
|
||||||
|
@ -182,7 +182,8 @@ impl ShaderModules {
|
|||||||
"VOXYGEN_COMPUTATION_PREFERENCE_FRAGMENT",
|
"VOXYGEN_COMPUTATION_PREFERENCE_FRAGMENT",
|
||||||
match pipeline_modes.fluid {
|
match pipeline_modes.fluid {
|
||||||
FluidMode::Cheap => "FLUID_MODE_CHEAP",
|
FluidMode::Cheap => "FLUID_MODE_CHEAP",
|
||||||
FluidMode::Shiny => "FLUID_MODE_SHINY",
|
FluidMode::Medium => "FLUID_MODE_MEDIUM",
|
||||||
|
FluidMode::High => "FLUID_MODE_HIGH",
|
||||||
},
|
},
|
||||||
match pipeline_modes.cloud {
|
match pipeline_modes.cloud {
|
||||||
CloudMode::None => "CLOUD_MODE_NONE",
|
CloudMode::None => "CLOUD_MODE_NONE",
|
||||||
@ -299,7 +300,7 @@ impl ShaderModules {
|
|||||||
|
|
||||||
let selected_fluid_shader = ["fluid-frag.", match pipeline_modes.fluid {
|
let selected_fluid_shader = ["fluid-frag.", match pipeline_modes.fluid {
|
||||||
FluidMode::Cheap => "cheap",
|
FluidMode::Cheap => "cheap",
|
||||||
FluidMode::Shiny => "shiny",
|
_ => "shiny",
|
||||||
}]
|
}]
|
||||||
.concat();
|
.concat();
|
||||||
|
|
||||||
|
@ -224,12 +224,12 @@ impl assets::Asset for SpriteSpec {
|
|||||||
|
|
||||||
/// skip_remesh is either None (do the full remesh, including recomputing the
|
/// skip_remesh is either None (do the full remesh, including recomputing the
|
||||||
/// light map), or Some((light_map, glow_map)).
|
/// light map), or Some((light_map, glow_map)).
|
||||||
fn mesh_worker<V: BaseVol<Vox = Block> + RectRasterableVol + ReadVol + Debug + 'static>(
|
fn mesh_worker(
|
||||||
pos: Vec2<i32>,
|
pos: Vec2<i32>,
|
||||||
z_bounds: (f32, f32),
|
z_bounds: (f32, f32),
|
||||||
skip_remesh: Option<(LightMapFn, LightMapFn)>,
|
skip_remesh: Option<(LightMapFn, LightMapFn)>,
|
||||||
started_tick: u64,
|
started_tick: u64,
|
||||||
volume: <VolGrid2d<V> as SampleVol<Aabr<i32>>>::Sample,
|
volume: <VolGrid2d<TerrainChunk> as SampleVol<Aabr<i32>>>::Sample,
|
||||||
max_texture_size: u16,
|
max_texture_size: u16,
|
||||||
chunk: Arc<TerrainChunk>,
|
chunk: Arc<TerrainChunk>,
|
||||||
range: Aabb<i32>,
|
range: Aabb<i32>,
|
||||||
@ -274,11 +274,11 @@ fn mesh_worker<V: BaseVol<Vox = Block> + RectRasterableVol + ReadVol + Debug + '
|
|||||||
prof_span!("extract sprite_instances");
|
prof_span!("extract sprite_instances");
|
||||||
let mut instances = [(); SPRITE_LOD_LEVELS].map(|()| Vec::new());
|
let mut instances = [(); SPRITE_LOD_LEVELS].map(|()| Vec::new());
|
||||||
|
|
||||||
for x in 0..V::RECT_SIZE.x as i32 {
|
for x in 0..TerrainChunk::RECT_SIZE.x as i32 {
|
||||||
for y in 0..V::RECT_SIZE.y 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 {
|
for z in z_bounds.0 as i32..z_bounds.1 as i32 + 1 {
|
||||||
let rel_pos = Vec3::new(x, y, z);
|
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) {
|
let block = if let Ok(block) = volume.get(wpos) {
|
||||||
block
|
block
|
||||||
|
Loading…
Reference in New Issue
Block a user