今月催されたアタリ10周年記念パーティのために会社ロゴのオブジェを作りました。以前作ったシステムを流用して会場の壁などにプロジェクション演出せよとのお達しだったのですが、せっかくなので一から立体を作り、3Dプロジェクションマッピングすることにしたものです。
設計図
まずSketchUpでモデリングしてみました。スケール感を掴むとともに、これくらい単純な形なら自作できると判断し、制作を進めます。
今月催されたアタリ10周年記念パーティのために会社ロゴのオブジェを作りました。以前作ったシステムを流用して会場の壁などにプロジェクション演出せよとのお達しだったのですが、せっかくなので一から立体を作り、3Dプロジェクションマッピングすることにしたものです。
設計図
まずSketchUpでモデリングしてみました。スケール感を掴むとともに、これくらい単純な形なら自作できると判断し、制作を進めます。
Unity上のCGモデルに現実の景色をリアルタイムに反射させたい。というわけでまず、Webカメラでパノラマを撮る用意をします。そのへんに転がっていた2台の PlayStation Eye にケータイ用魚眼コンバージョンレンズ KSW-3 を装着。背中合わせにすればほぼ360°のパノラマ映像になります。
遅ればせながらポリッドスクリーンを試してみました。先日参加したニコニコ学会βに実物が出展されており、思いの外きれいに映っているのを見てこれは使えるのではないかと。以前仕事で使ったそこそこ大きなディラッドスクリーンも会社にあるのですが、そちらは高価なのでおいそれと切ったり貼ったりできません。
使ったのは『大倉の農ポリ』。ビニールハウス用のポリエチレンシートで、1巻100メートルもあります(もっと短い単位で売ってるかも?)。せっかくなのでいろいろ使えるよう、幅2.3メートルとやや大きめのものを選びました。厚さは0.1ミリ。
前回のパノラマ写真はスティッチ、すなわち複数の写真をつなぎ合わせる方法で作りました(最近は一発で撮れるカメラが人気ですね)。スティッチには PTGui を使用。正距円筒図法(equirectangular)で出力した360°全周パノラマ写真を Pano2VR でブラウザ向けにオーサリングしています。
当社の様子。ドラッグすると視点がくるくる回り、階段アイコンクリックで階を移ります。一階は会議室。二階に企画・監督、三階に制作・開発スタッフがいます。
Continue reading →
オーラや火花などのエフェクトはUnityのパーティクルシステムとして制作しました。これをKinectの実写映像に重ねるのですが、実写へのCG合成はもっともウソくさく見えるところ。違和感をなくそうと思えば道のりは果てしないですが、いくつか基本的なことを注意すればうっかり違和感を増してしまうことだけは避けられます。
解像度/フレームレート
仮にエフェクトが現実に生じてそれを撮影しているとしたら、実写とエフェクトとで解像度やフレームレートが異なるはずがありません。おなじ映像に収まっているのですから。でもこのことに無頓着で、CG部分だけ妙に精細でヌルヌル動いてる、みたいな作品は案外よくあります。
Continue reading →
本件、研究テーマそのものは多くの可能性を秘めていますが、今回の展示にかぎっていえば正直地味なことは否めません。実写にエフェクト合成するKinectハックはすでに知られているし、ARもすっかり世間におなじみですから。それでもテレビやスポーツ中継の未来を表現し、またせめて一矢報いたいとの思いから、出目はできるだけ工夫しました。
テレビのスポーツ中継を模した画面作りをしていきます。まずデザインしてもらったいかにもなテロップ部品を画面にオーバーレイ表示します。ただそのままではきれいすぎてPCっぽいので、簡易的にアナログ風の色ズレを再現しました。RGBチャンネルに分けたテクスチャをずらして重ねただけ。原理的にはテロップだけ色ズレするのはおかしいですが、らしく見えればよいことにします。負荷との兼ね合いもありますが、本来ならフィルタとして実装するのが正解でしょう。
ここで、本件の開発環境について。
プラットフォームは Windows 8.1。Kinect SDK 1.8 をインストール。ハードウェアは Surface Pro 2 に Kinect for Windows。実行環境も同じ。本番はスペックに余裕のあるデスクトップPCを使うつもりでしたが、ブースの電力が足りないことが判明…。今度からブースがひしめき合うイベントでは注意しよう。
道具
まずは判定の仕方について。姿勢を判定するには複数の要素(スケルトンの各関節情報)を対象と比較しなければなりません。しかし、要素の値を一つ一つ比べて総合的な一致度を測る、というのはいかにも煩雑です。そこでベクトルの内積を使います。
ベクトルの内積(ドット積)とは…くわしくはググってください。高校生は教科書を読もう。端的にいうと、ベクトル同士の向きがどれだけ近いかを求める演算です。ベクトルは何次元でもかまわず、計算も簡単です。
Continue reading →
重量挙げの動作検出はそれぞれの姿勢をKinectで捉えることで実現することにしました。
ご存知のとおり、Kinectは三次元の位置と向きとを持つ関節点の集まり(スケルトン。ボーンとも呼ばれるが厳密には異なる)としてプレイヤーの姿勢をリアルタイムに取り込むことができます。このスケルトンが、定められた姿勢と一致しているか調べるのが判定の基本となります。