Slide 17
Slide 17 text
コメント付きGLSL
17
vec3 p, q = vec3(-.1, .65, -.6); // qの初期値はカメラのオフセット値
for (float j, i, e, v, u; i++ < 130.; // iで130回レイマーチングのループ
o += .007 / exp(3e3 / (v * vec4(9, 5, 4, 4) // oは出力カラー // フラクタルのスケール倍率で色付け
+ e * 4e6 // 背景を白くするFog効果
))) {
// p = レイの先端座標 // q = pをオフセットするための変数 // vec3((FC.xy - .5 * r) / r.y, 1) = レイの方向, 1は焦点距離
p = q += vec3((FC.xy - .5 * r) / r.y, 1) * e;
for (j = e = v = 7.; j++ < 21.;
// eが距離関数
e = min // minはUnionのBoolean操作
(e,
max // maxはIntersectionのBoolean操作
(
// abs(p.xz)で4方向に複製 // Y軸の無限円柱の距離関数 0.2は半径
length(p.xz = abs(p.xz * rotate2D(j + sin(1. / u + t) / v)) - .53) - .02 / u,
p.y = 1.8 - p.y // 無限円柱の長さ制限のためにXZ平面でclip
) / v
)
)
// dot(p, p)は距離の2乗 // u: フラクタルのスケール倍率 // v: 現在のフラクタルのスケール倍率
v /= u = dot(p, p), p /= u + .01;