iPhoneで3D空間に入って撮影できる『Unity Virtual Camera』

これは[Craft Egg Advent Calendar 2021](https://qiita.com/advent-calendar/2021/craftegg)の12/18の記事です。
前日のエントリは@Tomy_0331の[プルリクを出した際のコード規約自動チェッカーをRoslynで試作してみる](https://qiita.com/Tomy_0331/items/ccbbfe1a18616d510559)でした。

# はじめに
こんにちは、株式会社Craft Eggの@arumaniです。
近年Unity社は映像制作方面にも力を入れており、事例が少しずつ増えてきたように思います。今回紹介する「[Unity Virtual Camera](https://docs.unity3d.com/Packages/com.unity.live-capture@1.0/manual/virtual-camera.html)」もそのサポートを目的とした公式パッケージの1つで、記事執筆時点でVer1.0.1と新しめではありますが、既にある程度の機能を備えたしっかりしたものになっています。

この記事ではざっくり機能の紹介をしつつ、想定される用途についても私見を交えて書いています。

# Unity Virtual Cameraをひとことで言うと

**手元のiPhone端末を通してUnityの3D空間内に入り、自由に動き回って現実のカメラ同様に撮影（カメラワークの記録）ができる機能**です。
<iframe width="720" height="405" src="https://www.youtube.com/embed/pRoS_GTABco" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
反射でいろいろ映り込んでる＆ブレて見辛いですが、iPhoneの動きに応じてカメラが動いています。
この動画では絵の変化が大きくなるよう、端末の動きを20倍くらいにしてUnityカメラの動きに反映させています。
# ざっくりまとめ

- iPhone（iPadも可能です。以降「端末」と記載します）がUnityのCameraとなる。
- Cameraの視界（≒Game View）と端末の画面がリアルタイムに同期する。
- 端末の動きがEditor上のCameraの移動や回転に反映される。つまり現実のカメラと同様に、端末を持って前に歩けばCameraも前に進む。
- ズームやピント位置、絞りの設定など、一通り現実のカメラ撮影でやりそうな操作も端末上でリアルタイムに操作可能。
- 動きや操作をAnimationClipとして記録し、再生できる。

詳細な機能リストは[こちら](https://docs.unity3d.com/Packages/com.unity.live-capture@1.0/manual/virtual-camera.html)。

なおVirtual Cameraと聞くと[Cinemachineのそれ](https://docs.unity3d.com/ja/Packages/com.unity.cinemachine@2.6/manual/CinemachineSetUpVCam.html)を想起する方もいらっしゃると思いますが、別機能です。名前が同じなので検索時はかなり紛らわしいですが…。

また、Virtual Cameraと同様にUnityと端末が連動する[Unity Remote](https://docs.unity3d.com/ja/2020.3/Manual/UnityRemote5.html)もありますが、EditorのGame Viewが端末に反映される点が似ているというくらいで、用途もできる事も全く異なります。

# 試す手順

[公式ドキュメント](https://docs.unity3d.com/Packages/com.unity.live-capture@1.0/manual/index.html)に手順があります。新しめの機能はバージョンアップで手順や名前が変わりがちなので公式が一番確実ではありますが、以下のページも参考になりました。

- Unity社の[Learning Materials](https://learning.unity3d.jp/7585/)（の[スライド資料](https://www.slideshare.net/UnityTechnologiesJapan/unitystation210909)）
- [Unityでバーチャルプロダクション入門をやってみる｜よーへん(バーチャル学芸員・バーチャルライブコーダ)｜note](https://note.com/361yohen/n/n3a180af34621)

注意点は以下です。

- Unity 2020.3.16f1 以降
- iPhone/iPadの実機（ARKitに対応したもの）が必要
- Editorを実行するPCと上記実機が同一ネットワークにあり、ファイアウォール設定など含めて通信可能な状態になっている必要がある
- 現時点のドキュメントだと手順の文書中に肝心のパッケージ名が書いていない。URLを見れば分かりますが、 `com.unity.live-capture`です

# 機能の紹介

カメラの挙動に関わるいくつかの機能を紹介します。

## (1) DoF（被写界深度）
レンズの焦点距離や絞り、フォーカスモードなどが調整できます。
<iframe width="720" height="332" src="https://www.youtube.com/embed/iDaM2745l_8" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
## (2) Damping
カメラの動きや回転の鋭敏さ（適切な表現か分かりませんが…）を変えられます。これを有効にすると、手ブレやちょっと行き過ぎて戻す、みたいな動きを吸収して画面が安定するようになります。
<iframe width="720" height="332" src="https://www.youtube.com/embed/Dc_m0LzhQWA" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
## (3) Motion
端末を動かした実際の距離に対して3D空間内で動く距離をスケールで設定できます。また、この動画ではY軸とZ軸をlockする事でX軸方向の移動のみ反映されるようにしています。
<iframe width="720" height="332" src="https://www.youtube.com/embed/ts0cCKW6gCA" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
## (4) Rotation
回転を軸ごとに固定できます。この動画では常に水平になる設定（Auto Horizon）を有効にしてみています。
<iframe width="720" height="332" src="https://www.youtube.com/embed/YXERt6xFWHU" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
# AnimationClipの記録内容
以下のようにAnimationClipとして各値が記録されていますので、修正やトリミング、複数テイクの合成などもできます。
<iframe width="720" height="332" src="https://www.youtube.com/embed/NMCgj7ZJtaQ" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
# Virtual Cameraの用途

## (1) 映像制作
これがパッケージの主目的だと思います。近年「バーチャルプロダクション」という形でUnityに限らず色々な技術やハードウェアが話題になっており、Unity Virtual Cameraもその一要素として提供されています。ちょっと宣伝ですが、弊社（サイバーエージェントグループ）でも[CyberHuman Productions社](https://www.cyberhuman-productions.co.jp/)がバーチャルプロダクション事業を行っており、専用のスタジオがあります（[参考記事](https://www.pronews.jp/special/202103041130181848.html)）。

## (2) 映像制作やゲーム制作のプリビズ

少し前にNHKの番組『[さようなら全てのエヴァンゲリオン～庵野秀明の1214日～](http://www6.nhk.or.jp/anime/topics/detail.html?i=10381)』の中で、庵野監督がモーションキャプチャで3Dモデルの綾波レイ達を動かしつつ、それをバーチャルカメラで撮って構図を探る様子が流れていました。ご覧になっていない方には伝わり辛いかもしれませんが、あのように映像（アニメ）制作前のプリビジュアライゼーションでもバーチャルカメラは非常に有用です。番組で使われていたようなモーキャプの仕組みによるバーチャルカメラはかなり前から用いられていたようですが、Unity Virtual Cameraによってそれに近い事が簡単にできるようになりました。

また3Dゲーム制作においても、カットシーンやバトルなどのカメラワークを探ったり、Vコン的な動きや構図の指示が低コストで、かつエンジニア以外でもできるようになりそうです。これは私の今の仕事でもどこかで試せないかと密かに企んでいます。

## (3) モーションキャプチャの撮影補助

モーションキャプチャ撮影時は、何らかの3Dモデルにリアルタイムに動きを流し込んで見た目を確認しながら進めるのが一般的かと思います。その際にカメラワークのイメージがある場合は、Virtual Cameraでそのカメラワークを再現しながらモーションを撮る事で、その場で動きを修正したり別の動きを試したりといった事がやりやすくなるかもしれません。

## (4) 物体の動きの記録

Unity Virtual Cameraを「端末の移動や回転をUnityに取り込める機能」と捉えれば、Unity内でカメラ以外のものとして扱う事も考えられます。ポジショントラッキングを担当するAR機能の仕組み上あまり急激な動きは録れないと思いますが、手で持った動きや何らかの物に端末をつけて動きを記録することでリアルな(?)動きが簡単に作れるかもしれません。

# おわりに

Unity Virtual Cameraについて機能と用途をざっくり紹介しました。試すだけなら10分もあればできるくらい簡単なので、ARKit対応端末をお持ちの方は触ってみてはいかがでしょう。また、このVirtual Cameraを含むLive Captureパッケージにはもう1つフェイシャル（表情）キャプチャ機能もあります。

余談ですが、バーチャルカメラの仕組みを作る際に技術的に最も難しいのはカメラ（今回だと端末）の動きを正しく再現する部分だと思います。そのため今まではモーションキャプチャのシステムを使う必要があったところ、ARKitによって端末の動きの再現精度が劇的に上がった事でiPhoneのみでそれができるようになりました。少し前からポジショントラッキングを行うVR機器（VIVE Trackerなど）も選択肢に加わりましたが、コストや手軽さを考えるとスマートフォン単体で実現できているのは素晴らしいと思います。理論上Android（ARCore）でも同じ事ができそうなので、そちらも期待したいところです。

# 告知 : **ゲームを一緒に作ってくれるエンジニアやデザイナー、クリエイターを募集中です！**

私たちCraft Eggは、サイバーエージェントのゲーム事業子会社として[バンドリ！ ガールズバンドパーティ！](https://bang-dream.bushimo.jp/)を運営しつつ、新規ゲームタイトルの開発を進めています（私自身は新規タイトルの開発ディレクターをしています）。**今後の新規ゲームタイトルを一緒に作ってくれるエンジニアやデザイナー、クリエイターを募集中です！**

少しでも興味を持たれた方はぜひ[採用ページ](https://www.craftegg.co.jp/recruit/)をご覧下さい。もし直接話を聞きたい方は[私のTwitterアカウント](https://twitter.com/arumani)にお気軽にDMください。よろしくお願いします！

![ユニティちゃんライセンス](https://unity-chan.com/images/imageLicenseLogo.png)
この作品は[ユニティちゃんライセンス条項](http://unity-chan.com/contents/license_jp/)の元に提供されています