Bokeh Particles


↑これが REPUBLIC で VJ やったやつね。被写界深度つきパーティクル。ボケた光きらきらとかってのが好きでまえからそのへんをいかにコンピューター上で再現するかみたいなことを調べていたのだけど、なかなか実際にコード書くとこまでいけなくって。んで、牛尾さんと打ち合わせしてるときに彼も被写界深度とかグラデーションとか好きなんすー、て話になり、んじゃあこれやってみっか!てな流れ。

要素的には、被写界深度 / HDR / ガンマ補正 / 色収差 / Bloom / Vignette / FFT / MIDI / OSC てなとこかな。

被写界深度はレンズの挙動・光学的なところをある程度リアルにシミュレーションすることで実現しているのだけど、それはほぼこの資料(パワポ直リンク)に書いてあることをまじめに実装することでできてます。これかいてる川瀬さんてのがやばい。YEBIS っていう主にゲームのポストエフェクト用のミドルウェアを作ってる人で、サイトはいま死んでいてちゃんと見れないんだけど、資料はダウンロードできるので興味ある人はのぞいてみるべし。この記事もおもしろい。つーか、YEBIS 使ってみたい。

HDR。光をまじめに計算しようとすると 8bit の 256 段階ぐらいでは全く足りなくて、16bit float 以上の精度じゃないとだめねっていうやつ。ダイナミックレンジが低いとキラキラしないん。Bloom も HDR で計算しないと効果ないの。

ガンマ補正。これまでちゃんと理解してなかったんだけどようやく正確に理解できた。sRGB カラースペースの意味も。というかこれ理解せずに CG とかありえないわっていう感じになった。HDR は光のエネルギーを計算するのでガンマ補正しないと正しくならない。

色収差は光の波長によって屈折率が微妙に違うのが原因で絵の周辺部に色がしみ出る的なやつ。むかし白背景に黒い人物のやつを撮影したときに、なんでこれ縁が青くなってんすかねー?みたいなことがあったんだけど、色収差が原因だったのね。これをシミュレーションすることで本物っぽくみえるっていう。

Vignette(日本語でいうと周辺減光?)これはカメラのシミュレーションね。よくあるやつ。

今回、音とちゃんと同期させようー、というのも別のテーマとしてあって、その方法が二つ、オーディオを FFT でスペクトラム解析するってのと MIDI ノートをそのまま使うってやつ。(実際は同期してるように見せれるほど仕組みつくれなかったんだけど…)

FFT するのは ofxFft つかうと簡単にできるんだけど、それだと人間の聴覚とは違う感じの数値がでてくる(低音がやたら数値高い的な)ので、そのへんを調整するやつつくった。loudness とか A-weighting とかそのへん。HDR もそうなんだけど人間の感覚器官が対数的っていうのがよくわかった。おもしろい。

FFT だとどうしても解析時間が必要で遅れがでちゃうのが気になる、っていうのがあって、MIDI 信号そのままもらうっていうのもやってみた。これは OSCulator つかえば簡単。

あとは、全体のコントロールに TouchOSC つかった。

っていうのを、openFrameworks とアドオンいっぱい(ofxUI, ofxXmlSettings, ofxOsc, ofxFft, ofxTween, ofxFx, ofxFenster, ofxAssimpModelLoader)で作りました。あ、あとパーティクルエンジンは SPARK っていうやつ。

ソースコードは Github に置いといたのでてきとうにどうぞ。(コンパイルできないかもだけど…)