３Dアニメーション制作未経験者が、Unityでステレオ３６０度動画を作ってHMDで鑑賞してみた

#はじめに

Gear VRなどのHMDをつかうと、ステレオの３６０度動画を鑑賞できます。なかでも、@koukiwf　さんの[「ユニティちゃんライブステージ！ -Candy Rock Star-」](https://www.youtube.com/watch?v=wBeXINVGle0)はかなりの出来で、私も楽しませていただいてます。

こういう動画を自分でも作りたかったんですが、３Dアニメーションの技術がないので、お手上げでした。しかし、アプリやアセットを組み合わせることで、シンプルなものなら簡単に作れることが解ったので、紹介します。

以下の方法で、音楽に合わせて動く３Dモデルの３６０度動画をステレオで制作し、HMDで鑑賞してみましょう！


# 必要なもの

踊らせたい音楽のmp4 (今回は[ こちらのフリー素材 ](https://musopen.org/music/2056/wolfgang-amadeus-mozart/violin-sonata-no-21-k-304/)）
[キャラミんstudio](http://www.ah-soft.com/charamin/)
[Clip Studio Action] (http://www.clip-studio.com/clip_site/download/clipstudioaction/clipstudioaction_top)
[Unity] (http://unity3d.com)
[SphericalImageCam] (https://www.assetstore.unity3d.com/jp/#!/content/21979)
[Stereo 360 Capture for VR] (https://www.assetstore.unity3d.com/jp/#!/content/41297)

有料のものが多いです。すいません。

# 手順

## キャラミんStudioでキャラクタアニメーションをつくる

キャラミんStudioを起動して、躍らせたい音楽のファイルを読み込みます。

すると、アプリが自動的に振付を割り振って、ミュージックビデオが見れるようになります。

![charamin.PNG](https://qiita-image-store.s3.amazonaws.com/0/58503/613131b8-b4f8-ba9b-bad5-a567c8e9f63e.png)

ここで、ファイルメニューのエクスポート機能で、Clip Studio Action用のファイルを出力します。

## Clip Studio Actionにモーションを取り込む

次に、Clip Studio Actionを起動して新規プロジェクトを作り、キャラクタをシーンに配置します。今回はUnityちゃんを使います。Unityちゃんはデフォルトでは入っていないので、Clip Studioアプリの「ライセンス素材」としてダウンロードして使用します。

Unityちゃんをシーンに配置したら、それを選択した状態でファイル⇒読み込み⇒モーションを選ぶと、先ほど保存したキャラミんのファイルを読み込めます。

すると、Unityちゃんのタイムラインにモーションが追加され、先ほどのキャラミんのキャラクタと同じように踊ることができます。

![ClipStudioAction.PNG](https://qiita-image-store.s3.amazonaws.com/0/58503/198fae7b-9f47-5fe2-1130-40975f9c51e8.png)

ここから直接Unityのプロジェクトとして出力することもできますが、ここでは汎用性を考えてfbxで出力します。ファイル⇒書き出し⇒fbxで、モデルとモーションを出力できます。


## Unityでのfbxファイルの取り込み

ここからは、Unityを起動し、新規プロジェクトを作成します。エディタの中で先ほどのfbxファイルをAssetsにドラッグアンドドロップしましょう。

fbxファイルのimport settingで、RigのAnimation typeをhumanoidにして、apply. それをHierarchyにドラッグアンドドロップします。

次に、Assetsで右クリック、create->Animator Controllerを実行してAnimator Controllerを作ります。それを、Hierarchy中のUnityちゃんのAnimatorコンポーネントのControllerのところにドラッグアンドドロップします。

![UnityEditor.PNG](https://qiita-image-store.s3.amazonaws.com/0/58503/35f1f2db-de11-0d97-8e04-996bce0ab2cf.png)


それをダブルクリックしてAnimatorウィンドウをひらきます。Assetsのfbxファイルの中にBaseAnimというAnimation Clipファイルがあるので、それをAnimatorにドラッグするとBaseAnimというステートができます。

![UnityEditor2.PNG](https://qiita-image-store.s3.amazonaws.com/0/58503/c6dc45a4-2964-796d-c386-0fa0763daabd.png)

これで、ゲームを実行すると、Unityちゃんが踊りだします。

## ステレオパノラマ画像のキャプチャ

次に、ステレオ３６０度キャプチャを行うため、

SphericalImageCam 
Stereo 360 Capture for VR 

という２つのアセットをアセットストアから入手します。両方とも有料なので、ご了承ください。

購入したら、どちらもインポートします。つぎに、Stero360CaptureforVRのStereoSphericalCameraをHierarchyにおきます。そちらに、Stero360CaptureforVR/ScriptsのScreencapture.cs, Stero360CaptureforVR/Scripts/ValidのExistAsset.csをアタッチします。
ScreencaptureコンポーネントのFolderで画像の保存先を決めるので、ここに保存先のパスをいれてください。

録画の際の注意として、カメラの左右で視差があることを確認するため、Assets/SteroCaptureforVR/RenderTexturesにあるRender_Spherical_left.renderTextureと Render_Spherical_right.renderTextureを比較して（デフォルトレイアウトなら右下に出てくるプレビューを見る）、視差があることを確認しましょう。Image effectなどをかけると、視差が消えることがあるそうです（作者様の情報）。


ここで、ゲームを実行すると、各フレームがpng画像として保存されます。

もし、Gear VRで両眼視を行う場合は、画像が正方形である必要があり、理想的には、Stero360CaptureforVRの作者の@koukiwfさんの推薦に従い、2048x2048でキャプチャするのをおすすめします。ただし、残念ながら現状では、Application.CaptureScreenshotのsuperSizeを用いても、画質そのものはキャプチャ時のものが、そのまま反映されます。フル解像度の2048x2048でとるには、それを表示できるディスプレイが必要だそうです。私の場合1024x1024が限界なので、そちらを用いています（←superSizeの記述を修正しました）

## 動画のエンコーディング

ここで得られたpngファイルは、[ffmpeg](https://www.ffmpeg.org/)というツールでmp4に変換できます。

こちらのGet the packagesからパッケージをダウンロードして、使います。セットアップの仕方は、[こちら](http://www.wikihow.com/Install-FFmpeg-on-Windows)を参考にしました。

実際に動画にエンコーディングする際の方法は、[unityの伊藤さんの記事](http://warapuri.tumblr.com/post/98800390873/spherical-image-cam%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6unity%E3%81%A7%E5%85%A8%E5%A4%A9%E3%83%91%E3%83%8E%E3%83%A9%E3%83%9E%E5%8B%95%E7%94%BB%E3%82%92%E4%BD%9C%E3%82%8D%E3%81%86)を参考にしました。

こちらの記事にある方法を少し修正して、、

`ffmpeg -r 60 -i cam_%5d.png -vcodec mpeg4 -qscale 0 out.mpg`
`ffmpeg -i out.mpg -i mozart_sample.wav -s 1024x1024 -aspect 1:1 -qscale 0 -c:v libx264 OutputAudioVideo.mp4`　（注）←訂正しました

と続けてコマンドを実行し、mp4ファイルを作ります。２つめのコマンドでは、音声ファイルのmozart_sample.wavも入力しています。これで、画像と音が動画に入ります。

できたmp4ファイルは、Galaxy S6のOculus/360Videosフォルダに入れます。これで、ようやくGear VRでビデオを見れます。

作ったビデオは、Gear VR以外にも、Kolor eyesのようなアプリをつかってハコスコで鑑賞することも可能です。

# 最後に

Unityでプレビューすると遠く感じるキャラクタも、HMDで見るとむちゃくちゃ近くなります。カメラから遠めにしておいた方が良さそうです。カメラに近すぎるとスティッチがうまくいかなくなるので、注意しましょう。

上で作った動画にユニティちゃんライセンスロゴを追加したものを[こちら](https://youtu.be/R6x_HAFgFz8)にアップロードしているので、よろしければご覧ください。動画ファイルは[こちら](https://drive.google.com/file/d/0BwrGXrDnAzoeLXoyb2pZcnFtU2c/view?usp=sharing)でダウンロードできます。

このコンテンツは、[『ユニティちゃんライセンス』](http://unity-chan.com/contents/license_jp/)で提供されています。