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;