バーチャル撮影システムとHoloLens演出の技術的なお話
HoloLens演出が実現するまでのお話はこちら。
この記事では技術目線で実現ための気づきを与える話をします。
表現したいことのゴール
一度動画の14:00あたりを見ることをお勧めします。
ポイントは
・身体とCG世界がインタラクティブに作用しているか
・三次元的な整合性が取れているか
の2点です。
実際の様子のスクリーンショットがこちら。
ハンドジェスチャーに応じて、Cubeが小さくなっています。
Cubeを奥に置くと、人間より奥側に描画されます。
これが
・身体とCG世界がインタラクティブに作用しているか
・三次元的な整合性が取れているか
になります。
使用技術を分解する
これらの現象を理解するためには、使用技術を分解して考える必要があります。
HoloLens表現のバーチャル撮影
= 3DCGリアルタイム合成技術 + HoloLens技術 + 位置合わせ
3DCGリアルタイム合成技術
3DCGリアルタイム合成技術では、グリーンバック背景に立つフィジカルな人間とCG空間をリアルタイムに合成します。
実際はこのようにグリーンバックのスタジオに立っています。
ここで基本的な合成絵を作っています。
こちらは、リアル人間 + CG空間の合成絵です。
実際のCG空間 (Unreal Engine) はこちら
画の作り方の順番としては以下のフローになります (ざっくり)。
実写映像 (グリーンバック)
↓
クロマキーによるキーイング (人の部分だけくりぬく)
↓
ProjectionCubeにキーイングした映像を貼り付ける
↓
CG空間 + ProjectionCubeの映像を出力する
↓
配信
ProjectionCubeについての説明はこちら。
シンプルに考えたい人は、CG空間内に実写映像のパネルを置いているイメージでOKです。ProjectionCubeなので、実際はパネルではなくCubeという感じです。
なので、前後関係は実写映像を投影しているProjectionCubeより前にあるCGコンテンツは、人間より前に描画されます。
これで
・三次元的な整合性が取れているか
の前後関係の謎は解けたでしょう。
あとは、
・身体とCG世界がインタラクティブに作用しているか
について説明します。
HoloLens技術 (手の操作)
HoloLens技術を説明する前に、HoloLens技術と合成技術の関連性を示しておきましょう。
この全体像からわかるように、HoloLens2とCG合成の間では、Cubeの座表情を送っているだけになります。
したがって、手でオブジェクト操作する演出はHoloLens単体の機能になります。
これはHoloLens 2の標準機能として備わっています。
このようにHoloLens視点からは白いCubeを手で操作できています。
他にも、今回HoloLensアプリには以下の機能を実装しました。
・手でオブジェクト操作
・OSC通信の送り先のIPアドレスの設定
・座標の基準点の調整機能
また、今回Unity製アプリからUnreal製システムに座標を送るため、座標軸の変換とスケール変更を行いました。
Unityは
・X:右/左
・Y:上/下
・Z:前/後
・単位:メートル (m)
Unrealは
・X:前/後
・Y:左/右
・Z:上/下
・単位:センチメートル (cm)
次のようなコードを書きました。
public static class Vector3Extensions
{
public static Vector3 UnityToUE4Position(this Vector3 vector)
{
return new Vector3(vector.z, vector.x, vector.y) * 100f;
}
public static Vector3 UnityToUE4RotationEuler(this Vector3 Euler)
{
return new Vector3(-Euler.z, -Euler.x, Euler.y);
}
public static Vector3 UnityToUE4Scale(this Vector3 scale)
{
return new Vector3(scale.z, scale.x, scale.y);
}
}
位置合わせ
今回3つの空間の位置合わせを行う必要がありました。
・物理空間
・CG空間
・HoloLens空間
これらの座標空間を合わせる必要があります。そのために原点と向きを合わせる必要があります。
物理空間↔CG空間の位置合わせ
こちらについては、CG空間の制作時点でスタジオのサイズに合わせて制作します。
また、カメラ座標とCG座標も光学式トラッキングで座標合わせしています。
物理空間↔HoloLens空間の位置合わせ
物理空間とCG空間に共通の原点と向きを定義しているので、それをHoloLens空間とで合わせます。
合わせ方はマーカーと直置き式がありますが、今回は直置き式を選択しました。
スライドではCG世界と書いてありますが、HoloLens世界が正しいですね。
HoloLens世界の原点と向きを再定義したので、Cube座標は原点 (基準点) からの相対座標をCG世界に送ります。
ここでぴったり合えば理想なのですが、現実には多少ずれが生じるので、Offset値を調整できるようにしました。
おまけ1 スライドから取り出す実装
プレゼン中の演出では、スライドからCubeを取り出す実装をしていました。
これは実は子供だましのような実現方法でした。
CubeがあるスライドからCubeが存在しないスライドを準備して切り替える瞬間に、スライドの後ろに配置したCubeを引っ張り出すという見せ方をしていました。
3次元空間なので、スライドの裏にCubeを隠すということができます。
おまけ2 登壇時のTシャツ
今回運営が、登壇者共通のTシャツとして、上記のTシャツを準備しました。
実はこのTシャツ、グリーンバック撮影仕様になっていまして、黒基調のTシャツになっています。
もちろんグリーンバックなので緑 (弊社のロゴカラー) が入ったTシャツは絶対NGですし、白基調も床の緑色を反射してしまうため、キーイングで透けてしまいます。キーイングするなら黒基調の服装がベスト、ということで共通Tシャツとして設計しました。