ねこでじ(Nekodigi)

Nekodigi’s diary

学習中の気づきをまとめています。応援よろしくお願いします

【Houdini】0004 Reaction Diffusionの動作原理についての考察

成果物

www.youtube.com
Reaction Diffusionと聞いて、Karl SimsさんのTutorialで紹介されていた数式を連想したのですが、実際は、ボリュームをぼかして引き算するというシンプルなものだったので、その動作原理について考察してみました。実験として、画像にガウシアンぼかしをかけて引き算すると、理にかなった結果が得られたので、そちらを紹介していきたいと思います。

仕組み

Reaction Diffusionの動作を実現するためには、何もない場所では成長し、他のボリュームとぶつかる場所では退行するという動作をする必要があります。それでは、2Dの場合でどのような動きをするのか見ていきましょう。
HoudiniのTutorialと同じような感じで、20pxのガウシアンぼかしをかけたものから、50pxのガウシアンぼかしをかけたものを引くという処理を行っています。

ボリューム1つの場合

f:id:Nekodigi:20200612230527p:plain
まず、ボリュームが一つ真ん中にある場合を考えます。処理を行うと…
f:id:Nekodigi:20200612230752p:plain
予想通り、外側に成長しています。
小さいぼかしから、大きいぼかしを引いたのに外側に成長する理由は、大きいぼかしは広く薄く分布している一方、小さいぼかしは、狭く濃く分布しているからです。
f:id:Nekodigi:20200612231907p:plain
もとのボリュームを引いて成長分を見てみると、これだけ成長したことがわかります。

ボリューム2つの場合

f:id:Nekodigi:20200612232021p:plain
このようなボリュームを考えます。先ほどと同じように処理を施すと…
f:id:Nekodigi:20200612232223p:plain
予想通り、周りに何もない場所では成長し、他のボリュームとぶつかる場所では退行しています。これは、隣の大きいぼかしが自分の所まで影響を及ぼしたため、削られたと考えることができます。
f:id:Nekodigi:20200612232904p:plain
成長分を見てみると、周りに何もない場所では成長し、他のボリュームとぶつかる場所では退行していることがはっきりとわかります。

ファイル

GIMPファイルを配布するので、いろいろ試してみてください。
github.com