6. HeadLook機能の実装(作業編)
今回は、HeadLook機能の実装作業です。
まず最初に、HeadLook機能がどんな感じなのか「HeadLookController」に同梱されているサンプルSceneを見てみましょう。
Assetフォルダにある「HeadLookController」フォルダを選択すると、右に中身が表示されます。Unityアイコンの「HeadLookTest」というSceneファイルが入っているので、それをダブルクリックします。
もしその時点で最初に表示されていた自作のSceneが保存されていない場合は「保存しますか?」と聞いてくるので保存すると、「HeadLookTest」がSceneビューに表示されます。
見やすいようにSceneビューをマウスのスクロールホイールでズームすると、男性のモデルの目の前に黄色いボールがあるのがわかりますね。Hierarchy上では「Target Sphere」という名前になっています。
これを選択して、操作ツール「移動」のボタンを押し、三色の矢印を出現させ、ボールを動かせる状態にしておきます。
そのまま「再生」ボタンを押します。
再生状態のままでScene上で矢印をドラッグし、ボールを動かしてみると、モデルの視線がそれについてくるのがわかりますね。
これが目指すところになります。手順としては、
①モデルに「HeadLookController」機能を付ける。設定を調整する。
②カメラ(=体験者)に、Controllerのターゲットになる機能を付ける。
という感じになります。
もちろん、このテストのように、カメラではないオブジェクトをターゲットに設定すれば、モデルはそれを追いかけるようになります。
では、とりあえず元のSceneに戻りましょう。
Assetフォルダに作っておいた「Scene」フォルダから自作のSceneを選択し、ダブルクリックすれば、また表示が元のSceneに戻ります(もちろん、メニューバー→FileからSceneを指定して開いても構いません)。
では、まずモデルの設定から。
モデルにHeadLookControllerをアタッチする
Hierarchy上でモデルを選択すると、Inspectorにモデルのコンポーネントが表示されます。
今のところは「Transform」「Animator」「MMD4Mechanim Model (Script)」というコンポーネントで構成されていると思いますが、スクロールして一番下を見ると、「Add Component」というボタンがあるのがわかります。
コンポーネントを増やしていくことで、オブジェクトが色んな機能を持つようになっていきます。
モデルが任意のオブジェクトの方を向くために、「HeadLookController」コンポーネントをアタッチしましょう。
「Add Component」を押すと、このような選択ウィンドウが表示されます。
種類別に分類されている中から探してもいいのですが、今回は目当てのスクリプトの名前がわかっているので、上の検索ボックスにhe~とでも入力すれば、すぐに候補が表示されます。
見つけたら、それをクリックすれば、コンポーネントがアタッチされます。
※直接HeadLookControllerのフォルダを開き、「Script」フォルダからスクリプトをHierarchy上のモデルの上にD&Dすることでも、コンポーネントをアタッチすることが出来ます。
HeadLookControllerの設定
まずは、モデルの頭(頭ボーンと首ボーン)がオブジェクトを追うように設定します。
HeadLookControllerのコンポーネントの「Segments」の「Size」が「0」になっているところを、「1」と入力してください。
ここの数値を増やすと、設定項目の欄が増えていきます。
とりあえずは頭部分だけということで、1にしておきます。
1を入力してEnterを押すと、下に「Element 0」という入力欄が増えました。
上から順番に設定していきましょう。
「First Transform」と「Last Transform」には、動かすボーンを設定していきます。
入力ボックスの右にある◎ボタンを押すと、選択肢が表示されます。
First Transform:joint_Neck
Last Transform:joint_Head
を、それぞれ指定してください(前についている番号は、モデルによって異なります)。
その下の数値は、とりあえず以下の通りに入力してください。
Threshold Angle Difference:5
Bending Multiplier:0.7
Max Angle Difference:5
Max Bending Angle:50
Responsiveness:5
なお、これらの設定に関する詳しい内容は、Someluさんの以下の記事が詳しいです。
設定が終わると、このようになっているはずです。
※一番下の項目「Effect」は、機能の効果の度合いを指しています。
例えばこちらの数値を0.8にしたりすると、HeadLookの効きが鈍くなります。とても愛想のいいキャラクターなら、1.2くらいに増やしてもいいかもしれません。
※モデルによってはHeadLookがうまくいかず、頭がぐるぐる回転してしまうことがあるのですが、そんな時に「Overrride Animation」にチェックを入れると、うまくいくかもしれません。
ターゲットになるオブジェクト(カメラ)の設定
次は、ターゲットになるオブジェクト(ここではMain Camera)に、ターゲットになるようなコンポーネントをアタッチします。
こりんさんのこちらの記事で紹介されているコードを使います。
まず、カメラにアタッチするためのスクリプトを作ります。
作成するスクリプトは、前回BlendShapeBlinkを仕舞っておくために作った「Script」フォルダの中に保存することにしましょう。
Assetフォルダの中のScriptフォルダを選択し、Projectビューの上で右クリックすると出るメニューから「Create」→「C#Script」を選択。
すると、こんな感じで新規のスクリプトファイルが出来ます。
とりあえず、ファイル名は「Target」にしておきましょう。
そして、「Target」をダブルクリック。
すると、「MonoDevelop」というアプリケーションが自動的に開きます。
Unityをインストールすると付いてくる、スクリプト編集エディタです。
新規のスクリプトはこんな感じで表示されていますが、とりあえずこの中身を全部削除し、上の記事で紹介されているコードをそのままコピペします。
using UnityEngine;
public class Target : MonoBehaviour
{
public HeadLookController controller;
void LateUpdate()
{
controller.target = transform.position;
}
}
全選択→
上記コードをコピーしてペースト→保存
記号が抜けている…などのコピペミスがなければ、これで「Target」スクリプトは出来上がりです。
(※何か抜けがあったりした場合、スクリプトを保存した段階でUnity画面左下に赤いエラーが出ます)
それでは、出来上がったスクリプトをMain Cameraにアタッチしましょう。
Hierarchy上のMainCameraを選択し、Inspectorの一番下「Add Component」から、Targetスクリプトを探してアタッチしてもいいですし、出来上がったスクリプトを直接オブジェクトにD&Dしてもアタッチできます。
追加できれば、Main CameraのInspectorはこうなっているはずです。
「Controller」という項目に、対象となるモデルを設定しましょう。
右の候補選択ボタンを押して、該当モデルを選びます。
または、Hierarchy上のモデルの名前を選択→「None」と書いてある欄に直接D&D…でも設定できます。
「Controller」の部分にモデル名を設定できたら、準備完了です。
再生ボタンを押して、Rift本体を色んなところに動かして試してみましょう。
設定が間違ってなければ、モデルの頭がちゃんとカメラの動きに応じて追いかけてくれるようになっているはずです。
※頭がぐるぐる回転しちゃう!という人は、前述の通り
モデルのHeadLookControllerコンポーネントの一番下にOverride Animationにチェックを入れましょう。
※また、モーションがちゃんと再生される状態になっていない場合、うまく動かない時があります。モーション再生から設定し直しましょう。
※頭が横を向くモーションを作っても、基本的にはHeadLookに上書きされてしまいます。なので、そっぽを向いてほしい時にも常にこっちを向いた状態になってしまいます。
このあたりは、Unity上でモーションにレイヤーを作り、HeadLookのEffectの値を操作することによって調節が可能です(下の説明は自分メモ用なので、あとでもっとわかりやすく記事を立てるかもしれません)。
HeadLookControllerのコンポーネントを増やす
現時点では、モデルの「頭」が体験者(カメラ)の方を向くように設定されていますが、これを「上半身」や「視線(目ボーン)」も動くようにしたいと思います。
まず、HeadLookControllerのコンポーネントを増やします。
最初にコンポーネントをアタッチした時と同じく、「Add Component」からスクリプト名を探して増やすか、スクリプトの入っているフォルダから、スクリプトを直接Hierarchy上のモデルの上にD&Dすることで、新しくコンポーネントを増やすことが出来ます。
手順通りSegmentsに1を入力してElements欄を作ります。
上半身の設定は以下の通り。
First Transform:joint_Torso
Last Transform:joint_Torso2
Threshold Angle Differenceなどの数値を変えると、かなり動き方が変わります。
キャラクターの性格などによって、ちょうどいい数値を探すといいでしょう。
次に、目ボーンの設定に挑戦してみましょう。
またコンポーネントを増やします。
右目左目の設定が必要なため、ここでもSegmentの数値は2にします。Elementが2つになりました。
①First Transform:joint_RightEye
Last Transform:joint_RightEyeTip
②First Transform:joint_LeftEye
Last Transform:joint_LeftEyeTip
※モデルに上半身2(Torso2)がない・目の先ボーン(EyeTip)がない…などの場合は、PMXエディタなどで付与した方が早い気がします。
※モデルの構造によってはHeadLookと相性が悪く、頭と上半身はいいけど目だけ上手く動かない・コンポーネント1枚分しか動かない…などの結果が生じることがあります。(経験上、ほとんどのモデルはコンポーネント1枚まではしっかり動きます)
もしコンポーネントを追加していくうちに、再生がうまくできなくなったり(再生ボタンを押すと同時に一時停止ボタンも付いてしまう、など)した場合、原因がどこなのか見極めるために、コンポーネントのチェックを外してみましょう。
すると、チェックの外れたコンポーネントは一時的に機能しなくなるため、どこが問題なのか切り分けがしやすくなります。
また、オブジェクト自体のチェックを外すと、そのオブジェクトは非表示になります。
便利な機能なので、覚えておきましょう。
5. HeadLook機能の実装(準備編)
前回までで、なんとなくですがUnity内の操作方法がわかったのではないかと思います。
次は、HeadLookControllerというスクリプトを使って、モデルに「いつも体験者の方を向く」機能を実装しましょう。
準備として、これから必要になるであろうものをいくつか先にダウンロードし、Unity内にインポートしておきます。
UnityPackageやスクリプトの入手
①UnityのStandardAsset
https://www.assetstore.unity3d.com/jp/#!/content/32351
Unityを使用する上で色々と役立つものが入っている標準的なPackageです。
アセットストアから入手できます(旧バージョンのものも現在まだストアにありますので、間違えないよう気をつけてください。リンク先はUnity5以上を使用している場合向けのPackageです)。
アセットストアへは、普通にブラウザからアクセスしても構いませんし、Unityのメニューバーから「Window」→「Asset Store」でタブ表示することも出来ます。
タブ小さすぎて見にくい!と思ったら、タブ名のあたりを左ドラッグで掴んで、画面上の方にぐーっと押し上げると、独立タブにすることも出来ます。
もちろん他のビューもこんな感じで独立タブにすることが出来ますし、コンパクトにしまっておきたければどこかのタブの脇にでもドラッグすれば、その場所に置いておくこともできます。
アカウント・ログイン・インポート手順などに関しては、こちらの記事を参照のこと。
Standard Assetを正しくインポートできれば、Assetフォルダの中身はこんな感じになっていると思います。
こうやって様々なアセット(Unityでは3Dモデルや画像、音楽ファイルなど、使用する全ての素材のことをアセットと言います)をAssetフォルダにインポートし、そこからHierarchyに乗せてSceneに表示していくことになります。
②Oculus Utilities for Unity
Oculus固有の機能を使うためのものです。
以前はこの中の専用カメラがないとVR対応出来なかったのですが、現在はUnity側がチェック一つでVR対応できるようになったため、一応はなくても作業は可能です(今回の作業では使用していません)。
ただ、中に入っている「OVRPlayerController」などをカメラの代わりに使用すると、キーボードの矢印キーで空間を移動したりすることが簡単にできます。
また、touch対応のコンテンツを作りたい場合などは、OVRのカメラを使った方が楽です。
Unity | Developer Center | Oculus
このページの一番上の「Core Packege」から「Oculus Utilities for Unity」の方をクリックすると、ダウンロードページに飛びます。チェックを入れてダウンロードしてください。
ファイルをどこか任意の場所に展開しておき、Unityを起動した状態で、メニューバー→「Asset」→「Import Package」→「Custom Package...」から開きましょう。
※もしかすると「バージョン違うけど大丈夫?」とかそんな感じのダイアログが途中で出るかもしれませんが、とりあえずそのまま進んでしまってください。
③Head Look Controller
https://www.assetstore.unity3d.com/jp/#!/content/4
モデルの目・顔・上半身などが、特定のオブジェクトを追いかけるようにできるスクリプトが含まれています。
こちらもStandard Assetと同様にインポートしましょう。
それと、忘れないうちに、画質維持のためのUnity全体のセッティングを行っておこうと思います。
Quality設定
メニューバー「Edit」→「Project Setting」→「Quality」を選択してください。
Inspectorにクオリティのパラメータが表示されます。
一番上のQualityLevelはそのまま「Fantastic」に。
「Rendering」の「Anti Aliasing」は「8×Multi Sampling」に。
アンチエイリアスの精度を上げます。
「Shadows」の「Shadow Resolution」は「Very High Solution」に。
「Other」の「Blends Weights」は「4 Bones」に。
特にpmx形式のモデル使用時には必ずこの項目にしてください。
以上の設定が終了したら、次回、ようやく実作業です。
アセットストア使用上の注意
※アセットストアでアセットを入手する場合、アセットの推奨バージョンに十分注意してください。
単純な3Dモデルだけのものの場合は問題ないことも多いのですが、インポートしたものの中に「Unity4では動くがUnity5では動かないスクリプト」などを含んでいた場合、インポートしただけでSceneの再生が出来なくなったりすることがままあります。
そんな時は必ずインポートの際に赤文字でエラーが出ます。原因となったファイルの場所や名前が表示されますので、それをUnity上で削除してしまえば元に戻ったりします。
推奨バージョンは「新しすぎても古すぎてもダメ」だったりするので、エラーが出て、当該スクリプトを削除しても再生が出来なくなってしまった場合は、原因となったアセットはとりあえずAssetフォルダから削除しましょう。
Projectのおおもとのフォルダについて
重要なことなのですが、UnityのProjectから何かを削除したい時は、必ずUnityの画面内で削除をしてください(Hierarchyビュー、Projectビュー、Assetフォルダなど)。
Projectが保存されているおおもとのフォルダを開いて削除をしてはいけません。かなり高い確率で、Projectが壊れます。
このモデルはもう使わないから…とか、このファイルは要らないよね?ということで、Projectの中身を整理したくなることはあると思うのですが、オブジェクトを足すのも削除するのも、全てUnityの作業画面内で行いましょう。
もとの保存場所は基本開かないくらいでいいと思います。ご注意を…
4. オブジェクトの移動とCameraの設定~出力まで
前回は、モデルをSceneに配置し、モーションを再生するところまで行きました。
今回は、カメラを配置してみましょう。
カメラの配置
まず、Sceneの中でモデルが見えやすいようにビューを調整します。
前にもやったように、Hierarchy上のモデルの名前をダブルクリックしてみてください。
これでモデルがSceneの真ん中に見えるようになります。
※前の状態によりけりで、ダブルクリックすれば必ず上の画像のような位置に来るわけではありません。自分の見えやすい位置にあればOKです。
Hierarchyを見ると、「Main Camera」と「Directional Light」は既にこの場にあるはずですね(この2つの名前が表示されていない場合は、Hierarchy欄一番上、UnityアイコンのScene名のツリーを開いてください/グレーの▶をクリック)。
どこにあるのか今ひとつわからないので、「Main Camera」をダブルクリックしてみましょう。
…どこ…( ;∀;)
最初のモデルの向きによっては、Cameraがどこにあるのかわかりにくいかもしれません。
Scene右上の「シーンギズモ」で、画面の向きを変えてみましょう。
XかYのコーンをクリックすると、どうやらCameraらしきものが見えてきました。
Sceneビューの上でマウスホイールを回すと、ズームイン・ズームアウトが出来るはずですね。それで、もうちょっと近づいてみましょう。
アップになるとこんな感じ。
これがUnityのカメラです。
カメラから2本伸びている白い線は、いまこのカメラが映している方向と画角を表しています。
現時点では、モデルのかなり後ろの方から、背中を映している状態です。
せめてモデルの正面に持ってこないといけません。
オブジェクトの移動
オブジェクトの移動にはざっくり2つのやり方があります。
①Sceneビュー上にある操作ツール「移動」で動かす
②Inspectorビューの「Transform」コンポーネントで動かす
まず①からやってみましょう。
操作ツールはSceneビューの上にある、5つ並んだアイコンです。
ここで使うのは、左から二番目の「移動」ツール(ショートカットW)。
動かしたいオブジェクトをHierarchy上で選択し、このアイコンを押すと、Scene上に赤・黄・緑のそれぞれの方向に向けた矢印が出現します。
この矢印の上にカーソルを持っていき、ドラッグして引っ張るとオブジェクトが移動します。
実際に出てきた矢印を、モデルの方向に引っ張ってみましょう。
幾分移動し、Sceneビューに表示されたカメラのプレビューでも、下のGame画面でもモデルにだいぶ近づきました。
でもこれじゃまだ足りないですね。
見た目わかりやすいように、もっとSceneの真ん中にモデルを持っていきましょう。
ここでまたHierarchy上のモデルをダブルクリックしてSceneの真ん中に持ってきてもいいですし、操作ツールのてのひらアイコン(ハンドツールと言うらしい)を押して(ショートカットQ)、画面をドラッグして視点を移動しても構いません。
少しずつUnityの画面操作に慣れていきましょう。
さて、更に引っ張って、やっとモデルの前まで来ました。
モデルの体をすり抜けて移動し、映している方向は逆なので、右下のカメラプレビューにモデルが映っていません。
カメラの向きを180度変えないといけませんね。
ここで使うのは、「回転」ツール(ショートカットR)。
真ん中のアイコンです。
ここを押すと、Sceneに白い球と色のついたラインが現れますので、ラインのあたりをドラッグすればオブジェクトが回転します。
この状態から、黄色のラインのあたりを大きくドラッグすると
…だいたい…いい位置に来たでしょうか?カメラプレビューにも、Gameビューにも、正面にモデルが映っています。
ですが、キレイに180度ぴったりには回せていない気がします。
数値ぴったりにしたい場合は、
②Inspectorビューの「Transform」コンポーネントで動かす
こちらの方法を使っていきます。
まず、動かしたいオブジェクトをHierarchyで選択。
すると、Inspectorにオブジェクトの情報が表示されます。
どんなオブジェクトでも、一番上に「Transform」というコンポーネントがあり、ここでオブジェクトの位置・角度・大きさを数値で制御できます。
Position:オブジェクトの位置
Rotation:オブジェクトの角度
Scale:オブジェクトの大きさ
MMDで言うところのアクセサリファイル(xファイル)のような感じで制御できます。
モデルの大きさも簡単に変えられるので、PMXエディタ等でスケールを変更する必要はありません。
直接数値入力できる(※半角数字)のは無論のこと、それぞれの数値入力ボックスの「X・Y・Z」の文字の上にカーソルを重ねると、◁ ▷のマークが表示され、ドラッグで数値を動かすことが出来ます。
筆者はオブジェクトの移動はほぼこの機能と直接数値入力で行っており、①で説明した操作ツールでの移動は、画面で他のオブジェクトのバランスを見ながら移動したい時などに使用しています。
場面場面で使いやすい方を使ってみてください。
また、数値入力ボックスにはマイナスの値も入力出来ますし、現在の位置から「0.5だけ移動した場所に動かしたい」という場合などには「1+0.5」という数式入力も可能です。
さて、現時点でのカメラの位置・角度ですが、モデルの方を向いてきっちり180度ではなく、中途半端な数値で回転配置されてしまっているようです。
こういう場合はキーボードから直接数値入力した方が良さそうですね。
ボックスを選択し、Rotation(角度)のYの値を-180に入力し直します。
角度Yの数値が-180になり、カメラがモデルの正面を向くようになりました。
スケールの変更
今度は、モデルの大きさも変更してみましょう。
Unityでは、MMDモデルをインポートすると、実物よりやや小さく表示されます。
なので、Hierarchyに読み込んでからScaleを変更しましょう。だいたい1.2~1.3倍くらいの大きさにするとちょうどいいです。
Hierarchyでモデルを選択し、InspectorのTransformコンポーネントのScale数値を、手入力でXYZ全て「1.2」にしていきます。
半角英数入力モードで、Tabキーでボックスを移動していくと早いですね。
モデルの大きさが変わったことが、SceneやGameビューでも視認できます。
モデルを間近で見るには、Cameraはかなり近い位置に持っていく必要があります。
また、カメラの位置が低すぎるな?と思ったら、Main CameraのPositionのY数値(高さ)を1.4くらいにしてみるといいかもしれません。
視野角とカメラの描画距離
次は、Main Cameraの「Camera」コンポーネントを見てみてください。
様々な設定項目がありますが、とりあえず重要なのは3つ。
Field of View:MMDで言うところの視野角
※デフォルトでは60になっていますが、30にすると良いでしょう。値が大きすぎるとモデルを眺めるには不向きですし、小さすぎると周囲の背景に影響が生じます。
Clipping Planes:カメラがどこまで描画をするかの距離
※デフォルトではNearが0.3になっていますが、この値ではモデルに近づいた際、カメラがモデルに埋まってしまい、モデルの中身が見えてしまいます。Nearは0.01が推奨値です。
Farは逆にどこまで遠くまで描画するかという数値です。デフォルトの「Far 1000」は1キロ先まで描画するということなのですが、FarとNearはあまり差があるとバランスが崩れるため、広大な空間を描画するのか、狭い部屋の中なのかなどを考え、数値を変えてみてください。
とりあえず、このくらいの数値にしてみました。
この辺まで来たら、また「再生」を押して、じっくりモデルを眺めてみるのもいいんじゃないでしょうか!
ちなみに、再生状態でもコンポーネントの数値を操作することが出来ます。
なので、VRで実際にモデルを見ながら数値をドラッグで操作する機能を使用し、モデルを近づけたり遠ざけたりして、ちょうどいい間合いを測ることができます。
ただし、注意すべきなのは「再生状態で動かした数値は再生を解除すると全て元の状態に戻る」ので、「このくらいの数値がちょうどいい!」と思ったら、その数値を覚えておいて、再生解除してからあらためて入力し直す必要があります。
こういったことがあるので、先の記事で「再生状態とそうでない状態を区別するためにインターフェイスに色をつける」ことを推奨しました。
もしくは、再生状態で数値を変えたあと、これでOK!と思ったら、該当コンポーネントの右上・歯車マークの上で右クリックをすると、コンポーネントの値をリセットしたりコピー&ペーストしたり出来るメニューが出てきます。
ここで「Copy Component」を選択しておいて、再生を解除し、再び歯車マークの上で右クリック→「Paste Component Values」を選択すると、再生状態でコピーしておいたコンポーネントがペーストされます。
再生状態での数値変更時は、そのまま解除してしまわないよう気をつけましょう。
buildの設定
とりあえず見られるものが完成したので、一つのデータとして出力してみましょう。
メニューバー「File」→「Build Setting...」で、build(出力)の設定画面が出てきます。
「Platform」で、どんなプラットフォーム向けにbuildするかを選択します。
ここでは、PC,Mac&Linux Standaloneを選択しましょう。
Target Platformにそれぞれの対象OS(ここでは「Windows」)を、Architectureは、ここでは「×86_64」を選択し(※ビルドに失敗してしまう時「×86」を選択するとうまくいく場合もあります)、「Build」を押します。
保存用のダイアログが開きますので、保存場所を選択します。
Assetフォルダには保存できません。大きめのデータになりますので、余裕のありそうな場所に新しくフォルダを作り、そこに保存するのが良いでしょう。ここではローカルのDドライブに「DEMO1」というフォルダを作りました(※フォルダ名は半角英数で)。
いくつも違う種類のデータを作る予定があれば、「DEMO1」フォルダの中にまた新しいフォルダを1つ作り、Sceneがわかるような名前を(半角英数で)付けておくと良いでしょう。
Unityで何かを保存する時は、フォルダ名もファイル名も必ず半角英数にしてください。
「DEMO1」の中に「MIKU」というフォルダを作り、そこに「Miku」というファイル名で保存することにしました。exeという拡張子で保存されます。
出力は最初の一回がやや時間がかかり、修正した後同じ場面を出力する際はもう少し早くなります。
出力が終了すると、保存されているフォルダが自動的に開きます。
出力データを再生
フォルダの中のUnityアイコンのデータをダブルクリックすると、実行ファイルが起動します。
このようなダイアログが出てきますので、基本そのまま「Play!」を押して構いません。
Windowedにチェックが入っていれば、デスクトップに実行中の画面がミラーされます。
再生を中断する場合は、デスクトップでウィンドウの×をクリックするか、Escキーを押しましょう。
※中断がうまくいかない時は、Altキー+Escキーでうまくいくかもしれません。
※再生しようとすると「データがクラッシュしたよ!」のようなダイアログが出る場合は、保存場所が適切でないか、フォルダやファイル名が半角英数でないことが考えられます。
3. Sceneへのモデル配置・モーション再生
前回、ついにモデルを変換することが出来ました。
今回はまず、メインの作業場所であるHierarchy+Sceneにモデルを持っていくことにします。
Sceneビューにモデルを表示する
Unityの画面内は、いろんなものをD&Dでファイル移動できます。
変換されたモデルを、そのままSceneビューもしくはHierarchyビューまでぐいっとD&Dしてください。
Hierarchyにモデル名が表示され、Sceneにモデルが表示されていることがわかります。
厳密に言えば、モデルを移動するというよりは、コピーするというか…
Assetフォルダという絵の具箱から、Hierarchyというパレットに色を乗せるような感じ…と筆者は思ってます。
Sceneビューでの視点移動など
前回やったように、Hierarchy上のオブジェクト…ここではモデルの名前をダブルクリックすると、Sceneビューの中心にモデルが来ます。
自分から見にくい位置にモデルが居るなあ…と思ったら、少し視点を変えてみましょう。
まずSceneビュー右上にある「シーンギズモ」で表示方向を変更します。
X(赤)Y(青)Z(緑)は、MMDユーザーならごく見慣れたものだと思います。
それぞれの色の付いたコーン(円錐)の部分をクリックすると、方向がぐるぐると変わります。
そして、シーンビューの左上には、丸っこい手のひらのようなアイコンがあります。
ここを押した状態でScene内を左ドラッグすると、視点を移動することが出来ます。
(ショートカット:Q)
MMDで言うところの「右上の緑の十字架」と似たようなやつ…(あっちはアイコンドラッグで、こっちはボタン押してドラッグですが)
また、Sceneビューを右ドラッグすると、視点が回転します。
これはMMDとまったく同じですね。
Sceneビュー上でマウスホイール回転→ズームイン・ズームアウトもMMDと同じ。
最初はMMDと勝手が違ってかなり使いにくいと思いますが、
モデルをダブルクリックで真ん中+手のひらで移動+ホイールでズーム+回転はギズモ…この辺に慣れてくれば、問題なく使えるようになります。
アニメーションを再生する
変換されたモデルは、モーションデータの最初のポーズを取っていると思いますが、まだ再生ボタンを押しても動きません。
アニメーションを再生するために、「Animator Controller」を設定しましょう。
まずHierarchy上でモデルの名前を選択すると、画面右の「Inspector」にモデルのプロパティが表示されます。
いくつかのパネルで構成されていますが、これらのパネルを「コンポーネント」と呼んでいます。
モデルの位置情報(Transform)や、MMD4Mechanimによって変換されたモデルであることがわかります。
その中に「Animator」というコンポーネントがありますね。
ここの「Controller」という箇所、今は「None」となっていますが、ここに、このモデルを動かすための「Animator Controller」を設定します。
やり方はいくつかありますが、一番簡単で手っ取り早い方法を紹介します。
まず、Project内・Assetsフォルダの中にある、おおもとの変換後モデルの方に注目します。
水色のキューブのアイコンの左横にある、グレーの「▶」をクリックしてツリーを開くと、その中には変換済のモーションデータが入っていることがわかります(ここでは「1基本モーション」という名称)。
このモーションをクリックして選択し、そのままInspector上のモデルの名前めがけてD&Dします。名前の上に乗っける感じ…
設定に成功すると、InspectorのAnimatorコンポーネントの「Controller」に、モデルと同じ名前の「Animator Controller」が設定されているのがわかります。
少しわかりにくいのですが、フォルダの中にAnimatorControllerファイルが自動生成されていますね。
では、モーションがちゃんと設定されているか、ほかの場所からも確認してみましょう。
現在、このUnity画面には、まだ登場していないタブがいくつかあります。
それらを画面に追加していきます。
タブの追加
画面左下、Gameビュータブの名前が表記されているあたりにカーソルを持っていき、右クリックして出て来るメニューから「Add Tab」→「Animation」を選択します。
すると、Gameビューの横に「Animation」というタブが表示されました。
モーションのファイル名も確認でき、モーションキーらしきものも見えます。
(※ちなみに、ここでキーをいじってモーションを変更することはほぼ不可能なので、ここで修正することはあきらめてMMDで作り直しましょう)
必要ない時はGameビューのタブをクリックして、そちらを表示させておいて構いません。
あともう一枚追加します。
以前は右クリック→Add tabで追加できた気がするのですが…このバージョンで確認したらメニューになかったので、別の場所から。
メニューバー→「Window」→「Animator」を選択してください。
すると、たぶんSceneタブの横に「Animator」タブが出来ていると思います。
中に、モーション名が表記された黄色いかたまり(ステートと呼ばれます)があるのがわかりますね。
ここは複数のモーションデータをくっつけたりなんだかんだする場所なのですが、とりあえずは「こういうところがあるんだな~」程度で構いません。普段は使わないので、Sceneタブの方をクリックしてSceneを表側に表示しておいてください。
Hierarchyタブでモデルを選択した状態で、Animatorタブで黄色いステートが表示されていなかったら「モーションが登録できていない」ということです。
Animatorタブに黄色いステートもあるし、Animationタブにもキーが表示されているので、モーションはちゃんと登録できているようです。
再生ボタンを押してみましょう。
モーションを登録できていれば、問題なく動いてくれるはずです。
「AnimatorControllerを設定する」のが一番忘れがちなのでご注意を。
現時点では、カメラがまだ遠くにある上にモデルが向こうを向いているので、Riftで覗いてみても「遠くにいるな~」って感じですよね…
とりあえず、ProjectとSceneをこの辺で一回保存しておきましょう。
音声の追加
ダンスモーションを適用したので、音声も入れたい!という場合。
まず、音源ファイル(wavでいいと思います)をProjectに読み込みます。
D&Dで構いません(ここでは、とりあえずモデルのフォルダの中にD&Dしました)。
すると、オレンジ色の波形のようなアイコンのファイルが読み込まれました。
ダンスモーションに合わせたい場合は、モデルを選択し、MMD4Mechanimのコンポーネントから「Anim」タブの中の「Audio Clip」というところに音源ファイルをD&Dします。
ここに音源ファイルを設定すれば、モデルは自動的に音源に合わせて踊ってくれる…はずなのですが…
稀に、モーションと音源がズレてくることがあります。
キー数の多いモーションなどで、たまに生じる不具合なのですが…対策としては
①MMD側で不要キー削除を行ったモーションを使う
②音声ファイルの方を加工する
といった感じになります。
それ以外の音声の追加や、基本的なUnityの中での音源の扱いなどに関しては、いくつかリンクをはっておきますのでそちらをご参照ください。
[Unity] Unity×音についてざっくりまとめ - Qiita
※なお、配布されているダンスモーションにもたいてい利用規約が存在します。そちらをよく確認の上ご使用ください。
動かしてみて、モーションを修正したくなったら(モデルの再変換)
実際にVRで動かしてみると「ああ~ここのモーションはもうちょっとこうした方が…」っていうのが必ず出てくると思います。
Animationタブでモーションキーらしきものが出てきますが、あれをどうにかしてモーションを修正するのは無理なので、諦めてMMDでモーションを作り直してください。
保存の際は、最初のモーションと区別出来るように、またUnity上で判別しやすいような名前をつけていくといいと思います(日本語でOKです)。
モデルに新しいモーションを入れて変換し直す必要が出て来るのですが、この際にHierarchy上のモデルは削除しないでおいてください。
なぜなら、「おおもとを削除しても、Hierarchy上から削除しない限り、このモデルがここにあったという情報がまだ残っているから」です。
今後作業をしていく上で、Inspectorでモデルの位置や大きさ、向きを調整したり、モデルに必要なコンポーネントをどんどん足していくことになると思います。
Hierarchy上からモデルを削除してしまうと、それらの情報は残りません。
また一から全部設定し直しです。めんどくさいです。
ですが、Hierarchy上では削除せずおおもとのモデルだけを変換し直せば、完全に同じモデルを変換し直した場合に限り、自動的にScene上に同じ状態で現れてくれます。
なので、モーションを変更するためには、とりあえず
→MMDで新しいモーションを作成する
→AssetフォルダにD&Dする
→MMD4Mechanimファイルを選択し、新しいモーションを入れ、Processを押す
→新しいモーションを含んだモデルが生成される
という流れになります(その先もあります)。
では、新しいモーションをAssetフォルダにD&Dしたとして、その先を解説します。
上図の通りに新しいモーションを入れてProcessを押すと、変換後モデルが2つに増えるわけではなく、以前作成した変換後モデルの中身が自動的に新しいモーションに変わります。
一見なにも変わっていないように見えますが、モデルのツリーを開いてみると、モーション名が変更されているのがわかります。
ですが、このまま新しいモーションを再生できるわけではありません。
Hierarchy上でモデルを選択し、さきほど追加した「Animatorタブ」をクリックして見てみると、モーション登録は以前の「1.基本モーション」のままになってます。
モーションを再登録する必要があります。
まず、一番最初にモーションを登録する時に自動生成された「AnimatorController」をフォルダの中から削除してしまいます。
同じようなアイコン・同じような名前が並んでわかりにくいですが、変換後モデルの下にあるファイルです。
フォルダの中にある方を選択して削除してしまえば、InspectorのAnimatorコンポーネントに登録されている方も消えます。
あとは、一番最初にモーションを登録したのと同じ手順を繰り返します。
変換後モデルのツリーを開いた中に入っている新しくなったモーションを、Hierarchy上のモデルにD&Dします。このページの「アニメーションを再生する」の項目で説明していますね。
そうすれば、また新しくAnimatorControllerが自動生成し、モデルに新しいモーションが登録されます。
ですが…これでも何かうまくいかない時があります。
「新しいモーションにしたはずなのに新しい動きが反映されてない…」
「表情モーションだけ消えちゃってる…」
なんてことが、ままあります。
こんな時は慌てず騒がず、Hierarchy上のモデルを選択し、モデルのInspectorを表示させます。
モーションがモデルにちゃんと登録されているかどうか確認する箇所は、AnimatorControllerが適切に設定されていることと、「Anim」タブ内にanimファイルがちゃんと登録されているかどうかです。
Inspectorの「MMD4Mechanim Model(Script)」というコンポーネントがあります。
ここでモデルの様々な設定ができるのですが、ここでは「Anim」をクリックします。
Animタブの中を見てみると、ここに設定されているanimファイルが、前のままになっているのがわかりました。
(よくあるんだこれが…)
animファイルは、モーション変換時に自動生成されるファイルです。
フォルダの中にありますので、それをD&Dで「Anim File」のところに持っていきましょう。
(「Anim File」欄の一番右の◎部分をクリックすると、ファイル選択ウィンドウが開きます。そこからファイルを選択することもできます)
そうすれば、まず問題なく新しいモーションを再生できるはずです。
「めんどくさいな~~!!」と思った方も居ると思いますが、慣れです。
修正したモーションに変更する手順をまとめると、
①新しいモーションをAssetフォルダに入れる
②変換後モデルとAnimatorControllerは一旦削除する
(※変換したモデルを削除しなくても再変換すれば勝手に入れ替わるんだけど、私は一旦削除してからまた新しく変換し直します~)
③新しいモーションをMMD4Mechanimに入れて再変換
④変換後モデルのツリーを開いて新しいモーションをHierarchyのモデルに乗せる
(すると新しいAnimatorControllerが自動生成・設定される)
⑤InspectorのMMD4MechanimコンポーネントのAnimタブに、新しいanimファイルがちゃんと設定されてるか確認する
わかってしまえばこれだけの作業です。「あ~~やっぱanimがちゃんと入ってない~~」とか言いながら作業できます。
なにごとも最初は慣れですので…!!頑張りましょう!!
あとねUnityはたまに表示がバグったり、正しい操作をしてもうまくいかないことがまれによくあります!そんな時は一旦保存して、Unity再起動!それでも駄目ならPC再起動!すればなんとかなります!(ず~っとUnity開きっぱなしで一日作業してると調子が悪くなる気がする)
最初はもろもろめんどくさいかもしれませんが、めげずに進みましょう!
2. MMD4Mechanimのインポート・モデルの読み込み
今回は、UnityにMMDモデルを読み込むというあたりまでやっていこうと思います。
MMD4Mechanimのインポート
UnityにMMDモデルを読み込める状態にするには、専用のプラグインが必要です。
Noraさんが開発された「MMD4Mecanim」を以下のサイトからダウンロードします。
少し下の方の「MMD4Mecanim Beta~」と書いてあるzipファイルのリンクから。
ダウンロードする場所はどこでもいいですが、中にはチュートリアルのpdfも入っているので、すぐに参照できる場所に置いておくのが良いでしょう。
ダウンロードしたフォルダを開くと、中にUnityアイコンのパッケージが入っています。
「MMD4Mecanim」(Standardじゃない方)をダブルクリック・もしくはUnity画面のProjectビューの中の「Assets」フォルダに直接D&Dします。
(メニューバー「Assets」→「Import Package」→「Custom Package...」からでもOK)
するとPackageの内容が表示されたウィンドウが表示されますので、「Import」を押せば、インポートが始まります。
インポートが終わると、ProjectビューのAssetsフォルダの中に「BulletXNA」「MMD4Mechanim」の2つのフォルダが増えているのがわかりますね。
この2つのフォルダに関しては、何か特別な用がない限りは何もいじらず(※中身の移動やフォルダ名の変更などをしない)放っておいてください。うっかり削除などをしてしまうと、当然使用できなくなってしまいます。
MMD4Mechanimのインポートが終わったら、これでもうUnityにMMDモデルを読み込める状態になっています。
MMDモデルを読み込む
いよいよMMDモデルを読み込みます。
※なお、MMDモデルは、当たり前ですが「Unityに読み込むことを前提に作られていない」です。
また、「Unityに読み込むこと・VRで鑑賞すること」などを許可していないモデルもあります。
使用する前には、必ずモデルに同梱のReadMeなど、取扱に関する規約を確認してください。よろしくお願いします。
①MMDモデルとモーションを準備する
まずMMDモデルを用意します。モーションはvmd形式のものを用意します(モーションがなくても読み込み可能)。
今回は、「Tda式初音ミク・アペンドVer1.00」モデルを読み込み、モーションは筆者がMMDで作成したものを使用します。
モデルはダウンロードして解凍した、フォルダそのままの状態です。
②UnityにモデルをD&Dする
MMDモデルを、フォルダごとProjectビューのAssetsフォルダにドラッグ・アンド・ドロップします。
モーションはモデルフォルダの中に同梱しておいても良いですし、あとから単体でAssetsフォルダの中に直接D&Dすることも出来ます。
また、音楽ファイルや画像ファイルなども、このようにAssetsフォルダに直接D&Dして使用することが出来ます。
筆者は、同梱するにしてもあとから入れるにしても、モーションを見失わないよう該当のモデルフォルダの中に入れておくようにしています。
(なにせUnityは字が小さい!上にデータの数がたくさんあって、目当てのものを見失いやすいのです…)
さて、問題なく読み込めれば、Assetsフォルダの中にモデルフォルダがそのまま入っているのがわかりますね。
モデルをD&Dしたらエラーが表示された時
さて、稀にですがモデルの読み込みに問題が生じることがあります。
例えば「テクスチャやtoonが読み込めないエラー」。
このようなエラーが生じた場合、モデルフォルダをUnityにD&Dした時点でUnityの下部にエラーメッセージが表示されます。
エラーメッセージをダブルクリックすると、メッセージを表示するConsole画面が現れます。
(※モデル名の部分を白く塗りつぶしています)
エラーメッセージを読むと、toonのbmpファイルが読み込めなかったよ…という内容。
このように画像データが上手く読み込めなかった場合、実際にモデルをUnityで表示させてみると、テクスチャがまったく反映されず全身グレーになってしまったり、透明になってしまったりということがあります。
:なぜこのようなことが起きるか。
bmpという保存形式は、実は種類が非常に多いです。
そのため、Unity側で数多いbmp保存形式をすべてフォローしきれないことがあります。
なので、bmpで保存されたテクスチャやtoonが「MMDでは表示されるけどUnityでは表示されない…」ということが、たまにですがあります。
Unity用に作られたモデルではないので、これは仕方のないことです。
このようなエラーが出た場合の対応策は以下の通り。モデルをUnityに読み込む前に、処理をしておきましょう。
①Windowsの「ペイント」で該当するbmpファイルを開き、そのままbmpで保存し直す。
ファイルを開いて上書き保存、開いて上書き保存を繰り返すだけです。
80%はこれでうまくいきます。それでも駄目だった場合は②へ。
②Photoshopで該当するbmpファイルを開き、そのままbmpで保存し直す。
これでだいたいうまくいきます。Photoshopだと自動処理も出来るので、ファイルが複数あってもサッと終わるのが楽です。
③該当するbmpファイルをpngファイルなどに保存し直し、PMXエディタでテクスチャを貼り直す。
①で駄目→Photoshopを持ってない…などの場合の最終手段はここ。
私は今まで何百体というモデルを使ってきましたが、ここまで行ったのは本当に1体くらいしかないです。たいてい①でうまくいきます。
今まで経験したケースで③までいっても駄目だったのは、「モデルの情報(MMDにモデルを読み込むと最初に表示されるやつ)の英語バージョンの方に機種依存文字が使われていて、そこで処理がひっかかりテクスチャを変換できなかった」というのが一度だけありました。
どうしても駄目!となった場合は…ご相談ください…
また、MMD4Mechanim開発者のNoraさんはとても頼りになる方なので(めちゃくちゃお世話になってます)、Twitter等で直接聞くのが早いかもしれません。
モデル変換の前に
特にエラーメッセージも出ずAssetフォルダにモデルファイルを読み込めたら、フォルダを開いてみましょう。
Assetフォルダの中のモデルフォルダをダブルクリックすると、最初はフォルダの中身がこんな感じで表示されると思います。
アイコン表示が大きすぎて使いにくいので、リスト表示に変更しましょう。
Projectビューの右下にあるスライダーを左右に動かすことで、フォルダ内のアイコン表示の大小を調節します。
フォルダ内のファイルの視認性が高くなるので、一番アイコンが小さい状態にします。
また、各ビューの大きさも、境目のあたりを左ドラッグすることで広さを変えられるので、その時々で都合のいいよう調節しましょう。
MMDモデルの変換
読み込んだモデルフォルダの中にある、自動生成されたMMD4Mechanimファイルを選択します(もともとpmx/pmdファイルだったものです)。
Inspectorビューには、モデルファイルに同梱されている利用規約が表示されます。
利用規約を確認後、利用に問題がなければ、一番下までスクロールし、チェック欄を確認・チェックを入れ「同意する」をクリックします。
すると、Inspectorビューがvmdファイルを登録・変換画面に遷移します。
モーションを準備してある場合は「VMD」の「None(Object)」と書いてある場所に、直接ファイルをD&Dします。
モーションが登録されると、「VMD」のところにモーション名(ここでは「1基本モーション」という名前のファイル)が表示されます。
間違えて登録してしまった場合は、vmd欄左の「-」のマークを押すと消えます。
モーションの登録が終わったら、「Process」のボタンを押すと、変換が開始されます。
こんな感じに処理が走ります。しばらく待ちましょう。
モーションが長かったりすると、やや時間がかかることもあります。
無事変換が終了すると、モデルのフォルダの中に、水色のキューブの形をしたアイコンが増えています。
(※ちなみに、フォルダ内のアイコン表示を大きくした状態だと、以下のようにモデルの姿が映ったものになります)
これが、Unity表示用に変換されたMMDモデルです。
また、上の方には「1基本モーション」という名のvmdファイルがanim形式のファイルに変換されたものもあります。
右下の画面を見ると、どうやらテクスチャはちゃんと反映されているようです。
(※この時点でUnity画面左下にメッセージが出ることがありますが、ちゃんと変換されていたらとりあえず無視してください。赤い「!」メッセージは何かしらまずいですが、白い「!」メッセージは「処理終わったよ~」的なアレだったりします)
では次回、変換が終わったモデルを遂にSceneビューに表示させてみましょう。
1. Unityの画面構成
今回は、Unityをダウンロードした状態から始めます。
使用しているバージョンは5.6.2p4です。
(p4はパッチです。パッチはここからダウンロードできます)
Unityのアカウントを取得し(この部分の説明は省略しますが、アカウントとパスワードはのちのち必要になるので、忘れないよう控えておいてください)、「新規Projectを作成」するところからです。
新規Projectを作成する
Unityを起動すると、下のようなダイアログが出てきます。
(もしくは、画面上部メニューバーの「File」→「New Project」を選択します)
①Projectに名前を付ける(Project name)
Projectとは、これから作業をするための大きな場所になります。
名前を付ける際は、必ず「半角英数字」で付けましょう。
これから、Project/Scene/exeなどいくつか保存時に名前を付ける場面があると思いますが、日本語は避け、半角英数字で付けるようにしてください。
データを出力した時に「開けない?エラーが出る?」って時は、日本語または全角で名前を付けている時だったりします…
また、Unityはバージョンが変わるとProjectを開く際の互換性を失いますので、Projectの名前にはUnityのバージョン名を入れておくと、のちのち命拾いするかもしれません…(うっかりバージョンの違うUnityでデータを開いてしまうと、Projectがぶち壊れて二度と戻らないこともあります…)
Unityはもともとゲーム開発用エンジンなので、ゲームを作るための材料を全部Projectにぶち込んでおき、そこで複数のSceneを作成して組み合わせて1個のゲームを作り上げるのですが、このブログでは大掛かりなゲームを作りたいわけではないので、とりあえずは1個のSceneの中に作りたい世界を作りましょう、という感じです。
②Projectを保存する場所を指定する(Location)
Projectには、使用するモデルデータやその他もろもろ全てをインポートします。
必然的にかなり大きく重いデータになるので、それを踏まえて保存する場所を選びましょう(水色の●●●マークをクリックすると、選択画面が開きます)。
右上、形式が「2D」ではなく「3D」になっていることを確認したら、
③「Create project」をクリックし、新規Projectを作成します。
Projectを作成すると、Unityの画面が開きます。
こちらが初期画面。
レイアウトが少し使いにくいので、変更します。
画面右上の「Default」をクリックし、「2 by 3」を選択。
レイアウトが変更されます。
また、画面上部のメニューバー「Window」→「Layout」からも変更が可能です。
Unityのレイアウトはタブを引っ張って色んな場所に持っていくことができ、かなり自由がきくので、おいおい自分の使いやすい形に変えていくのが良いでしょう。
とりあえず、今後の解説はこのレイアウトで行います。
Unityの画面構成
Unityの画面は、おおまかに以下の5つに分けられます。
①Sceneビュー
メインの作業画面です。MMDの作業画面に近い場所です。
この画面にモデルやその他のオブジェクトを配置し、照明やカメラを配置していくことになります。
「Scene」がMMDで言うところの「pmm」に近いものだと思っていただけるといいかなと思います。
②Gameビュー
Sceneに配置したカメラが映している場所を映すビューです。
VRの場合、カメラ=体験者の視界になるので、体験者の視界がここに映し出されます。
③Hierarchyビュー
④Projectビュー
Projectビューには「Asset(アセット)」と書いてある青いフォルダがありますね。この画像ではアセットフォルダを選択した状態になっています。
今のところ何も入っていないので、「This Folder is empty」と表示されています。
Unityの世界では、モデルやオブジェクト、音楽データやモーションデータ、エフェクトデータなど、Sceneを構成するものを全てひっくるめて「Asset」と呼んでいます。
Unityでの作業は、
「アセットフォルダに使用するオブジェクトやデータをどんどんインポートしていく」
(アセットフォルダめがけて直接D&Dすることでインポートできますし、アセットストアで手に入れたものをインポートしてもここに保存されます)
→「アセットフォルダから、Sceneに使用するものをHierarchyに乗せる」
→「Sceneにオブジェクトが現れる」
→「SceneビューとInspectorビューでオブジェクトを操作・編集する」
という流れになります。
いま現在、Sceneには何も映ってないように見えますが、実は2つのオブジェクトが存在します。
Unityの画面真ん中上部あたり、Hierarchyビューのところに、白黒のUnityマークのアイコンがありますね。
今はまだSceneの保存がされていないため「Untitled」という名前になっていますが、アイコンの左部分のグレーの▶を押し、ツリーを展開すると
「Main Camera」と「Directional Light」というオブジェクトが、このSceneの中に最初から存在していることがわかります。
「Main Camera」はそのまま、VRにおける私たちの目となるカメラです。
Sceneビューの下のGameビューに映っている映像は、そのカメラから映した映像になります。
「Directional Light」は、Unityの世界を照らす基本になる照明です。MMDのデフォルトの照明とだいたい同じ役割です。
クリックして、Hierarchy上の「Main Camera」を選択します。
また、Hierarchy上でオブジェクト名をダブルクリックすると、Scene上でそのオブジェクトが真ん中に来ますので、やってみてください。
広い空間の中でオブジェクトを見失った時などに便利です。
そして、オブジェクトを選択したことによって、今まで空白だった画面一番右の⑤Inspectorビューに、選択したオブジェクトのプロパティが表示されました。
Inspectorビューでは、選択したオブジェクトの要素が表示されることに加え、要素を追加したり、編集したりすることが出来ます。
AviUtlを使ったことがある方には、馴染みのあるインターフェイスかもしれません。
五種類のビューの主な特徴がわかったところで、試しに「Main Camera」と「Directional Light」を同時に選択してみましょう。
※Shiftキーを押しながらで、複数選択が可能です。
選択した状態で右クリック→出たメニューから「Delete」を選ぶ
…もしくは、選択した状態でDeleteキーを押すのでも構いません。
すると、世界から光が消えたことで空と地面の色が変わります。
また、カメラが消えてしまったので、Gameビューには何も映らなくなります。
この状態のままだと困るので、ショートカットのCtrl+Zで、削除する前の状態に戻りましょう。
また、Hierarchy上の空いたスペースで右クリックすることによって、球形や平面のオブジェクトや、カメラやライトをSceneに簡単に追加することができます。
こちらも是非試してみてください。
このように、Unity上では、おなじみの右クリック、デリート、アンドゥ、コピーアンドペーストあたりは、それほど悩まずに出来るのではないかと思います。
さて、この状態でもうUnityの世界をVRで見ることが出来るのでしょうか?
Oculus Rift CV1を既に接続し、使える状態にしている方は、ちょっと試してみましょう。
その前に、UnityがVRモードになっているのか確認します。
Unity画面上部メニューバー「Edit」→「Player Setting」→「Player」で、Inspectorに表示された部分を下にスクロールし、「Other Setting」→「Virtual Reality Supported」という項目にチェックが付いているかどうか確認します。
また、下の「Virtual Reality SDKs」という部分に「Oculus」という名前が表示されていることも確認してください。
ついでにですが、「Color Space」という項目。
初期設定では「Gamma」になっていますが、「Linear」に変えておいてください。
※これは、Sceneの明るさをなるべく正しく表示するための項目です。ガンマ補正をするかしないかということなのですが、なぜか「Gamma」はガンマ補正しない・「Linear」はガンマ補正する…なので、Linearにしておきましょう。
これで、もうUnityの世界をVRで見ることが出来るようになったはずです。
Unity画面上部の真ん中あたりにある、▶のマークの再生ボタンを押し、Oculusをかぶって見てみましょう。
何もオブジェクトがないと、空と地面しか映らないので、Hierarchy上で右クリック→3DObject→Cube あたりにして、何か置いておいてもいいかもしれません。
ちなみに、再生モード解除は、もう一度再生ボタンを押してください。一時停止ボタンはありますが、停止ボタンはありません。
さて、上の画像では、再生時にUnityの画面の全体の色が薄い緑色に変わっています。
今後作業をしていく上で、今は再生中なのか・再生中でないのかをパッと見でわかりやすくした方が便利だからです。
デフォルトでは再生時もそうでない時も色が変わらず不便ですので、今の時点で「再生中は全体の色が変わる」ように設定し直しておきましょう。
Unity画面上部メニューバー「Edit」→「Preferences...」にすると、「Unity Preferences」のダイアログが表示されます。
左のバーで「Colors」のタブを選択し、「Playmode tint」の色のついたバー部分をクリックすると、カラーピッカーが表示されます。好きな色を選びましょう。
また、見ていただけるとわかる通り、その他の部分も色を好きなように変更できます。
慣れてきたら、自分の好きな色にカスタマイズしてもいいかもしれません。
以上、おおまかなUnityの主な画面構成の説明でした。
最後に、いまSceneビューに表示されている「Scene」を保存しておきましょう。
Unity画面上部メニューバーから「File」→「Save Scenes」で、保存のダイアログが開きます。
保存場所は初期設定では「Assets」のフォルダ内になります。
ここには今後モデルフォルダやらなんやらたくさんのデータが保存されていくはずなので、あまりとっ散らかっていると使いにくい+あとからあまりデータを移動したくない…ので、私の場合はそのまんま「Scene」というフォルダをここに作成し、そこにSceneデータを保存しています。参考までに。
それと、最初の方でも注意しましたが、名前を付ける際は必ず半角英数字で。
とりあえずここでは、アセットフォルダの中に「Scene」というフォルダを作成し、その中に「First」という名前でSceneを保存しました。
そうすると、Hierarchy上のSceneの名前が「First」に変わり、Projectの中のアセットフォルダに「Scene」フォルダが出来ているのがわかります。
そして、Projectも保存した方がいいですね。こちらもメニューバーから保存できます。
Scene/Projectの保存範囲についてはこちらをご参照ください。
※この記事の一連の流れをid:izm_11さんが動画にしてくださいました。実際のUnityの挙動がわかりにくいという方はこちらをご参照ください!
お疲れ様でした。
次回はようやく、MMD4Mechanimのインポート+モデルの読み込みの予定です。
Oculus Rift CV1とUnityを使用して、MMDモデルをVRで見る ー環境の構築と、MMDユーザーからのよくある質問
普段、こんな感じで「MMDモデルをVRで眺める」体験会をやっております。
いつか詳細な記事を書くとして、「できるかな?やりたいかも?」と思っている、主にMMDユーザーへの「私がやってる作業の流れはこんな感じ」記事です。
※なお、当コンテンツは「MMDに対する知識がある程度あり、それなりに扱える」つまりMMDユーザーが読むことを前提に書かれています。
MMDの操作に関する知識が無い方はこちら、初心者向けMMD操作解説ブログをご参照ください。こちらのブログも筆者が運営しております。
MMDにあまり詳しくない方へ
MMDモデルの多くは商用利用が不可となっております。商用利用を念頭に置いている方は必ずモデルに同梱の利用規約の確認をお願いします。
また、MMD以外での利用が不可のモデル・保存形式変換不可のモデル・VR不可のモデル・性的な表現や暴力的な表現不可のモデルなどもありますので、繰り返しますが必ず利用規約を確認してから使用してください。
規約を無視してモデルを使用しても、要らぬトラブルを招くだけで、あなたにとっていい結果には決してなりませんので、おすすめしません。
自分の好きなことを文句言われずにやりたい場合は、無料配布のMMDモデルを使わずに、お金を出してモデルを発注するか、自分でモデリングするのが良いでしょう。
また、基本的にここではスクリプトをあまり使用しません。
モーションも、MMDで作成できるモーション(vmd形式)のものを使用する前提で説明します。
vmdの再現性を重視するため、Animationの形式はHumanoid(vmd以外にもHumanoidモーションに対応)ではなく、Generic(vmdの再現性重視、ただし Humanoidモーションは再生できない)前提で解説します。
なので、 Humanoidモーションに関する説明は一切しません。Final IKとかも使いません。完全にガラパゴスですのでよろしくお願いします。
概要としては
①Unityの画面構成のおおまかな説明・使い方
②MMDのモデルを読み込み、vmd形式のモーションを再生する
③HeadLookControllerを使用した「モデルがカメラの方を向く」状態の実装
④照明についての解説・ Post Processing Stackを使用したエフェクト効果の解説・余裕があればパーティクルシステムとか・その他ビジュアル回りの解説を簡易に(自分のためにも英語の項目を全部日本語化して説明した資料を作りたい)
といった内容になると思われます。
MMDモデルをSceneに配置し、モーションを再生できる状態にし、場面の照明効果や色調補正のやり方がわかる…といったあたりがゴールでしょうか。
それ以上やりたい方は、ご自身でいろいろ調べて先に進むと良いと思います。
(余裕があればもうちょっと色々解説したいです…書いてみて、ここでこういうのやりたい!と思ったらやるかもしれない…)
まずは、環境構築から。
①ハイエンドHMDを手に入れる
現在、VRを楽しむためのガジェットとして、主に
1.モバイルVR・スマートフォンを装着して映像を見る
※¥1000~¥10000以上・スマートフォンが必要・安価で手軽、位置トラッキングなし
2.デスクトップVR・PCに接続して映像を見る
※¥50000~¥80000以上・対応PCが必要・高価だが没入感が高い・位置トラッキングがあり空間の中で移動ができる
以上の二種類があります。
今回は、2番目の「PCに接続して映像を見るヘッドマウントディスプレイ(HMD)」を使用する場合のお話になります。
筆者が使用しているのはOculus Rift CV1(2017年11月現在、5万円にて購入可能)
Oculus touchと呼ばれるコントローラも同梱でこの値段なので、だいぶ安くなりました…
※購入は必ず上の本家サイトから!現時点では残念ながら家電量販店などでは購入できません。Amazonなどで高額転売されているケースあり・保証も受けられず割高でメリットなし!
Rift以外に入手しやすいのは「HTC Vive」(2017年11月現在8万弱。やや高価だが入手しやすい。VRアトラクション施設などで良く利用されている。一番売れていたがCV1の値下げにより拮抗状態らしい)「Windows MR」(2017年11月現在5~6万。発売したてで情報が少ないが、比較的安価で入手が容易。日本語対応。まだあんまりおすすめしない…)など。
Riftのセットアップは英語ですが、たくさんのウェブサイトでセットアップ方法を記事にしているので、そちらを参照しながら臨めば引っかかる部分はあまりなく、スムーズ。
しかしながら発売当時と現在では同梱物が異なったりしているため、比較的新しめの記事を探すのがいいと思います。
こちらは発売当時の記事です。
現在は「Remote」と「XBOXコントローラ」は付属しておらず、「Oculus touch」が付属しています。
こちらは「touch」のセットアップについて。
また、Oculusには無料で楽しめるVRコンテンツがいくつか用意されています。
自作のコンテンツに向かう前に、プロが作った質の高いコンテンツを楽しむのもおすすめです。※英語のみのコンテンツが多いですが、ここで紹介したものは英語がそれほどわからなくてもなんとかなるレベルです。
VR初心者向け
「Oculus Dreamdeck」(一番最初に流れるVRコンテンツ詰め合わせ)
「First Contact」(touchのチュートリアル。かなりいい出来)
「Google Earth VR」(世界の上空を思う様飛び回れます)
「COCO VR」(「リメンバー・ミー」というディズニー・ピクサー映画の宣伝用コンテンツですがものすごく良く出来ていて超おすすめ!ガイコツキャラクターになって死者の街を散策できます)
「Bullet Train」(銃を手に取り敵を撃つゲーム。特徴的なのは、「敵の弾がものすごくスローに見えるので、避けたり取ったり出来る」というところ。ビジュアル表現が面白いし、判定も甘々で簡単にクリアできると思いますので是非!)
現在テスター募集中の「Play Animaker」も、MMD者には馴染みのあるTda式ミクさんが登場しており、ミクさんになったりミクさんを動かしたりして楽しめます。
PlayAniMaker : Miku ver.(テスター登録ページ)
Steam経由で無料ダウンロードできる「The Lab」も、とてもおすすめです。いくつかのミニゲームの詰め合わせ。個人的には矢を射るゲームが好きです。
有料のものでは、「AirTone」(全身使える音ゲー)「Rez Infinite」(映像が美しい音楽シューティングゲーム)「Tilt Brush」(空間に絵を描ける)あたりが個人的におすすめです。
音ゲー2つは難度も低く(高い設定にも出来ます)、ゲーム苦手な私でもハマって楽しめました。
「Tilt Brush」は絵心ある無いに関わらず、ただ落書きをするだけで楽しいです。
それと、これからUnityを使用して自分でコンテンツを作るにあたって、「Oculusで自作のコンテンツを見られる設定」にしましょう。
Riftの設定をする際に使用した、Oculusのアプリケーションを開きます。
ここでは「Store」でコンテンツを入手したり、入手したものを「Library」から見たり、その他セッティングなどが出来るようになっています。
右上の歯車アイコンから「Setting」を選択し、左の「General」のタブを選択。
一番上の「Unknown sources」をオンにします(デフォルトではオフ)。
これは、端的に言えば「ストアで流通してるやつだけじゃなく、野良で作られたアプリも見られるようにする」ということです。
これをオンにしないと、自分で出力したコンテンツが見られないことになりますのでご注意を。
※歯車アイコン「Setting」からは、「Devices」タブでRift本体やセンサーの接続状況を確認したり、「Devices」タブの右上「Configure Rift」から、センサーのセットアップ・touchのペアリング、床からの距離の計測などが出来るようになっています。
②CV1を使用できるPC環境を手に入れる
基本的には「高い性能のグラフィックボードを積んだWindowsPC」が必要です。
BTOパソコンを買えるショップなどでは「VR対応」と銘打って発売されている機種も多数あり。「VR Ready」などの表示がされています。
Oculus Rift CV1推奨環境は以下の通り。
グラフィックボード:NVIDIA GTX 970及びAMD 290 以上
CPU:Intel Core i5-4590 以上
メモリ:8GB 以上
映像出力:HDMI 1.3
USB端子:USB3.0が3つ(+USB2.0が1つ)
OS:Windows 7 SP1以降(できればWindows10で64bit推奨)
満たさない場合は視聴クオリティに問題が生じたり、そもそも見られなかったりするので注意。
基本的にはデスクトップでの使用になると思われますが、外でデモをしたいなどの理由からノートPCを購入したい場合は特に注意。ショップに確認するが吉。
(↑自分のPCが推奨スペックに達しているか確認できるツールがDLできる)
2017年11月現在で、最も安価なデスクトップモデルで10万円くらいから購入可能。
ノートPCの場合はそれより割高になるでしょう。
↑ここで紹介されてるLITTLEGEARは、持ち運びに便利な取っ手がついててコンパクトなので、デスクトップですがデモ用に使用してる人も居ます。
③Unityを入手する
Unityは現在広く使われているゲーム開発エンジンです。ゲームを作れるアプリケーションだと思ってもらえば差し支えありません(ちなみにポケモンGOやスーパーマリオランなどもUnityで作られている)。
Proでなければ無料で使用可能。趣味で使うなら問題ありません。
(※Personal(無料版)の使用条件は、個人:制作物の年間総収入$200,000以下/法人:$100,000以下であること。Unityでの制作物の売り上げが生じないホビー用途ならPersonalでOK、売り上げがあったとしても個人利用は2000万超えなければPersonalを使用してOKということになります)
↑上のページの「Personal(無料)」からダウンロード…ですが、同ページを下にスクロールして「詳細→過去のバージョンのUnity」からダウンロードするのがいいかも。
筆者は現在、比較的安定している「ver.5.6.2p4」をメインに使用しています。
Unity.5.xのタブの一番上から入手できます。
Unityを開くと「ぜんぶえいごだよおお…しかもなんかすっごいすっごいいっぱい色々あるよお…」となるかもしれませんが、「いっぱい色々あるやつ」を全部わかって仕事してるプロもそうそう居ないレベルなので、気にしないでください。わかるとこだけわかればいい。
④MMD4Mecanimを入手する
UnityにMMDモデルを読み込むためのプラグイン「MMD4Mecanim」を以下のサイトからダウンロードします。
スクロールしていって下の方にある「MMD4Mecanim Beta~」と書いてあるzipファイルのリンクから。
Unityを起動した状態でインポート(色んなやり方があるけど、とても簡単。同梱のチュートリアル基本編のpdfにやり方が書いてある)。
インポートが終了すると、Riftが既に接続されセットアップ済なら、とりあえずこれで「RiftでMMDモデルを見られる」状態になる。
この後の流れをざっくり書くと(本当にざっくりなので、後の記事でうるさいくらい解説します)
→MMDモデルとモーションを準備する(モーションはなくても読み込むだけでも出来る)
→モデルのフォルダにモーションデータ(vmdファイル)を入れておき、フォルダごとUnityの画面上にドラッグアンドドロップする
→Unity上でMMDモデル(+モーションデータ)を表示できる状態に変換する(この時モデルの利用規約が表示され、「規約に同意した上で使用してください」などのチェック項目にチェックを入れます)
→作業画面に変換したモデルを乗せる
→モデルと一緒に変換されたモーションデータを作業画面のモデルに乗せる(D&D)
→再生する
→ウゴイタアアア!!しかもRiftで見られる!!
(※UnityをVRモードにしていれば、出力しなくても作業画面上で再生すればVRで見られる)
という感じになっております。
よくある質問
・MMD動画をそのままVRで見られるの?
2Dムービーとしてアップロードされている映像を3Dで見ることは出来ません。出来たらすごい…
VR用のデータはVR用に作成する必要があります。
通常の2Dムービーと違い、体験者がどこを見るかわからない(360度どこでも見られる)のに見た場所すべてをレンダリングしないといけないので、非常に重いデータになります。なので、ハイスペックなPCが必要なのです。
・MMEは使えないの?
Unity上でデータを作っているので、当然ながらMMDのエフェクトは使えません。
Unityの中で使えるエフェクトは使えます。
パーティクル系などは、「パーティクルシステム」と呼ばれる機能を使い、自分で作ることが出来ます。
ただし、使用している変換プラグインは「MMD上で表示されるのと同じように表示する」ことになっているため、SSAOのようなエフェクトをUnity上で使用しても、モデルに反映されないことがあります(Unity上でシェーダ変更をすることで適用可能)。
オーバーレイや色調補正などに関しては、ある意味MMDよりかなり自由に設定することが出来ます。
参考:Unity - マニュアル: Post-processing スタック
また、照明の自由度はMMDより遥かに高いですが、もちろん度を越せば重くなります。
カスタマイズすれば、ビジュアル表現の自由度はかなり高いです。
(私はトゥーン系にもフォトリアルにもあまり魅力を感じないのでビジュアルはそっち系に寄せませんが、もちろんやろうと思えばそういう描写も出来ます)
・MMDのステージは使えるの?
MMD4Mechanimが「pmd/pmxモデルを変換するプラグイン」なので、pmd/pmxモデルならそのまま変換して使えます。xファイルは使用できませんが、pmd/pmxファイルやfbxファイルやobjファイルに出力し直せば使えることになります。
参考:Unity - マニュアル: 3D アプリケーションからモデルをインポートする方法
大きいファイルは当然重くなります。
(ちなみに、pmxファイルのステージのモーフなどは再現されないことが多いです…)
また、Unityには「アセットストア」と呼ばれるストアがあり、ユーザーが作った3Dモデルが無料/有料で販売されています。
私が現在作成しているデータの背景のほとんどは、こちらで購入した部屋や建造物のアセットを使用しています。
https://www.assetstore.unity3d.com/jp/
もちろん、自作できる方はガンガン自作するといいと思います。
空に関しては、MMDで言うところの「スカイドーム」と似たような「スカイボックス」というものがあります。
スカイドームを転用することはできませんが、こちらもアセットストアで様々な種類のものを入手することが出来ます。
ちなみに、パーティクルやエフェクト、テクスチャなどもこちらで入手することが出来ます。
あえて気をつけるとすれば、Unityのバージョンによって使えたり使えなかったりするものがあるので、そのあたりでしょうか(古すぎて使えない・新しすぎて使えない両方ある)。
・MMDモデルはちゃんと表示されるの?
だいたい良い具合に表示されますが、ものによってはテクスチャやtoonが反映されないなどの不具合が生じることがあります(※対応策あり)。
また、モーフなどもものによっては再現できない場合があります(通常の表情モーフなどはほぼ再現可能)。
どうしても解せない不具合が出る場合は、相談に乗れます。
MMD世界よりも少し小さく表示されるため、Unity内ではモデルの大きさを1.2~1.3倍くらいにするとちょうど良いです(モデルの大きさは簡単に変えられます)。
・視野角は調整できるの?
Riftの視野角は110度固定ですが、これは「映像の見える範囲」という意味で、MMDで言うところの視野角とは意味が違います。
なのでもちろんMMDでの視野角110度の状態で見えるわけではありませんが、やはりMMDユーザーからするとやや広角気味には見えます。体感で言えば40度くらいでしょうか。
では顔が歪んで見えるか…と言えば、VRでの見え方と2Dムービーでの見え方を同一に語ることはなかなか難しいです。
モデルの着ているアウターとインナーの隙間が広めに感じられたり、全体的に奥行きを強調された感じに映ります。
・モーションはちゃんと再現できるの?
現在かなり再現性は高いですが、完全に完全です!ということではないです。
IKがらみで引っかかることがたまにあります。腕IKとかは避けた方がいいかも…
・外部親機能は使えるの?
MMDじゃないので使えません。
剣を持ったアクションなどをやりたい場合、pmxエディタなどでモデルの手に剣をくっつけてしまう方をおすすめします。
・物理演算は?
MMDの物理の完全再現は無理です><
袖や裾がバサバサ系は辛いかもしれません…
MMMなどを使用して、モーションで物理焼き込みをしてしまえばOKです。
・モデルに触ることはできるの?
「触って質感を感じる」ことが出来るようになれば、すごいことになるでしょうね…
現在可能なのは「Riftに付属している左右コントローラー(Oculus touch)に左手右手を割り当て→コントローラを手にしてモデルに触れ、髪や服の裾を揺らす」といった感じになりますが、個人的にあまり魅力を感じないのと作業量が増えるので体験会用のデータにはやっていません。
やろうと思えば「任意の箇所に触れると表情を変える・モーションを変える」なども出来ます。
●YouTubeにアップされている360度動画とどう違うの?
違うところは色々ありますが、最も大きいのは「位置トラッキングがある/ない」でしょう。
RiftなどのハイエンドHMDは、センサーによって体験者の位置を把握します。
なので、目の前に居るモデルに近づこうとすれば近づけますし、自分が後退すればモデルは遠ざかります。
ですが、センサーなしのVRスコープで見た場合、体験者が動けば映像もそのままついてきてしまいます。
個人的には位置トラッキングがある方が好きなので、こちらの道には進みませんでした…
ただ、重いPCを持ち歩かなくてもよく、気軽にどこでも楽しめるという点では優れています。
・メガネをかけていても使える?
一応メガネは中に入ります。あまり横幅の広いものだと入らない可能性もありますが、ほぼ大丈夫かと…
最近の作業はずっとメガネでやってます。とは言え、コンタクトにした方が楽ではありますが…
ちなみに、ViveはRiftよりもゴーグル内のスペースが広く、メガネが中に入りやすいです。
のちのちはメガネなしでも使えるようにしてほしいところ。
(とりあえずこんなところですが、「こういうことが知りたい!」「これ書き方が間違ってない?」「これも書き足した方が…」などあれば是非お寄せください)