ランダムドットステレオグラムアプリ - その10 [ランダムドットステレオグラムアプリ]
昨日の続き。今日一日ぼー、っとしてたせいもあっていいことを思いついた。ただぼー、っとするということはいいことだ。
連続ではない離散的なFourier変換を繰り返すと両端は繋がる。例えば離散的2次元Fourier変換の結果はトーラスになる。これはいい特徴だ。つまり連続なテクスチャの継ぎ目がなくなって見た目の連続感が強調される。それを利用するいいアイデアを思いついた。それについて書く。
Speckleシミュレータによる2次元ランダムパターンは
最後の特徴は右端と左端、上端と下端がつながっていてタイリングに向いている、ということ。これを使えば式-57にしたがって変形して配置することで、タイルの境目がなくなる。
迷路生成ではポテンシャルだったのでスカラ値だった。グレーのテクスチャならこのまま使えるし、カラーでもRGB3成分を持ったベクトルとして生成すればいい。これは実装も迷路生成のときのをそのまま流用できる。
これを避けるためには、もとのテクスチャのほうをH(p)にしたがって変形して無理やりつながるようにするばいい。
つまり、式-52ではバカ正直に基準となる中央部分にテクスチャをそのまま配置している。しかし、テクスチャの相対的な位置はエレベーションマップとは無関係なので、こうしなければならない必然性はない。そこで としてみる。ここでpcはH(p)の中央の位置、すなわちD(p)の横方向原点の位置である。式で書くとごちゃごちゃしてなんだか煩わしいけど、ようするにテクスチャを左右からαH(p)の半分だけ圧縮して狭める。そしてあまった領域を埋めるようにテクスチャを繰り返しておく。こうすると、(pT−1)と(pT)のところは となる。これでは全然わからないけど、式-58はテクスチャタイルの右側の端になっていて、これがあと1ピクセル増えるとしてD(pT)を考えると、式-59に一致する。つまりもとのテクスチャをとってくるそのやり方は連続している、ということがいえる。つまり、式-57として中央のテクスチャタイルを配置すると、テクスチャをFFTで生成することで境目の目立たないステレオグラムにすることができる。これは今日思いついたアイデア。なかなかやるじゃん。
そこで生成後、最小値が0で最大値が1になるようにすべての画素で同じ線形変換を行う。これで絵としてのコントラストを最大化できる。カラーの場合にもRGBそれぞれについて同じことをすればいい。
それでもFourier変換を使ってなめらかにした絵はどこものっぺりしてメリハリはない。コントラストは最大でもやっぱりどことなく眠い、と言う感じは否めない。今日は他に、メリハリを付けるための簡単なアイデアも思いついた。それは実装のところで具体的に書こう。実際に描画しないと効果があるかどうかわからないし。
連続ではない離散的なFourier変換を繰り返すと両端は繋がる。例えば離散的2次元Fourier変換の結果はトーラスになる。これはいい特徴だ。つまり連続なテクスチャの継ぎ目がなくなって見た目の連続感が強調される。それを利用するいいアイデアを思いついた。それについて書く。
1.5 テクスチャの作り方
ランダムドットステレオグラムに使うテクスチャはなんでもいいので、そこに工夫を凝らしたきれいな絵がWebにはたくさんみつかる。 僕は僕らしいやりかたでテクスチャを作ってみよう。1.5.1 2次元ランダムパターン
2次元ランダムパターンといえば、もうFourier変換である、僕にとって。以前作った曲線迷路でパターンの元になるポテンシャルをSpeckleのシミュレータを使って作った。これをそのまま流用しよう。Speckleシミュレータによる2次元ランダムパターンは
- 滑らか
- ランダムさが一様で等方的
- 典型的な粒子サイズが簡単に制御できる
- FFTが使うと計算が速い
- 境界がない
最後の特徴は右端と左端、上端と下端がつながっていてタイリングに向いている、ということ。これを使えば式-57にしたがって変形して配置することで、タイルの境目がなくなる。
迷路生成ではポテンシャルだったのでスカラ値だった。グレーのテクスチャならこのまま使えるし、カラーでもRGB3成分を持ったベクトルとして生成すればいい。これは実装も迷路生成のときのをそのまま流用できる。
1.4.6 テクスチャのトーラス特性を維持する
上で書いたようにFourier変換でテクスチャを作ると右端と左端、上端と下端は滑らかにつながって見える。これはテクスチャが繰り返されていることが気が付きにくくなるので有益な特性であるが、式-53などでS(p)を作ると、(pT−1)と(pT)のところでジャンプが起こってしまい、せっかくの滑らかな特性が生かされない、ということになってしまう。これを避けるためには、もとのテクスチャのほうをH(p)にしたがって変形して無理やりつながるようにするばいい。
つまり、式-52ではバカ正直に基準となる中央部分にテクスチャをそのまま配置している。しかし、テクスチャの相対的な位置はエレベーションマップとは無関係なので、こうしなければならない必然性はない。そこで としてみる。ここでpcはH(p)の中央の位置、すなわちD(p)の横方向原点の位置である。式で書くとごちゃごちゃしてなんだか煩わしいけど、ようするにテクスチャを左右からαH(p)の半分だけ圧縮して狭める。そしてあまった領域を埋めるようにテクスチャを繰り返しておく。こうすると、(pT−1)と(pT)のところは となる。これでは全然わからないけど、式-58はテクスチャタイルの右側の端になっていて、これがあと1ピクセル増えるとしてD(pT)を考えると、式-59に一致する。つまりもとのテクスチャをとってくるそのやり方は連続している、ということがいえる。つまり、式-57として中央のテクスチャタイルを配置すると、テクスチャをFFTで生成することで境目の目立たないステレオグラムにすることができる。これは今日思いついたアイデア。なかなかやるじゃん。
1.5.2 コントラストの最大化
FFTを使って生成したランダムパターンは、必ずしもその値が[0,1]区間いっぱいになるわけではない。狭い範囲にしか生成できなかったとき、いわゆる眠い絵になってしまう。そこで生成後、最小値が0で最大値が1になるようにすべての画素で同じ線形変換を行う。これで絵としてのコントラストを最大化できる。カラーの場合にもRGBそれぞれについて同じことをすればいい。
それでもFourier変換を使ってなめらかにした絵はどこものっぺりしてメリハリはない。コントラストは最大でもやっぱりどことなく眠い、と言う感じは否めない。今日は他に、メリハリを付けるための簡単なアイデアも思いついた。それは実装のところで具体的に書こう。実際に描画しないと効果があるかどうかわからないし。
2011-07-23 20:11
nice!(0)
コメント(0)
トラックバック(0)
コメント 0