ページ

2014年3月16日日曜日

過去にprocessingで作成したもの





processingにハマっていた時になんとなく作ったもの。
ちょうど、これを作る直前に宇宙についての動画を見てなんとなく、
惑星同士の関係を簡単なモデルにしてプログラミングしたら、
面白いのができるかも、という単純な理由で作りました。

結果としてはなんだかわからないものが出来たけど、
ちょっと面白いと思ったので公開してみました。





こちらは自分で描いた軌跡を
もう一度、追体験できる、というプログラム。
本当は動画でなく、webアプリとして公開すれば、
良いのだと思いますが、
あいにくサーバを構築していないのでとりあえず、
動画の形で公開してみようと思いました。

これについては別の形で誰でも体験できる状態で
再公開したいと考えています。

2014年3月14日金曜日

デジタル・マーブリング





本当はSICFというイベントで発表できたら、と考えていたのですが、
あえなく落選してしまい、発表場所もなくなったのでブログに公開します。

最初の構想の元になっていたのは
マーブリングという水の上に絵の具を落としていく技法です。
子供の頃に水の上の絵の具を流して遊んだことがある人は多いと思いますが、
あれです。

動画はトルコの職人さんによるもの。
見入ってしまいます。


で、これをPC上で再現したら面白いんじゃないかと思い、
まず考えたのが、水流を再現するにはどうしたら?
ということでした。

で、調べた結果、どうやら流体力学というものをPC上で
再現できれば、出来そうだということはなんとなくわかったのですが、
正直、数学・物理に疎いので理解できず・・・

幸い、流体シミュレーションを開発・公開されている方が
それなりにいて、今回の制作には以下のライブラリを参考にしました。
ソースコードから理解していくという作戦です。

Thomas Diewald
http://thomasdiewald.com/blog/?p=95


このライブラリはjavaで記述されていて、GPUを使うバージョンも
公開されていたのですが、ダウンロードして動作したのはCPUバージョンのみ。
CPUバージョンだからかパフォーマンスも正直、イマイチ。

今回はopenFrameworksを使うつもりでいたのと、
パフォーマンスを改善することを目的に
まずはライブラリをC++に移植するところから開発をスタート。

とりあえず、単純にjavaの文法をC++にするレベルの移植を終えて、
動かしたところ、パフォーマンスはそれほど変わらず・・・
マシンにインストールされているのはjava6なんですが、
java6、かなり速いです。

次にロジックを見直して不要そうな部分をどんどん省いていったんですが、
これも対して効果なし。

残る作戦はGPUを使った並列処理化しかない、
と思いはOpenCLでロジック部分を実装。
結果はかえって遅くなる始末。
さすがにこれにはヘコみました。

それでも納得できなかったので
いろいろと試した結果、GPUでの並列化でなく、
CPUでの並列化の方が速いことが判明。
やっと満足いくパフォーマンスを得ることができました。
たぶん、内部的にはCPUコアをフル活用しているんだと思っています。

GPUでの並列処理が遅い明確な理由は未だにわかってないのですが、
今回、プログラムでは2次元配列を多用しており、
GPU側のメモリへの転送速度がネックになっているんだと推測しています。

openCL慣れてくれば、かなり応用範囲の広い技術な気がしています。
今回はデータ並列(同じ処理を複数同時に行う)しかしてないんですが、
タスク並列(違う処理を同時に行う)でやれる部分もあったりしますし、
openGLとメモリ領域を共用して描画速度をもっと早めたりもできそうですし。
以前、作成したチューリングパターンなんかにも応用できそうです。

ちなみに今回の開発環境は以下のとおりです。
何かの参考になれば。

【Hardware】
PC : mac book pro(Late 2012 15-inch)
CPU : Intel Core i7 2.3GHz
GPU : NDIVIA GeForce GT650M

【Software】
OS : mac os x 10.8.5
openFrameworks : v0.8
OpenCL : 1.1

