はじめに
Gear VRなどのHMDをつかうと、ステレオの360度動画を鑑賞できます。なかでも、@koukiwf さんの「ユニティちゃんライブステージ! -Candy Rock Star-」はかなりの出来で、私も楽しませていただいてます。
こういう動画を自分でも作りたかったんですが、3Dアニメーションの技術がないので、お手上げでした。しかし、アプリやアセットを組み合わせることで、シンプルなものなら簡単に作れることが解ったので、紹介します。
以下の方法で、音楽に合わせて動く3Dモデルの360度動画をステレオで制作し、HMDで鑑賞してみましょう!
必要なもの
踊らせたい音楽のmp4 (今回は こちらのフリー素材 )
キャラミんstudio
[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を起動して、躍らせたい音楽のファイルを読み込みます。
すると、アプリが自動的に振付を割り振って、ミュージックビデオが見れるようになります。
ここで、ファイルメニューのエクスポート機能で、Clip Studio Action用のファイルを出力します。
Clip Studio Actionにモーションを取り込む
次に、Clip Studio Actionを起動して新規プロジェクトを作り、キャラクタをシーンに配置します。今回はUnityちゃんを使います。Unityちゃんはデフォルトでは入っていないので、Clip Studioアプリの「ライセンス素材」としてダウンロードして使用します。
Unityちゃんをシーンに配置したら、それを選択した状態でファイル⇒読み込み⇒モーションを選ぶと、先ほど保存したキャラミんのファイルを読み込めます。
すると、Unityちゃんのタイムラインにモーションが追加され、先ほどのキャラミんのキャラクタと同じように踊ることができます。
ここから直接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のところにドラッグアンドドロップします。
それをダブルクリックしてAnimatorウィンドウをひらきます。Assetsのfbxファイルの中にBaseAnimというAnimation Clipファイルがあるので、それをAnimatorにドラッグするとBaseAnimというステートができます。
これで、ゲームを実行すると、Unityちゃんが踊りだします。
ステレオパノラマ画像のキャプチャ
次に、ステレオ360度キャプチャを行うため、
SphericalImageCam
Stereo 360 Capture for VR
という2つのアセットをアセットストアから入手します。両方とも有料なので、ご了承ください。
購入したら、どちらもインポートします。つぎに、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というツールでmp4に変換できます。
こちらのGet the packagesからパッケージをダウンロードして、使います。セットアップの仕方は、こちらを参考にしました。
実際に動画にエンコーディングする際の方法は、unityの伊藤さんの記事を参考にしました。
こちらの記事にある方法を少し修正して、、
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ファイルを作ります。2つめのコマンドでは、音声ファイルのmozart_sample.wavも入力しています。これで、画像と音が動画に入ります。
できたmp4ファイルは、Galaxy S6のOculus/360Videosフォルダに入れます。これで、ようやくGear VRでビデオを見れます。
作ったビデオは、Gear VR以外にも、Kolor eyesのようなアプリをつかってハコスコで鑑賞することも可能です。
最後に
Unityでプレビューすると遠く感じるキャラクタも、HMDで見るとむちゃくちゃ近くなります。カメラから遠めにしておいた方が良さそうです。カメラに近すぎるとスティッチがうまくいかなくなるので、注意しましょう。
上で作った動画にユニティちゃんライセンスロゴを追加したものをこちらにアップロードしているので、よろしければご覧ください。動画ファイルはこちらでダウンロードできます。
このコンテンツは、『ユニティちゃんライセンス』で提供されています。