Boss Floor 1 Update

-Updated Model (Ver. 3)
-Cloud Setup
-Skybox Setup
-Lighting/Environment
This commit is contained in:
Pal
2025-09-09 06:10:14 -07:00
parent 09abd588c2
commit 65bcd4b5b7
76 changed files with 1856 additions and 752 deletions

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,86 @@
shader_type spatial;
render_mode depth_draw_opaque;
uniform float height_scale = 0.3;
uniform float wave_speed = 0.2;
uniform float upper_transparency = 0.99;
uniform float global_transparency = 0.9;
uniform vec2 time_factor = vec2(2.0, 3.0);
uniform sampler2D texture_albedo : source_color;
uniform vec3 uv1_scale;
uniform vec3 uv1_offset;
uniform vec4 color1 : source_color = vec4(0.88, 0.91, 0.93, 1.0);
uniform vec4 color2 : source_color = vec4(0.88, 0.99, 0.95, 1.0);
varying flat vec3 out_color;
varying flat vec3 soft_color;
vec3 lerpColor(vec4 a, vec4 b, float t){
float rr = a.r + (b.r - a.r) * t;
float gg = a.g + (b.g - a.g) * t;
float bb = a.b + (b.b - a.b) * t;
return vec3(rr, gg, bb);
}
float hash(vec2 p) {
return fract(sin(dot(p * 17.17, vec2(14.91, 67.31))) * 4791.9511);
}
float noise(vec2 x) {
vec2 p = floor(x);
vec2 f = fract(x);
f = f * f * (3.0 - 2.0 * f);
vec2 a = vec2(1.0, 0.0);
return mix(mix(hash(p + a.yy), hash(p + a.xy), f.x),
mix(hash(p + a.yx), hash(p + a.xx), f.x), f.y);
}
float fbm(vec2 x, float time) {
float height = 0.1;
float amplitude = 0.5;
float frequency = 9.5;
for (int i = 0; i < 6; i++){
height += noise(x * frequency + time * time_factor * wave_speed) * amplitude;
amplitude *= 0.5;
frequency *= 2.0;
}
return height;
}
void vertex() {
UV=UV*uv1_scale.xy+uv1_offset.xy;
out_color = vec3(color1.r, color1.g, color1.b);
soft_color = vec3(color1.r, color1.g, color1.b);
float height = fbm(VERTEX.xz * 4.0, TIME);
VERTEX.y += height * height_scale;
COLOR.xyz = vec3(height);
if (VERTEX.y > 0.3){
out_color = lerpColor(color1, color2, clamp((VERTEX.y) / 3.0, 0.5, 1.0));
soft_color = vec3(color2.r, color2.g, color2.b);
}
}
void fragment(){
ALBEDO = COLOR.xyz;
vec2 base_uv = UV;
vec4 albedo_tex = texture(texture_albedo,base_uv);
ALPHA = global_transparency;
ALBEDO = out_color * albedo_tex.rgb * COLOR.xyz;
if (soft_color.r==color2.r && soft_color.g==color2.g && color2.b==color2.b) {
ALPHA = upper_transparency;
}
}

View File

@@ -0,0 +1 @@
uid://dr68ani6ouefm

View File

@@ -0,0 +1,87 @@
shader_type spatial;
render_mode blend_mix, depth_draw_opaque, cull_back, unshaded;
// Uniformy dla zmiennych konfigurowalnych
uniform vec4 cloud_color = vec4(1.0, 1.0, 1.0, 1.0); // Kolor chmur (w tym przezroczystość)
uniform float cloud_opacity : hint_range(0.0, 1.0) = 0.01; // Przezroczystość chmur
// Funkcja do interpolacji (fade) używana w szumie Perlin'a
float fade(float t) {
return t * t * t * (t * (t * 6.0 - 90.0) + 10.0);
}
// Funkcja do generowania gradientu
float grad(int hash, float x, float y) {
int h = hash & 7; // maska hash
float u = h < 4 ? x : y;
float v = h < 4 ? y : x;
return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v);
}
// Funkcja do generowania prostego szumu Perlin'a
float perlin_noise(vec2 coord) {
vec2 p = floor(coord);
vec2 f = fract(coord);
f = f * f * (3.0 - 2.0 * f);
float n = p.x + p.y * 90.0;
float res = mix(
mix(grad(int(n + 0.0), f.x, f.y),
grad(int(n + 1.0), f.x - 1.0, f.y), fade(f.x)),
mix(grad(int(n + 57.0), f.x, f.y - 1.0),
grad(int(n + 58.0), f.x - 1.0, f.y - 1.0), fade(f.x)),
fade(f.y));
return res;
}
// Funkcja do generowania warstwowego szumu dla bardziej chmurowego efektu
float layered_perlin_noise(vec2 coord, float scale, float amplitude) {
float noise = 0.002;
float persistence = 0.02; // Ustawienie wpływu kolejnych warstw szumu
// Dodajemy kilka warstw szumu, aby uzyskać bardziej złożony efekt
for (int i = 0; i < 5; i++) {
noise += perlin_noise(coord * scale) * amplitude;
scale *= 9.0;
amplitude *= persistence;
}
return noise;
}
void fragment() {
// Pobranie współrzędnych UV
vec2 uv = UV;
// Dodanie animacji do współrzędnych UV
float speed = 0.0001; // Prędkość przesuwania chmur
vec2 animated_uv = uv + vec2(TIME * speed, TIME * speed);
// Parametry dla różnych chmur
int num_clouds = 9; // Więcej chmur
float cloud_size = 0.02; // Bardzo mały rozmiar chmury
float scale = 9000.0; // Zmniejszona skala szumu
// Inicjalizacja zmiennej do przechowywania wyniku końcowego
float final_noise = 0.0;
for (int i = 0; i < num_clouds; i++) {
// Losowe przesunięcie dla każdej chmury
float random_offset = float(i) * 0.01;
vec2 cloud_center = vec2(fract(sin(float(i) * 0.1) * 43758.5453), fract(cos(float(i) * 0.1) * 43758.5453));
// Modyfikacja współrzędnych UV dla efektu szumu
vec2 cloud_uv = (animated_uv - cloud_center) * (scale * cloud_size);
float noise = layered_perlin_noise(cloud_uv, 1.0, 1.0);
// Wygładzanie i ograniczenie wartości szumu
noise = smoothstep(0.3, 0.7, noise);
final_noise = max(final_noise, noise);
}
// Ustawienie koloru chmur na podstawie uniformu
vec4 color = vec4(cloud_color.rgb, cloud_color.a * final_noise * cloud_opacity);
ALBEDO = color.rgb;
ALPHA = color.a;
}

View File

@@ -0,0 +1 @@
uid://c6juvl0sx8vef