NHKの「テクネ 映像の教室」という番組で公募されているテクネIDに応募しまして、ありがたいことにプログラミング部門で優秀作品として選出いただきました!ヤッタ-!
http://www.nhk.or.jp/techne/id/content.html#programming
作った映像はこちら
以下、ふりかえりなど。
プログラミング部門で応募すると決めていたので、“プログラミングならではの映像”ってことを意識して作りました。
樹木生成というテーマはプログラミングと親和性が高くて、一般的にもなんとなく理解してもらいやすそうな気がします。
プログラムを勉強する時にtree構造がどうとか、二分木がどうとか、、、
個人的に樹木生成のアルゴリズム使ってなにかしてみたいなと思っていて、今回ちょうどいいタイミングだったので挑戦してみました。
こういう枝がニョキニョキ伸びるのはUnityなど3Dにより強いツールを使えば簡単なのかもです。
ただプログラミング感(コードを書いてるよ感)を自身でも感じたいのと、oFの勉強がてら、というような理由からoFで制作しました。
アルゴリズムの部分はofxSpaceColonizationというアドオンを使いました。
https://github.com/edap/ofxSpaceColonization
oF公式サイトのアドオンをなんとなくに見てて、たまたま発見しました。アルゴリズム系のアドオンは“なんかよくわかんなくても、なんか楽しい”ので時々チェックします。
アルゴリズムの詳細や参考にした論文について上記のgithubページに記載されていて、一応僕も少し勉強してから制作しています。
初めはこのアドオンを2D用にアレンジして、樹木を2Dで表現しようかと思っていたのですが、
AfterEffectsとかでサクッと作れてしまうものになりそう→プログラミング部門として出す意味ない
と気づきアドオン通り3Dの樹木生成でいくことにしました。
ただなんとなく作りたいものを作るわけでなく、目指すべきゴールを持って制作できたのはひとつ良かった点だと思っています。
アドオンのサンプルを参考にある程度までは割とすぐできた印象。
はじめの段階では文字を表現する実の数がもっと少なかったのですが、それだと文字として認識しにくいかもってなり、実を増やして(色も修正して)パッと見て認識してもらえるようにしました。
で、実の数を増やすとやはり動作が重くなったので、生成の計算処理を別スレッドで行っています。この点も今回個人的に頑張った・勉強になったところ。
before:
after:
ofxSpaceColonizeationのアルゴリズムでは枝のゴール地点(枝の先端)を予め指定したうえで、根っこのrootから枝が生えていきます。
枝が伸びきったときの最終的な形を予め指定できるので、実用的な話で言うと、「ざっくりこれくらいの大きさの、こんな形の木になるように枝を伸ばして」とパラメータを渡せば、その範囲でランダムに木のモデルを生成してくれるアルゴリズムです。
今回はこれを「だいたいTの形になるように枝をランダムで伸ばして」という形で利用し、枝が伸びきったタイミングで実を実らせるようにしています。
ちなみに余談ですが、ゲームなどでは木のモデルをたくさん用意して一本一本コピーして植えるよりも、こういったアルゴリズムで生成したモデルのほうが、モデルの容量を削減でき、動的に管理でき、かつ無限に異なるモデルを配置することができる、といったメリットがあるようです。
今回プログラミングで映像を作るということをしたわけですが、
プログラム上では毎回ランダムな成長の仕方をしており(実際は実の位置をある程度ランダムに分散させているだけ)、この例で言えば本来はそこがおもしろいところでもあったのだと思います。
最終的に映像という形にするのであれば、毎回ランダムで異なる計算がされていようと、予め枝の動き計算していようと、ひとつの映像として収めるのであれば同じなのですよね。
なので、おもしろさ100%でなかったかもという反省もあります。
最終的な文字一列の映像にするにあたっては、
oFの実行画面ををQuickTimeでキャプチャ録画 x 6文字分 → AfterEffectsで横並びにして書き出し
という手順を踏んでいます。
理想を言えば、
oFで6文字分の木を生成して回転させて〜、あとはそのまま動画書き出す、もしくは連番画像を書き出すaddonを使って動画生成して〜
という手順になると思うのですが、、、残念、力不足でした。
さらに言えば、はじめは枝が生えて文字が実って、そんで最後枯れていくまでをやりたかったのですが、これも力不足。
こういうの使って、文字だけじゃなく人の顔になる木を生成するとか、ありきたりかもだけど、おもしろそうだなーと思います。
最終的な理想は、リアルの木をハードウェアとして操作して表現したいのだけれど。