Unity × ROBUSKEY でシミュレーションと現実世界を融合する(前編)

pic01

はじめに

Unityはゲーム開発だけでなく、画像処理ソフトとしても用いられる。そこで、ISP製クロマキーソフトであるROBUSKEYの使用を考えた。3Dゲーム開発エンジンのUnreal Engine4では『ゲーム内のディスプレイ (Texture) に ROBUSKEY 処理をかけた表示を張り付ける』という方法であった。ここ(Unity)では、『Unity のカメラの映像を取得し、ROBUSKEY 処理をかけてゲーム画面に表示する』という方法を用いる。

前編、後編に分け、前編では画像の挿入までを行い、後編ではさらに応用として、3Dオブジェクトを使ったり、映像の挿入を行う。
なお、ROBUSKEYによるクロマキー処理を単にROBUSKEY処理と書く。

環境

  • Windows10 pro 64bit
  • Unity 2019.4.11.f1

前提知識

Unityとは

ゲーム開発に用いられるエンジンで、ユニティ・テクノロジーズが開発しており、開発言語はC#である。

ROBUSKEYとは

ISP製クロマキーソフトであり、実行すると、以下のように緑が透過されていることが分かる。

pic02
特に白のベールや髪の毛の間のような細かい部分もきれいに透過していることも分かる。
本記事ではROBUSKEY処理を行うdllをUnity(C#)から呼び出し、Unity内の画像、映像にROBUSKEY処理を適用する。

Unity上でROBUSKEYを実行する。

  1. テスト画像は先ほどのグリーンバックのものとし、挿入画像は以下のものとする。
    city
  2. Game画面にPlaneが映るようにする(Inspector画面で大きさ、座標、回転を調整する。)
    1. 見栄えが良くなるように照明(Directional Light)の角度を変える。
  3. ROBUSKEYのdllをUnity内のフォルダにドラッグする。
  4. C#のスクリプトを用意し、Main Cameraに貼りつける。スクリプト内では以下のことを行う。
    1. Planeのアスペクト比をテスト画像と同じにする。
    2. Game画面(Unityのカメラから見た映像)を取得する際にOnRenderImageを用いる。
    3. OnRenderImage内で合成処理を行うが、ROBUSKEY処理をされた箇所に単に挿入画像を入れる(不透明度を無視した)やり方だと、濃い緑、(ワンピースに透けた)薄い緑の区別がつかないのでアルファブレンド
      (ROBUSKEY処理されて変化した不透明度に応じた合成手法)を用いる。
    pic03

  5. 挿入画像はGame画面の左下に合わせて挿入する。また、アスペクト比を維持しつつ、高さをGame画面に合わせる。
    1. Game画面から溢れた部分はカットし、Game画面で挿入画像が入らなかった箇所は挿入画像で埋めるようにする。
      pic04

結果

次のようにUnity上でもROBUSKEY処理が正しく適用される。

pic01

まとめ

今回は画像の挿入を通して、UnityでROBUSKEY処理を適用できることが確認できた。後編では、3Dオブジェクトや映像を使った状況にROBUSKEY処理を適用する。