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,xy+z,x+yz,xyz,x+y+z,xy+z,x+yz,xyz,x+y+w,xy+w,x+yw,xyw,x+y+w,xy+w,x+yw,xyw,x+z+w,xz+w,x+zw,xzw,x+z+w,xz+w,x+zw,xzw,y+z+w,yz+w,y+zw,yzw,y+z+w,yz+w,y+zw,yzwx+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

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