Skip to main content

問題 4.1

3変数の時は、原点中心で (±1,±1,±1)(\pm{1}, \pm{1}, \pm{1}) らを頂点に持つ3次元立方体をとり、その中心から各辺の中点へのベクトルを勾配として取っていた。 4変数についても同様に、原点中心で (±1,±1,±1,±1)(\pm{1}, \pm{1}, \pm{1}, \pm{1}) らを頂点に持つ4次元立方体をとり、その中心から各辺の中点へのベクトルを勾配として定義してみる。

さて、4次元立方体の辺の総数は32個であるので、各辺の中点も下記の通り32個存在する。

(1,1,1,0),(1,−1,1,0),(1,1,−1,0),(1,−1,−1,0),(−1,1,1,0),(−1,−1,1,0),(−1,1,−1,0),(−1,−1,−1,0),(1,1,0,1),(1,−1,0,1),(1,1,0,−1),(1,−1,0,−1),(−1,1,0,1),(−1,−1,0,1),(−1,1,0,−1),(−1,−1,0,−1),(1,0,1,1),(1,0,−1,1),(1,0,1,−1),(1,0,−1,−1),(−1,0,1,1),(−1,0,−1,1),(−1,0,1,−1),(−1,0,−1,−1),(0,1,1,1),(0,1,−1,1),(0,1,1,−1),(0,1,−1,−1),(0,−1,1,1),(0,−1,−1,1),(0,−1,1,−1),(0,−1,−1,−1),(1,1,1,0),(1,-1,1,0),(1,1,-1,0),(1,-1,-1,0),\\ (-1,1,1,0),(-1,-1,1,0),(-1,1,-1,0),(-1,-1,-1,0),\\ (1,1,0,1),(1,-1,0,1),(1,1,0,-1),(1,-1,0,-1),\\ (-1,1,0,1),(-1,-1,0,1),(-1,1,0,-1),(-1,-1,0,-1),\\ (1,0,1,1),(1,0,-1,1),(1,0,1,-1),(1,0,-1,-1),\\ (-1,0,1,1),(-1,0,-1,1),(-1,0,1,-1),(-1,0,-1,-1),\\ (0,1,1,1),(0,1,-1,1),(0,1,1,-1),(0,1,-1,-1),\\ (0,-1,1,1),(0,-1,-1,1),(0,-1,1,-1),(0,-1,-1,-1),

これらと4次元ベクトル (x,y,z,w)(x,y,z,w) との内積の値は

x+y+z,x−y+z,x+y−z,x−y−z,−x+y+z,−x−y+z,−x+y−z,−x−y−z,x+y+w,x−y+w,x+y−w,x−y−w,−x+y+w,−x−y+w,−x+y−w,−x−y−w,x+z+w,x−z+w,x+z−w,x−z−w,−x+z+w,−x−z+w,−x+z−w,−x−z−w,y+z+w,y−z+w,y+z−w,y−z−w,−y+z+w,−y−z+w,−y+z−w,−y−z−wx+y+z, x-y+z, x+y-z, x-y-z, \\ -x+y+z, -x-y+z, -x+y-z, -x-y-z, \\ x+y+w, x-y+w, x+y-w, x-y-w, \\ -x+y+w, -x-y+w, -x+y-w, -x-y-w, \\ x+z+w, x-z+w, x+z-w, x-z-w, \\ -x+z+w, -x-z+w, -x+z-w, -x-z-w, \\ y+z+w, y-z+w, y+z-w, y-z-w, \\ -y+z+w, -y-z+w, -y+z-w, -y-z-w

の32通りとなる。ハッシュ値をこの32通りの計算に対応させて4変数パーリンノイズを実現させる。

以下、まだ4変数を同時に確認できるコードが書けないため、4つのうちの1つを固定し(x座標, y座標, 経過時間)の3変数でノイズの様子を視覚化した結果である。

(x座標, 0, y座標, 経過時間)(0, x座標, y座標, 経過時間)(x座標, y座標, 経過時間, 0)(x座標, y座標, 0, 経過時間)\begin{matrix} \text{(x座標, 0, y座標, 経過時間)} & \text{(0, x座標, y座標, 経過時間)} \\ \text{(x座標, y座標, 経過時間, 0)} & \text{(x座標, y座標, 0, 経過時間)} \end{matrix}
exercise_4_1.frag

出力を観察してみると、右上以外では、縦横方向に筋の様なアーティファクトが生じている気がする。勾配の取り方が良くなかったのだろうか?