スイミー


もう発表済みなんでここに載っけてもいいかと思ってブログに載せます。
この動画は今年の2月22日にapple store 銀座で発表したものです。

実は去年、「MeMe2013「動き」の設計」という短期の授業を受講したのですが、
その授業での動きの考え方に基づいて作成したのが、この動画です。

「画面上に表現できる動きは無限にあるけれど、
最小単位は1つのピクセルであり、
全 ての表現はピクセルの集合体である」というコンセプトで、
これは 授業で一緒になった佐藤さんによるもの。
実装面は僕がやりました。
それから、ビジュアルイメージ的には絵本のスイミーを参考に。

このコンセプトを聞いて最初に思ったのが、boids。
一度やってみたかったのです。

プログラムそのものはそんなに難しくないんですけど、
パラメータの調整が繊細で、そっちに時間をとられました。 

たぶん、processingにもパラメータなんかを
動的に調整できるGUIキットみたいなもの(openFrameworksにおけるofxGUI)
があるんだろうと思いますが、
開発時はパラメータの数が多すぎてそういうのを入れる気にならなかったです。
今から考えたら入れたらよかった・・・

2013年11月21日木曜日

チューリングパターンが面白い

久々にブログ更新。

「波紋と螺旋とフィボナッチ:数理の眼鏡でみえてくる生命の神秘」(近藤滋 著)という本の書評をネットを徘徊中に目にした。

残念ながら本書は読んでいないけれども、書評を読んで以下のことがわかった。

・動物の体の模様というのは、予め決まっているのでなく、物質の反応の仕方でその時の状況に応じて作り出される、ということを著者の近藤さんは推測した。
・発見のきっかけになったのはアラン・チューリングという人が論文。
・その論文には方程式が載っていて、近藤さんはこの方程式を使って模様をコンピュータ上でシミュレーションしたみた所、どうやらこの方程式は正しいことがわかった。
・上記の方程式で生成されるパターンをチューリングパターンと呼ぶようです。

動物の体の模様が方程式で書き記されていることに、これはスゴイと興奮してしまいました。
さっそくネット上をいろいろと調べてみたら、既にチューリングパターンを実装している人たちを発見。

下のブログの方がC++とopenGLにて実装したものが、わかりやすそうだったのでProcessingに移植してみました。
http://elephnote.com/blog/archives/191(プログラムを参考にさせていただいたブログです)

縄文土器のような模様が浮かび上がってきて楽しい!
これを応用して何か作ってみようと思った。





2013年9月4日水曜日

xtion demo(2)

ユーザートラッキングによるデモを追加しました。
今回はユーザーごとに取得できるピクセルデータを元に映像を生成しています。

この動画、quickTimeを使ってmacの画面を直接キャプチャしてるんですが、openFrameworksのofxQTVideoSaverっていうアドオン使って録画するのが普通っぽいですね。

2013年9月1日日曜日

xtion demo(1)

xtion + OpenNI2 + openFrameworks
による、ユーザートラッキングのデモプログラムを作って見ました。



動画ではわかりにくですが、手のひらに連動して光が動きます。

【書籍】OpenNI 3Dセンサープログラミング

8月30日に知って31日に購入。

OpenNIの日本語情報は限られているので、こういう本が出版されるのは、ありがたい。
mac + openFrameworks + xtionで趣味をプログラムをしているが、この本にはバッチリ、同じ環境での環境構築方法が載っているので、そっちを参照した方が良いと思う。

巻末にOpenNI2、NiTE2のリファレンスも載っている。
公式のプログラマーズガイドを見れば良いんだけど、英語が得意でない人間としては日本語でのリファレンスの方がやっぱり理解しやすいな、と思った。

ちなみにPrimeSense社のcarmineはこの本読んで初めて知った。

認識距離がcarmine1.09では0.35mってのは魅力的で心惹かれた。