Cloud Compute by Xor
https://gyazo.com/4b125b862838d75feae6dc50039c18b3
解読
code:glsl
// カメラ原点からレイ先端までの距離
float z;
for (float i = 0.0; i < 80.0; i++) {
// レイ先端位置を計算
vec3 p = z * normalize(FC.xyz * 2.0 - r.xxy);
// 時間に応じてスクロール
p.xz -= t;
// p.yを上空4mの位置に動かす
// p.y = 4.0 + p.y; とすると、画面上部にも平面が現れる
p.y = 4.0 - abs(p.y);
// dを0.7, 1.4, 2.8, ... と変化させながら、pに対してfbm的にdomain warpingを適用する
// dがデカくなればなるほど、周波数が細かく・影響度が小さくなる
for (float d = 0.7; d < 20.0; d *= 2.0) {
// ここのroundを取れば、滑らかな見た目となる
p += cos(round(p.yzx * d) - 0.2 * t) / d;
}
// abs(p.y)を用いて、レイ先端を進ませる
float d = 0.01 + abs(p.y) / 15.0;
z += d;
// 出力先oに対して、cosine gradientでカラーグレーディングしながらp.yに応じた値を加算する
// レイ距離zと平面までの近さdで影響度を整える
o += (cos(vec4(0, 1, 2, 0) - p.y * 2.0) + 1.1) / z / d;
}
// 割り算とtanhで最終的な見た目を調整
o = tanh(o / 7e2);