0013-01-27

[][]グレーボールで光源情報を合成 グレーボールで光源情報を合成 - Nao_uの日記 を含むブックマーク はてなブックマーク - グレーボールで光源情報を合成 - Nao_uの日記 グレーボールで光源情報を合成 - Nao_uの日記 のブックマークコメント

反射率18%のグレーの球体を画像認識で検出して、現実の光源環境をモデルのライティングに反映させる実験。

グレーボールが手に入らなかったので自作してみた。

アクリルガッシュ ニュートラルグレー5」を塗るとちょうど18%グレーに近い色になるらしい、と聞いて試してみた。

アクリル絵の具を触るのなんて学生の時以来なのですごく懐かしい感じ。デジタルなものばかり触ってると、こういうやり直しのきかないアナログなものがすごく新鮮に感じる。いろんな大きさや質感のもので試してみたけど、大半は失敗に終わった。

発泡スチロールにそのまま塗っても凹凸が激しくてかなりでこぼこした球体になる。半球の素材は接合部分をごまかすのが難しいし、アクリル球はサーフェイサーを吹かずに縫っても筆の跡が残ってムラが出やすい。

外側が滑らで塗装がしやすく、半球ではなく最初から球体になってて柄をつけて振り回すのに不自由がないくらいに軽い、みたいな都合のいい素材ってあったりしないかな。せっかくなので後日また再チャレンジしたい。

作成した反射率だいたい18%ぐらいのはずのグレーボールを使って、画像認識と光源の反映を試してみた。

認識した円の内部を64x64のライト用テクスチャにコピーして、モデルの法線を見て環境マップとして張り込んでいる。

でこぼこの多い発泡スチロール球だと、細かい凹凸もエッジ検出されてしまうのでちょっと厄介。

また、ハイライトが乗っていたり、急激に影が濃くなってたりするとそもそも認識が正常にできず、結果が安定しない。なにかうまい方法を考えないとリアルタイムの検出は難しそう。Kinectみたいにデプス情報が使えればもっと安定するかも。

また、円周を正常に取ることができても微妙なノイズを拾って中心点が細かく震えてしまうことも。この辺りにつていは、

みたいなのを使えばもうちょっと安定するかもしれないけど、現状ではそれ以前に画像認識の段階で問題が多すぎるので今回はとりえず保留。

せっかくなのでいろいろな光源環境でテストしてみた。

ライトを動かしてみたり、色のついた光源を載せたりするとリアルタイムで反映するのはけっこう楽しい。

そこそこ馴染んだけど、被写界深度などまだ違和感が残る部分も。後ろの人形と比べるとハイライトの乗りが弱く感じるのは材質の違いためなのかな。質感を合わせるならちょっとぼかしてSSSっぽくしてみるのも良さそう。スペキュラーはやっぱりミラーボールを同時に撮らないとダメかな。

あと、シャドウもどう扱うべきか困ってる。とりあえずSSAOを乗せてごまかしてみたけど、主光源が明確な時のセルフシャドウはなにか上手いやり方を考えないといけない。

グレーボールをARマーカー代わりに使えたらいいなと思ってたけど、安定させるのはかなり工夫が必要になりそう。

ミラーボールの反射も含めてリアルタイムで撮りたいところだったけど、実行時にテクスチャ生成するのは諦めて前処理で済ませてしまうほうが早いかもしれない。

Takeo Kido ‏@KidTak

認識といえば、生まれた時から盲目で後から視力を回復した人は、視覚から形状を読み取る事が出来ずに単なるいろんな色のグチャグチャに見えるそうですね こんな本もあってちょっと面白そう http://bit.ly/10TlV9R

@KidTak 遠近感がなくて奥行や距離が知覚できなかったり、道に伸びた電柱の影を溝と誤認識したりするそうですが、今ちょうどそんな感じで欲しい情報をうまく認識できなくて困ってます。人間ってほんとよくできてますね


思いついたので追記メモ:

ボールの大きさ取得の精度を上げる方法として、柄の中間あたりに適当な色を塗ってマーカーとして認識させる事で、画面との距離を測るのも一つの手かもしれない。ボールと柄の角度も取得できるようになるので一石二鳥。