mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Made LoD water reflective
This commit is contained in:
parent
9f2e01617e
commit
49cabfae18
@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Aura system
|
- Aura system
|
||||||
- Campfire resting heal
|
- Campfire resting heal
|
||||||
- Initial support for game plugins, both server-side and client-side
|
- Initial support for game plugins, both server-side and client-side
|
||||||
|
- Reflective LoD water
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
|
@ -292,7 +292,7 @@ void main() {
|
|||||||
// reflected_light += point_light;
|
// reflected_light += point_light;
|
||||||
// vec3 surf_color = srgb_to_linear(vec3(0.2, 0.5, 1.0)) * light * diffuse_light * ambient_light;
|
// vec3 surf_color = srgb_to_linear(vec3(0.2, 0.5, 1.0)) * light * diffuse_light * ambient_light;
|
||||||
const float REFLECTANCE = 0.5;
|
const float REFLECTANCE = 0.5;
|
||||||
vec3 surf_color = illuminate(max_light, view_dir, water_color * emitted_light/* * log(1.0 - MU_WATER)*/, /*cam_attenuation * *//*water_color * */reflect_color * REFLECTANCE/** reflected_light*//* * log(1.0 - MU_WATER)*/);
|
vec3 surf_color = illuminate(max_light, view_dir, water_color * emitted_light/* * log(1.0 - MU_WATER)*/, /*cam_attenuation * *//*water_color * */reflect_color * REFLECTANCE + water_color * reflected_light/* * log(1.0 - MU_WATER)*/);
|
||||||
|
|
||||||
// passthrough = pow(passthrough, 1.0 / (1.0 + water_depth_to_camera));
|
// passthrough = pow(passthrough, 1.0 / (1.0 + water_depth_to_camera));
|
||||||
/* surf_color = cam_attenuation.g < 0.5 ?
|
/* surf_color = cam_attenuation.g < 0.5 ?
|
||||||
|
@ -31,7 +31,7 @@ vec4 cloud_at(vec3 pos, float dist, out vec3 emission) {
|
|||||||
#endif
|
#endif
|
||||||
mist_min_alt *= 250;
|
mist_min_alt *= 250;
|
||||||
const float MIST_FADE_HEIGHT = 500;
|
const float MIST_FADE_HEIGHT = 500;
|
||||||
float mist = 0.005 * pow(clamp(1.0 - (pos.z - mist_min_alt) / MIST_FADE_HEIGHT, 0.0, 1), 4.0) / (1.0 + pow(1.0 + dist / 20000.0, 2.0));
|
float mist = 0.00125 * pow(clamp(1.0 - (pos.z - mist_min_alt) / MIST_FADE_HEIGHT, 0.0, 1), 4.0) / (1.0 + pow(1.0 + dist / 20000.0, 2.0));
|
||||||
|
|
||||||
vec3 wind_pos = vec3(pos.xy + wind_offset, pos.z);
|
vec3 wind_pos = vec3(pos.xy + wind_offset, pos.z);
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ vec4 cloud_at(vec3 pos, float dist, out vec3 emission) {
|
|||||||
vec3 cloud_norm = vec3(
|
vec3 cloud_norm = vec3(
|
||||||
(cloud_tendency - cloud_tendency_x) * 4,
|
(cloud_tendency - cloud_tendency_x) * 4,
|
||||||
(cloud_tendency - cloud_tendency_y) * 4,
|
(cloud_tendency - cloud_tendency_y) * 4,
|
||||||
(pos.z - cloud_attr.x) / 250 + turb_noise + 0.25
|
(pos.z - cloud_attr.x) / 250 + turb_noise + 0.5
|
||||||
);
|
);
|
||||||
cloud_sun_access = mix(max(dot(-sun_dir.xyz, cloud_norm) + 0.0, 0.025), cloud_sun_access, 0.25);
|
cloud_sun_access = mix(max(dot(-sun_dir.xyz, cloud_norm) + 0.0, 0.025), cloud_sun_access, 0.25);
|
||||||
cloud_moon_access = mix(max(dot(-moon_dir.xyz, cloud_norm) + 0.35, 0.025), cloud_moon_access, 0.25);
|
cloud_moon_access = mix(max(dot(-moon_dir.xyz, cloud_norm) + 0.35, 0.025), cloud_moon_access, 0.25);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#define HAS_LOD_FULL_INFO
|
#define HAS_LOD_FULL_INFO
|
||||||
|
|
||||||
#include <globals.glsl>
|
#include <globals.glsl>
|
||||||
#include <sky.glsl>
|
#include <cloud.glsl>
|
||||||
#include <lod.glsl>
|
#include <lod.glsl>
|
||||||
|
|
||||||
in vec3 f_pos;
|
in vec3 f_pos;
|
||||||
@ -107,7 +107,7 @@ void main() {
|
|||||||
// mat4 invfoo = foo * inverse(foo * all_mat);
|
// mat4 invfoo = foo * inverse(foo * all_mat);
|
||||||
// vec3 old_coord = all_mat * vec4(f_pos.xyz, 1.0);
|
// vec3 old_coord = all_mat * vec4(f_pos.xyz, 1.0);
|
||||||
// vec4 new_f_pos = invfoo * (old_coord);//vec4(f_pos, 1.0);
|
// vec4 new_f_pos = invfoo * (old_coord);//vec4(f_pos, 1.0);
|
||||||
vec3 f_col = mix(lod_col(f_pos.xy), vec3(0), clamp(pull_down / 10, 0, 1));
|
vec3 f_col_raw = mix(lod_col(f_pos.xy), vec3(0), clamp(pull_down / 10, 0, 1));
|
||||||
// tgt_color = vec4(f_col, 1.0);
|
// tgt_color = vec4(f_col, 1.0);
|
||||||
// return;
|
// return;
|
||||||
// vec3 f_col = srgb_to_linear(vec3(1.0));
|
// vec3 f_col = srgb_to_linear(vec3(1.0));
|
||||||
@ -478,7 +478,7 @@ void main() {
|
|||||||
const float W_2 = W_INV * W_INV;//pow(W_INV, 2.4);
|
const float W_2 = W_INV * W_INV;//pow(W_INV, 2.4);
|
||||||
const float NOISE_FACTOR = 0.02;//pow(0.02, 1.2);
|
const float NOISE_FACTOR = 0.02;//pow(0.02, 1.2);
|
||||||
float noise = hash(vec4(floor(hash_pos * 3.0 - voxel_norm * 0.5), 0));//0.005/* - 0.01*/;
|
float noise = hash(vec4(floor(hash_pos * 3.0 - voxel_norm * 0.5), 0));//0.005/* - 0.01*/;
|
||||||
vec3 noise_delta = (sqrt(f_col) * W_INV + noise * NOISE_FACTOR);
|
vec3 noise_delta = (sqrt(f_col_raw) * W_INV + noise * NOISE_FACTOR);
|
||||||
// noise_delta = noise_delta * noise_delta * W_2 - f_col;
|
// noise_delta = noise_delta * noise_delta * W_2 - f_col;
|
||||||
// lum = W ⋅ col
|
// lum = W ⋅ col
|
||||||
// lum + noise = W ⋅ (col + delta)
|
// lum + noise = W ⋅ (col + delta)
|
||||||
@ -488,7 +488,7 @@ void main() {
|
|||||||
// vec3 col = (f_col + noise_delta);
|
// vec3 col = (f_col + noise_delta);
|
||||||
// vec3 col = noise_delta * noise_delta * W_2;
|
// vec3 col = noise_delta * noise_delta * W_2;
|
||||||
|
|
||||||
f_col = noise_delta * noise_delta * W_2;
|
vec3 f_col = noise_delta * noise_delta * W_2;
|
||||||
// f_col = /*srgb_to_linear*/(f_col + hash(vec4(floor(hash_pos * 3.0 - voxel_norm * 0.5), 0)) * 0.01/* - 0.01*/); // Small-scale noise
|
// f_col = /*srgb_to_linear*/(f_col + hash(vec4(floor(hash_pos * 3.0 - voxel_norm * 0.5), 0)) * 0.01/* - 0.01*/); // Small-scale noise
|
||||||
|
|
||||||
// f_ao = 1.0;
|
// f_ao = 1.0;
|
||||||
@ -638,7 +638,30 @@ void main() {
|
|||||||
// get_sun_diffuse(f_norm, time_of_day.x, light, diffuse_light, ambient_light, 1.0);
|
// get_sun_diffuse(f_norm, time_of_day.x, light, diffuse_light, ambient_light, 1.0);
|
||||||
// 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 = /*illuminate(emitted_light, reflected_light)*/illuminate(max_light, view_dir, f_col * emitted_light, f_col * reflected_light);
|
vec3 surf_color;
|
||||||
|
#if (FLUID_MODE == FLUID_MODE_SHINY)
|
||||||
|
if (f_col_raw.b > max(f_col_raw.r, f_col_raw.g) * 2.0 && dot(vec3(0, 0, 1), f_norm) > 0.9) {
|
||||||
|
vec3 water_color = (1.0 - MU_WATER) * MU_SCATTER;
|
||||||
|
|
||||||
|
vec3 reflect_ray = cam_to_frag * vec3(1, 1, -1);
|
||||||
|
|
||||||
|
float passthrough = dot(faceforward(f_norm, f_norm, cam_to_frag), -cam_to_frag);
|
||||||
|
|
||||||
|
vec3 reflect_color = get_sky_color(reflect_ray, time_of_day.x, f_pos, vec3(-100000), 0.125, true);
|
||||||
|
reflect_color = get_cloud_color(reflect_color, reflect_ray, cam_pos.xyz, time_of_day.x, 100000.0, 0.25);
|
||||||
|
|
||||||
|
const float REFLECTANCE = 0.5;
|
||||||
|
surf_color = illuminate(max_light, view_dir, f_col * emitted_light, reflect_color * REFLECTANCE + water_color * reflected_light);
|
||||||
|
|
||||||
|
const vec3 underwater_col = vec3(0.0);
|
||||||
|
float min_refl = min(emitted_light.r, min(emitted_light.g, emitted_light.b));
|
||||||
|
surf_color = mix(underwater_col, surf_color, (1.0 - passthrough) * 1.0 / (1.0 + min_refl));
|
||||||
|
} else {
|
||||||
|
surf_color = illuminate(max_light, view_dir, f_col * emitted_light, f_col * reflected_light);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
surf_color = illuminate(max_light, view_dir, f_col * emitted_light, f_col * reflected_light);
|
||||||
|
#endif
|
||||||
|
|
||||||
// float mist_factor = max(1 - (f_pos.z + (texture(t_noise, f_pos.xy * 0.0005 + time_of_day.x * 0.0003).x - 0.5) * 128.0) / 400.0, 0.0);
|
// float mist_factor = max(1 - (f_pos.z + (texture(t_noise, f_pos.xy * 0.0005 + time_of_day.x * 0.0003).x - 0.5) * 128.0) / 400.0, 0.0);
|
||||||
// //float mist_factor = f_norm.z * 2.0;
|
// //float mist_factor = f_norm.z * 2.0;
|
||||||
|
Loading…
Reference in New Issue
Block a user