見出し画像

バーチャル撮影システムとHoloLens演出の技術的なお話

HoloLens演出が実現するまでのお話はこちら。

この記事では技術目線で実現ための気づきを与える話をします。

表現したいことのゴール

一度動画の14:00あたりを見ることをお勧めします。

ポイントは

・身体とCG世界がインタラクティブに作用しているか
・三次元的な整合性が取れているか

の2点です。

画像2

実際の様子のスクリーンショットがこちら。

画像1

ハンドジェスチャーに応じて、Cubeが小さくなっています。

画像3

Cubeを奥に置くと、人間より奥側に描画されます。

画像4

これが

・身体とCG世界がインタラクティブに作用しているか
・三次元的な整合性が取れているか

になります。

使用技術を分解する

これらの現象を理解するためには、使用技術を分解して考える必要があります。

HoloLens表現のバーチャル撮影
= 3DCGリアルタイム合成技術 + HoloLens技術 + 位置合わせ

3DCGリアルタイム合成技術

3DCGリアルタイム合成技術では、グリーンバック背景に立つフィジカルな人間とCG空間をリアルタイムに合成します。

実際はこのようにグリーンバックのスタジオに立っています。

画像5

ここで基本的な合成絵を作っています。
こちらは、リアル人間 + CG空間の合成絵です。

画像6

実際のCG空間 (Unreal Engine) はこちら

画像7

画の作り方の順番としては以下のフローになります (ざっくり)。

実写映像 (グリーンバック)

クロマキーによるキーイング (人の部分だけくりぬく)

ProjectionCubeにキーイングした映像を貼り付ける

CG空間 + ProjectionCubeの映像を出力する

配信

ProjectionCubeについての説明はこちら

画像8

シンプルに考えたい人は、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空間の制作時点でスタジオのサイズに合わせて制作します。

画像10

また、カメラ座標とCG座標も光学式トラッキングで座標合わせしています。

FIX_1_岩﨑謙汰_desFIX.014

物理空間↔HoloLens空間の位置合わせ

物理空間とCG空間に共通の原点と向きを定義しているので、それをHoloLens空間とで合わせます。

合わせ方はマーカーと直置き式がありますが、今回は直置き式を選択しました。

FIX_1_岩﨑謙汰_desFIX.041

スライドではCG世界と書いてありますが、HoloLens世界が正しいですね。

HoloLens世界の原点と向きを再定義したので、Cube座標は原点 (基準点) からの相対座標をCG世界に送ります。

FIX_1_岩﨑謙汰_desFIX.039

ここでぴったり合えば理想なのですが、現実には多少ずれが生じるので、Offset値を調整できるようにしました。

おまけ1 スライドから取り出す実装

プレゼン中の演出では、スライドからCubeを取り出す実装をしていました。

画像15

これは実は子供だましのような実現方法でした。

CubeがあるスライドからCubeが存在しないスライドを準備して切り替える瞬間に、スライドの後ろに配置したCubeを引っ張り出すという見せ方をしていました。

3次元空間なので、スライドの裏にCubeを隠すということができます。

おまけ2 登壇時のTシャツ

画像14

今回運営が、登壇者共通のTシャツとして、上記のTシャツを準備しました。

実はこのTシャツ、グリーンバック撮影仕様になっていまして、黒基調のTシャツになっています。

もちろんグリーンバックなので緑 (弊社のロゴカラー) が入ったTシャツは絶対NGですし、白基調も床の緑色を反射してしまうため、キーイングで透けてしまいます。キーイングするなら黒基調の服装がベスト、ということで共通Tシャツとして設計しました。

よろしければサポートお願いします! サポートいただいたお金はハッカソンの運営に使わせていただきたいと思います。