CURATED
セルラー・ブルーム
by GRAPHICA
PROMPT
呼吸する細胞のモザイク。境界線が光るステンドグラスのように、ゆっくり脈動する
- DATE
- 2026/6/11
- SOURCE
- CURATED
- MODEL
- —
- LIKES
- 28
VIEW SHADER CODE
vec2 hash22(vec2 p) {
p = vec2(dot(p, vec2(127.1, 311.7)), dot(p, vec2(269.5, 183.3)));
return fract(sin(p) * 43758.5453);
}
vec3 palette(float t) {
return vec3(0.42, 0.38, 0.42) + vec3(0.50, 0.42, 0.48) * cos(6.28318 * (vec3(0.9, 1.0, 1.1) * t + vec3(0.05, 0.35, 0.62)));
}
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
vec2 uv = (fragCoord * 2.0 - iResolution.xy) / iResolution.y;
float t = iTime * 0.42;
vec2 p = uv * 2.6;
vec2 ip = floor(p);
vec2 fp = fract(p);
float d1 = 8.0;
float d2 = 8.0;
vec2 cellId = vec2(0.0);
for (int y = -1; y <= 1; y++) {
for (int x = -1; x <= 1; x++) {
vec2 g = vec2(float(x), float(y));
vec2 o = hash22(ip + g);
o = 0.5 + 0.45 * sin(t + 6.2831 * o);
vec2 diff = g + o - fp;
float d = dot(diff, diff);
if (d < d1) {
d2 = d1;
d1 = d;
cellId = hash22(ip + g);
} else if (d < d2) {
d2 = d;
}
}
}
d1 = sqrt(d1);
d2 = sqrt(d2);
float edge = d2 - d1;
vec3 base = palette(cellId.x * 0.85 + t * 0.05) * (0.22 + 0.55 * (1.0 - d1));
float line = smoothstep(0.07, 0.0, edge);
float glow = smoothstep(0.32, 0.0, edge) * 0.35;
vec3 col = base + (line * 0.85 + glow) * vec3(0.82, 1.0, 0.72);
col *= 1.0 - 0.35 * dot(uv * 0.55, uv * 0.55);
fragColor = vec4(max(col, 0.0), 1.0);
}