スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
事の発端は今から数年前。
ニコニコ動画で見たこの動画に興味を抱きました。



調べてみたところ、Wikipedia の遺伝的アルゴリズムの説明が
非常に分かりやすく、なぜこのようなことができるのか、
果てはどのようなコードを書けばいいのかまで分かります。

というわけで詳しい仕組みなどは割愛するので
もし気になるなら上のリンク先をご覧ください。
意外にも仕組みは単純です。

差し当たり当時このページを見ながらC言語で簡単に実装してみることはできました。
そして Maya で似たようなものはできないものかと思ってはみたものの、
そもそも Maya では1つのオブジェクトにデフォーマとダイナミクスの両方を適用する
ということさえできないため、即座に断念していました。

数ヶ月前、Houdini で簡単に再帰ができることが分かったときに、
このソフトなら同じようなものが作れると確信しました。
Houdini ではデフォーマとダイナミクスの両方を適用するのも造作ないことです。

しかしまだ当時はどうすれば実装できるかまでは分からなかったため、
もっと Houdini の理解が深まってきてから作ってみようと考えていました。

そして最近になって大分理解が深まってきたため、
空いた時間に少しずつ進めてきた結果…

ついに先日、それらしいものが完成しました。



シンプルな八角柱のオブジェクトに3本の Bone を仕込み、
そのうちの2本の回転情報を変数として
参考にさせていただいた上の動画と同様に、
単位時間あたりの最大移動距離を遺伝的アルゴリズムで最適化しました。

Point や Detail などの外部から値を読み込む基本的な Expression を除いて
一切コードは書いておらず、全てノードのコネクションだけで実装しています。

img20120722.gif

この動画で使用しているアルゴリズムでは
遺伝子の個体数4、各遺伝子の成分数6、
選択方式はルーレット選択(適応度は移動距離の2乗)、エリート選択あり、
交叉方式は二点交叉、突然変異率10%です。

これで比較的速く収束するようになったものの、
こんなにシンプルな問題でも
ほぼ最適解となった第216世代までは計算に約78分もかかってしまいました。

恐らくもう少し工夫するだけで計算時間を大幅に短縮できるはずなので、
計算時間が短縮できてきたらもっと複雑な形状でも作ってみたいと思っています。

Houdini での条件分岐,ループや再帰などの計算の流れは
ある程度自由に操作できるようになりました。
まだ使い方のよくわからないノードも沢山ありますが、
もう Houdini 初心者から脱却できてきたのではないかと思います。


…ところで「こんなの映像制作の何の役に立つんだ」と思われる方もいるかもしれませんが。
はい、その通り何の役にも立ちません。

しかし今回は Houdini を自由に操れるようになることが目的なので
それは無事に達成することができたし、
進化的アルゴリズムを Houdini で実装するということ自体は決して無駄ではなく、
この本旨はあらゆるパラメータの値を自己学習させるということだと思っています。

エフェクトアーティストがパラメータの値を何度も変えて試行錯誤することなく
最適なパラメータを勝手に割り出してくれるようになれば
少なからず役の立つものになるはずなのではないかと思います。

これで既に土台はできたので、少しずつ応用してもっと興味深いものを作っていきたいです。

スポンサーサイト
Profile
HN らい

都内某社テクニカルディレクター
都内某専門学校講師
都内某企業講師
元中国某社S3Dスーパーバイザー
Contact
(ENGLISH OK. 可以用中文。)
Categories
Archives
RSS Link
QR Code