radiance: match reference colors (asymmetric pink sky, saturated orange base, translucent pink-rimmed shell); ambient curl-noise shimmer
This commit is contained in:
@ -93,7 +93,7 @@ P rest(uint idx) {
|
|||||||
float n = fbm(w + 1.6 * fbm(w * 0.8 + 3.1));
|
float n = fbm(w + 1.6 * fbm(w * 0.8 + 3.1));
|
||||||
n = clamp((n - 0.46) * 2.3 + 0.5, 0.0, 1.0);
|
n = clamp((n - 0.46) * 2.3 + 0.5, 0.0, 1.0);
|
||||||
float keep = smoothstep(0.05, 0.7, n) - o.r.y * 0.7;
|
float keep = smoothstep(0.05, 0.7, n) - o.r.y * 0.7;
|
||||||
o.spark = step(0.94, o.r.z);
|
o.spark = step(0.92, o.r.z);
|
||||||
o.n = n;
|
o.n = n;
|
||||||
if (keep < 0.0 && o.spark < 0.5) o.live = 0.0;
|
if (keep < 0.0 && o.spark < 0.5) o.live = 0.0;
|
||||||
vec3 p = rotX(rotY(d, t * 0.045 + 2.4 + uTilt.x), uTilt.y) * rad;
|
vec3 p = rotX(rotY(d, t * 0.045 + 2.4 + uTilt.x), uTilt.y) * rad;
|
||||||
@ -291,11 +291,18 @@ void main() {
|
|||||||
vec2 f = texture(uFlow, uv).xy; // texels per second
|
vec2 f = texture(uFlow, uv).xy; // texels per second
|
||||||
vec2 flow = vec2(f.x / uSim.x * uView.x, f.y / uSim.y * uView.y) / uR; // radii per second
|
vec2 flow = vec2(f.x / uSim.x * uView.x, f.y / uSim.y * uView.y) / uR; // radii per second
|
||||||
|
|
||||||
|
// ambient shimmer: a slow curl-noise wind keeps the particles streaming
|
||||||
|
vec3 np = vec3(p.xy * 2.4 + vec2(0.0, uTime * 0.05), uTime * 0.16);
|
||||||
|
float e = 0.03;
|
||||||
|
float nx = vnoise(np + vec3(e, 0.0, 0.0)) - vnoise(np - vec3(e, 0.0, 0.0));
|
||||||
|
float ny = vnoise(np + vec3(0.0, e, 0.0)) - vnoise(np - vec3(0.0, e, 0.0));
|
||||||
|
vec2 wind = vec2(ny, -nx) / (2.0 * e);
|
||||||
|
|
||||||
float light = p.kind; // corona sparks are lighter
|
float light = p.kind; // corona sparks are lighter
|
||||||
float k = (8.0 + 2.5 * light) * (0.65 + 0.7 * p.r.w); // spring back home
|
float k = (8.0 + 2.5 * light) * (0.65 + 0.7 * p.r.w); // spring back home
|
||||||
float c = 2.0 * sqrt(k) * 0.45; // under-damped: a little bounce on the way home
|
float c = 2.0 * sqrt(k) * 0.45; // under-damped: a little bounce on the way home
|
||||||
float follow = 9.0 + 6.0 * light; // how hard the flow drags it
|
float follow = 9.0 + 6.0 * light; // how hard the flow drags it
|
||||||
vec2 acc = -k * disp - c * vel + follow * (flow * uGain * (1.0 + 0.8 * light) - vel);
|
vec2 acc = -k * disp - c * vel + follow * (flow * uGain * (1.0 + 0.8 * light) - vel) + wind * (0.14 + 0.7 * light);
|
||||||
vel += acc * uDt;
|
vel += acc * uDt;
|
||||||
disp += vel * uDt;
|
disp += vel * uDt;
|
||||||
float m = length(disp);
|
float m = length(disp);
|
||||||
@ -334,10 +341,10 @@ void main() {
|
|||||||
float persp = 1.0;
|
float persp = 1.0;
|
||||||
|
|
||||||
if (p.kind < 0.5) {
|
if (p.kind < 0.5) {
|
||||||
vec3 warm = mix(vec3(0.90, 0.22, 0.17), vec3(0.99, 0.50, 0.30), p.r.w);
|
vec3 warm = mix(vec3(0.94, 0.27, 0.20), vec3(1.0, 0.52, 0.32), p.r.w);
|
||||||
warm = mix(warm, vec3(1.0, 0.72, 0.42), smoothstep(0.1, 0.45, 1.0 - p.n) * 0.8);
|
warm = mix(warm, vec3(1.0, 0.72, 0.42), smoothstep(0.1, 0.45, 1.0 - p.n) * 0.8);
|
||||||
col = vec4(mix(warm, vec3(1.0, 0.97, 0.84), p.spark), mix(0.85, 0.95, p.spark));
|
col = vec4(mix(warm, vec3(1.0, 0.97, 0.84), p.spark), mix(0.85, 0.95, p.spark));
|
||||||
size = mix(1.6 + p.r.y * 1.6 + p.n * 1.0, 3.2 + p.r.w * 2.6, p.spark);
|
size = mix(1.25 + p.r.y * 1.3 + p.n * 0.9, 2.6 + p.r.w * 2.4, p.spark);
|
||||||
float tw = 0.5 + 0.5 * sin(uTime * (1.2 + p.r.x * 2.5) + p.r.w * 40.0);
|
float tw = 0.5 + 0.5 * sin(uTime * (1.2 + p.r.x * 2.5) + p.r.w * 40.0);
|
||||||
col.a *= mix(1.0, tw, p.spark);
|
col.a *= mix(1.0, tw, p.spark);
|
||||||
vGlow = p.spark;
|
vGlow = p.spark;
|
||||||
@ -402,16 +409,16 @@ vec3 ramp(float y) {
|
|||||||
const vec3 c6 = vec3(0.933, 0.682, 0.541);
|
const vec3 c6 = vec3(0.933, 0.682, 0.541);
|
||||||
const vec3 c7 = vec3(0.933, 0.600, 0.447);
|
const vec3 c7 = vec3(0.933, 0.600, 0.447);
|
||||||
const vec3 c8 = vec3(0.922, 0.545, 0.388);
|
const vec3 c8 = vec3(0.922, 0.545, 0.388);
|
||||||
const vec3 c9 = vec3(0.937, 0.506, 0.361);
|
const vec3 c9 = vec3(0.937, 0.53, 0.385);
|
||||||
vec3 c = mix(c0, c1, smoothstep(0.00, 0.14, y));
|
vec3 c = mix(c0, c1, smoothstep(0.00, 0.14, y));
|
||||||
c = mix(c, c2, smoothstep(0.14, 0.30, y));
|
c = mix(c, c2, smoothstep(0.14, 0.30, y));
|
||||||
c = mix(c, c3, smoothstep(0.30, 0.52, y));
|
c = mix(c, c3, smoothstep(0.30, 0.52, y));
|
||||||
c = mix(c, c4, smoothstep(0.52, 0.62, y));
|
c = mix(c, c4, smoothstep(0.52, 0.62, y));
|
||||||
c = mix(c, c5, smoothstep(0.62, 0.70, y));
|
c = mix(c, c5, smoothstep(0.62, 0.70, y));
|
||||||
c = mix(c, c6, smoothstep(0.70, 0.79, y));
|
c = mix(c, c6, smoothstep(0.70, 0.82, y));
|
||||||
c = mix(c, c7, smoothstep(0.79, 0.87, y));
|
c = mix(c, c7, smoothstep(0.82, 0.90, y));
|
||||||
c = mix(c, c8, smoothstep(0.87, 0.94, y));
|
c = mix(c, c8, smoothstep(0.90, 0.96, y));
|
||||||
c = mix(c, c9, smoothstep(0.94, 1.00, y));
|
c = mix(c, c9, smoothstep(0.96, 1.00, y));
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -425,9 +432,11 @@ void main() {
|
|||||||
y += clamp(flow.y / uSim.y, -0.2, 0.2) * 0.12 - clamp(flow.x / uSim.x, -0.2, 0.2) * 0.04;
|
y += clamp(flow.y / uSim.y, -0.2, 0.2) * 0.12 - clamp(flow.x / uSim.x, -0.2, 0.2) * 0.04;
|
||||||
vec3 col = ramp(clamp(y, 0.0, 1.0));
|
vec3 col = ramp(clamp(y, 0.0, 1.0));
|
||||||
|
|
||||||
vec2 d = (uv - vec2(0.5, 0.6)) / vec2(1.15, 0.8);
|
float top = 1.0 - smoothstep(0.45, 0.9, 1.0 - uv.y); // fades out toward the orange bottom
|
||||||
float v = clamp((length(d) - 0.45) / 0.55, 0.0, 1.0) * 0.65;
|
float right = smoothstep(0.55, 1.0, uv.x) * (0.55 + 0.45 * smoothstep(0.0, 0.5, uv.y));
|
||||||
col = mix(col, vec3(0.984, 0.737, 0.651), v);
|
col = mix(col, vec3(0.984, 0.78, 0.67), clamp(right * 0.95, 0.0, 1.0) * top);
|
||||||
|
float left = (1.0 - smoothstep(0.0, 0.3, uv.x)) * smoothstep(0.3, 0.95, uv.y);
|
||||||
|
col = mix(col, vec3(0.97, 0.885, 0.80), left * 0.35 * top);
|
||||||
|
|
||||||
float wash = 0.4 * (1.0 - exp(-dye * 1.4));
|
float wash = 0.4 * (1.0 - exp(-dye * 1.4));
|
||||||
col = mix(col, vec3(0.98, 0.93, 0.89), wash);
|
col = mix(col, vec3(0.98, 0.93, 0.89), wash);
|
||||||
@ -459,16 +468,16 @@ void main() {
|
|||||||
vec3 n = vec3(d.x, -d.y, z);
|
vec3 n = vec3(d.x, -d.y, z);
|
||||||
|
|
||||||
// glassy body: lighter top-left, deeper orange bottom-right
|
// glassy body: lighter top-left, deeper orange bottom-right
|
||||||
vec3 top = vec3(0.992, 0.76, 0.52);
|
vec3 top = vec3(1.0, 0.77, 0.56);
|
||||||
vec3 bot = vec3(0.975, 0.55, 0.38);
|
vec3 bot = vec3(1.0, 0.56, 0.42);
|
||||||
float lit = clamp(0.5 + 0.5 * dot(normalize(n), normalize(vec3(-0.45, 0.6, 0.65))), 0.0, 1.0);
|
float lit = clamp(0.5 + 0.5 * dot(normalize(n), normalize(vec3(-0.45, 0.6, 0.65))), 0.0, 1.0);
|
||||||
vec3 body = mix(bot, top, lit);
|
vec3 body = mix(bot, top, lit);
|
||||||
|
|
||||||
// fresnel rim, pale pink-white
|
// fresnel rim, pale pink-white
|
||||||
float fres = pow(1.0 - z, 2.0);
|
float fres = pow(1.0 - z, 1.8);
|
||||||
vec3 rim = vec3(1.0, 0.89, 0.86);
|
vec3 rim = vec3(1.0, 0.85, 0.83);
|
||||||
vec3 col = mix(body, rim, clamp(fres * 1.15, 0.0, 1.0));
|
vec3 col = mix(body, rim, clamp(fres * 1.15, 0.0, 1.0));
|
||||||
float a = mix(0.7, 0.97, fres);
|
float a = mix(0.58, 0.97, fres);
|
||||||
|
|
||||||
// crisp bright edge line
|
// crisp bright edge line
|
||||||
float ring = smoothstep(0.955, 0.985, r) * (1.0 - smoothstep(0.985, 1.004, r));
|
float ring = smoothstep(0.955, 0.985, r) * (1.0 - smoothstep(0.985, 1.004, r));
|
||||||
|
|||||||
Reference in New Issue
Block a user