成果物
www.youtube.com
Reaction Diffusionと聞いて、Karl SimsさんのTutorialで紹介されていた数式を連想したのですが、実際は、ボリュームをぼかして引き算するというシンプルなものだったので、その動作原理について考察してみました。実験として、画像にガウシアンぼかしをかけて引き算すると、理にかなった結果が得られたので、そちらを紹介していきたいと思います。
仕組み
Reaction Diffusionの動作を実現するためには、何もない場所では成長し、他のボリュームとぶつかる場所では退行するという動作をする必要があります。それでは、2Dの場合でどのような動きをするのか見ていきましょう。
HoudiniのTutorialと同じような感じで、20pxのガウシアンぼかしをかけたものから、50pxのガウシアンぼかしをかけたものを引くという処理を行っています。
ボリューム1つの場合
まず、ボリュームが一つ真ん中にある場合を考えます。処理を行うと…
予想通り、外側に成長しています。
小さいぼかしから、大きいぼかしを引いたのに外側に成長する理由は、大きいぼかしは広く薄く分布している一方、小さいぼかしは、狭く濃く分布しているからです。
もとのボリュームを引いて成長分を見てみると、これだけ成長したことがわかります。
ボリューム2つの場合
このようなボリュームを考えます。先ほどと同じように処理を施すと…
予想通り、周りに何もない場所では成長し、他のボリュームとぶつかる場所では退行しています。これは、隣の大きいぼかしが自分の所まで影響を及ぼしたため、削られたと考えることができます。
成長分を見てみると、周りに何もない場所では成長し、他のボリュームとぶつかる場所では退行していることがはっきりとわかります。
ファイル
GIMPファイルを配布するので、いろいろ試してみてください。
github.com