Unity+Oculus+MMD とりあえず書き留めておく場所

Unity+Oculus+MMD VRでキャラクターと遊ぶ

7. Unityの照明効果①(Directional LightとSkyBox)

今回からは、Unityの照明効果について説明します。

Unityの照明は…沼もいいところ…MMDとは比較にならないレベルの色んなことが出来ます。

しかしそれを全部説明など到底無理…

とりあえずのざっくり説明(それでも長い)をさせていただきます。

Unityの照明

Unityは何種類かの照明があります。

まず、最初からSceneに存在していた「Directional Light」をHierarchy上で選択してみましょう。

f:id:emifuwa:20171127103915j:plain

太陽のマークで示されているのが、Directional Lightです。

Directional Light

Unityの世界を照らす、基本となる照明です。MMDの照明に近いです。

他のオブジェクトと同じように位置情報を持っていますが、どこに位置していても光の強さは変わらず、設定した方向に均一に世界を照らします。Inspectorで光の強さの情報を変えることによって、明るさが変化します。

なので、邪魔だと思ったら方向だけ決めて遠くに置いておいてもいいし、細かく調整する時だけ近くに持ってきておいてもいいです。重要なのは方向だけです。

これがないと世界は暗い状態になってしまいますが、室内を表現する時などは、Directional Lightを削除して他のライト複数で表現したりもします。

f:id:emifuwa:20171127110122j:plain

※説明がわかりやすいようにInspectorをSceneの下に持ってきました

黄色いラインで構成された物体が、光の方向を表しています。

TransformコンポーネントのRotation(角度)を数値入力することによって、光の当たる向きを変えることが出来ます。

f:id:emifuwa:20171127110331j:plain

また、もちろんSceneビュー上の操作ツール「回転」を使用することでも、見た目わかりやすく光の当たり具合を調節することができます。

f:id:emifuwa:20171127110624j:plain

 

Directional Lightのパラメータ設定

では、Hierarchy上でDirectional Lightを選択し、Inspectorを見てみましょう。

様々な項目がありますが、重要なものだけを説明します。

(※Unityのバージョンによって、ここにある項目があったりなかったり別の名前だったりします…超重要なものは変わってないので、違ってたら自力で調べるなどしてください…)

f:id:emifuwa:20171127124310j:plain

Type照明のタイプの切り替えが出来ます。

※ここで照明を「SpotLight」に切り替えたとしても、Hierarchy上での名前は「DirectinalLight」のままです。気をつけましょう。

Color:色のバーの部分をクリックするとカラーピッカーが出現し、照明の色が変えられます。右にあるスポイトをクリックすると、画面上の色を拾ってくることが出来ます。

現在、光の角度とプロシージャル機能のために夕焼けのような画面になっていますが、この状態でColorをグリーンにすると、こんな感じになります。

f:id:emifuwa:20171127122600j:plain

Mode:ここではとりあえずRealtimeにしておいてください。

Intensity光の強さです。暗くしたい時は値を小さく、明るくしたい時は大きく。

Shadow Type:影の落ち具合を選べます。

画像でわかりやすくするため、Sceneに「Plane」というオブジェクトを追加しましょう。

Hierarchy上で右クリック→「3D Object」「Plane」です。

変な場所に出現したら、PlaneのTransformコンポーネントで、PositionのXYZの値を全部0にしてください。

全部ゼロを入力すると、床のように配置され、モデルの影が落ちます。

f:id:emifuwa:20171127125614j:plain

NoShadow:影が落ちません。

HardShadow:輪郭のはっきりした影が落ちます。

SoftShadow:輪郭がふわっとした影が落ちます(Hardより少し重い)。

この下のStrengthという設定で、影の濃さを調整できます。

Resolution:カメラのレンダリングの解像度のレベルを選べます。要するにキレイにするかどうかってことです。一番高いVery Highにしておきましょう。

SkyBoxについて

ここに映っている空は「Sky Box」という、MMDで言うところのスカイドームのようなものです。アセットストアなどで様々なものが入手できますが、ここで使用しているデフォルトのSky Boxには、Unity5から使えるようになった「procedural(プロシージャル)」という機能が適用されており、設定すると光の角度によって空や太陽の色が変化したりします。

これが設定されていないSkyBoxは、角度によって上のように空の色が変化したりはしません(自力で設定をすることは出来ます)。

Unityの照明効果とSkyBoxは密接に関わっているため、今回はSkyBoxについても説明していきたいと思います。

そのための下準備。また新しいウィンドウを増やします。

Lightingタブを設置

メニューバー「Window」→「Lighting」→「Setting」で「Lighting」タブが出てきます(もしかすると最初から表示されていることもあるかもしれません)

f:id:emifuwa:20171127115143j:plain

SkyBoxの差し替えや細かい設定はこのタブで行います。

使いやすいように、タブの名前のところをマウスで掴んで、Inspectorタブの横に仕舞っておきましょう。

f:id:emifuwa:20171127115521j:plain

普段はInspectorの方を前に出しておいて、必要な時に開く感じで。

Lightingの設定(EnvironmentLightingとSkyBox)

世界を照らす光がDirectionalLightのような直接光だけなら、真っ暗な部屋で窓を少しだけ開けると、光がまっすぐに入ってきて、空いた窓の形に四角く光が入るはずです。

ですが、実際は「照り返し」があるので、ふわっとその周囲も明るくなりますね。これが間接光です。

Lightingタブでは、直接の光源となる光ではなく、面から面へ光がどのように反射拡散するかをシミュレートした間接光(環境光)の設定を行います。 

Lightingタブを見ると、一番上に「Environment(環境)」と書かれていますね(Ambient Lightと表現している場合もあります)。

f:id:emifuwa:20171127152621j:plain

まず最初に「SkyBox Material」という項目があります。

ここにSkyBoxのマテリアルを入れることによって、Sceneに空の映像が適用されます。

最初に入っているのは「Default-SkyBox」というものです。

この時点ではSkyBoxは二種類しか入っていないので、それ以外のものはアセットストアで、最初は無料のものを中心に入手すると良いでしょう。

「テクスチャ&マテリアル」という分類で見つかると思います。

とりあえずこのあたりとか…

https://www.assetstore.unity3d.com/jp/#!/content/61217

https://www.assetstore.unity3d.com/jp/#!/content/21737

※パノラマ画像の素材を入手すれば、そこから自分でSkyBoxを作ることも出来ます(のちほど機会があれば説明します)。

インポートしたら、いつものように右の選択ボタンから指定するか、フォルダの中から直接D&Dしてもいいです。

※「Sun Source」の項目にDirectinalLightを設定しておくと、DirectinalLightのある位置に太陽が出ます。 

SkyBoxの下に「Environment Lighting」「Environment Reflection(反射)」という項目があります。

どちらも、Sourceという項目に「SkyBox」が選ばれています。

Reflectionは反射で、「反射で映り込むものを何にするか」の設定。

両方とも「SkyBox」にすると、SkyBoxの素材を利用した光源となり、自動でなんかいい感じにしてくれます。

それはそれでいいんですけど、ちょっと別の雰囲気を出したい場合。

「Environment Lighting」の方のSourceを「Gradient」「Color」にすると、だいぶ違うビジュアルになります。

f:id:emifuwa:20171127155538j:plain

「Gradient」にすると、空の光色、地平線の光色、地面の光色を設定できます。地面のグリーンの光がモデルの顎のあたりに照り返しているのがわかりますね。

「Color」は単色に設定できます。

Inspectorの方でDirectionalLightの色自体を変えると画像のようになるので、直接光(Light)と間接光(環境光)は違うのがわかります。

f:id:emifuwa:20171127160416j:plain

「Environment Reflection」の方はここでは詳しくやりませんが、例えば表面が鏡面のような物体にあらかじめそれ用の画像を設定したりするのに使います。

 

6. HeadLook機能の実装(作業編)

今回は、HeadLook機能の実装作業です。

まず最初に、HeadLook機能がどんな感じなのか「HeadLookController」に同梱されているサンプルSceneを見てみましょう。

Assetフォルダにある「HeadLookController」フォルダを選択すると、右に中身が表示されます。Unityアイコンの「HeadLookTest」というSceneファイルが入っているので、それをダブルクリックします。

f:id:emifuwa:20171124123052j:plain

もしその時点で最初に表示されていた自作のSceneが保存されていない場合は「保存しますか?」と聞いてくるので保存すると、「HeadLookTest」がSceneビューに表示されます。

見やすいようにSceneビューをマウスのスクロールホイールでズームすると、男性のモデルの目の前に黄色いボールがあるのがわかりますね。Hierarchy上では「Target Sphere」という名前になっています。

これを選択して、操作ツール「移動」のボタンを押し、三色の矢印を出現させ、ボールを動かせる状態にしておきます。

f:id:emifuwa:20171124123743j:plain

そのまま「再生」ボタンを押します。

再生状態のままでScene上で矢印をドラッグし、ボールを動かしてみると、モデルの視線がそれについてくるのがわかりますね。

f:id:emifuwa:20171124124041j:plain

これが目指すところになります。手順としては、

①モデルに「HeadLookController」機能を付ける。設定を調整する。

②カメラ(=体験者)に、Controllerのターゲットになる機能を付ける。

という感じになります。

もちろん、このテストのように、カメラではないオブジェクトをターゲットに設定すれば、モデルはそれを追いかけるようになります。

では、とりあえず元のSceneに戻りましょう。

Assetフォルダに作っておいた「Scene」フォルダから自作のSceneを選択し、ダブルクリックすれば、また表示が元のSceneに戻ります(もちろん、メニューバー→FileからSceneを指定して開いても構いません)。

では、まずモデルの設定から。

モデルにHeadLookControllerをアタッチする

Hierarchy上でモデルを選択すると、Inspectorにモデルのコンポーネントが表示されます。

今のところは「Transform」「Animator」「MMD4Mechanim Model (Script)」というコンポーネントで構成されていると思いますが、スクロールして一番下を見ると、「Add Component」というボタンがあるのがわかります。

f:id:emifuwa:20171124125912j:plain

コンポーネントを増やしていくことで、オブジェクトが色んな機能を持つようになっていきます。

モデルが任意のオブジェクトの方を向くために、「HeadLookController」コンポーネントをアタッチしましょう。

「Add Component」を押すと、このような選択ウィンドウが表示されます。

f:id:emifuwa:20171124130439j:plain

種類別に分類されている中から探してもいいのですが、今回は目当てのスクリプトの名前がわかっているので、上の検索ボックスにhe~とでも入力すれば、すぐに候補が表示されます。

f:id:emifuwa:20171124130722j:plain

見つけたら、それをクリックすれば、コンポーネントがアタッチされます。

f:id:emifuwa:20171124131029j:plain

※直接HeadLookControllerのフォルダを開き、「Script」フォルダからスクリプトをHierarchy上のモデルの上にD&Dすることでも、コンポーネントをアタッチすることが出来ます。

HeadLookControllerの設定

まずは、モデルの頭(頭ボーンと首ボーン)がオブジェクトを追うように設定します。

f:id:emifuwa:20171124181615j:plain

HeadLookControllerのコンポーネント「Segments」「Size」が「0」になっているところを、「1」と入力してください。

ここの数値を増やすと、設定項目の欄が増えていきます。

とりあえずは頭部分だけということで、1にしておきます。

1を入力してEnterを押すと、下に「Element 0」という入力欄が増えました。

f:id:emifuwa:20171124182456j:plain

上から順番に設定していきましょう。

「First Transform」「Last Transform」には、動かすボーンを設定していきます。

f:id:emifuwa:20171124183300j:plain

入力ボックスの右にある◎ボタンを押すと、選択肢が表示されます。

f:id:emifuwa:20171124185142j:plain

First Transform:joint_Neck

Last Transform:joint_Head

を、それぞれ指定してください(前についている番号は、モデルによって異なります)。

その下の数値は、とりあえず以下の通りに入力してください。

f:id:emifuwa:20171124185920j:plain

Threshold Angle Difference:5

Bending Multiplier:0.7

Max Angle Difference:5

Max Bending Angle:50

Responsiveness:5

なお、これらの設定に関する詳しい内容は、Someluさんの以下の記事が詳しいです。

qiita.com

設定が終わると、このようになっているはずです。

f:id:emifuwa:20171124190631j:plain

※一番下の項目「Effect」は、機能の効果の度合いを指しています。

例えばこちらの数値を0.8にしたりすると、HeadLookの効きが鈍くなります。とても愛想のいいキャラクターなら、1.2くらいに増やしてもいいかもしれません。

※モデルによってはHeadLookがうまくいかず、頭がぐるぐる回転してしまうことがあるのですが、そんな時に「Overrride Animation」にチェックを入れると、うまくいくかもしれません。

ターゲットになるオブジェクト(カメラ)の設定

次は、ターゲットになるオブジェクト(ここではMain Camera)に、ターゲットになるようなコンポーネントをアタッチします。

こりんさんのこちらの記事で紹介されているコードを使います。

framesynthesis.jp

まず、カメラにアタッチするためのスクリプトを作ります。

作成するスクリプトは、前回BlendShapeBlinkを仕舞っておくために作った「Script」フォルダの中に保存することにしましょう。

Assetフォルダの中のScriptフォルダを選択し、Projectビューの上で右クリックすると出るメニューから「Create」→「C#Script」を選択。

f:id:emifuwa:20171124205735j:plain

すると、こんな感じで新規のスクリプトファイルが出来ます。

f:id:emifuwa:20171124205852j:plain

とりあえず、ファイル名は「Target」にしておきましょう。

f:id:emifuwa:20171124210059j:plain

そして、「Target」をダブルクリック。

すると、MonoDevelopというアプリケーションが自動的に開きます。

Unityをインストールすると付いてくる、スクリプト編集エディタです。

f:id:emifuwa:20171124210514j:plain

 新規のスクリプトはこんな感じで表示されていますが、とりあえずこの中身を全部削除し、上の記事で紹介されているコードをそのままコピペします。

using UnityEngine;

public class Target : MonoBehaviour
{
    public HeadLookController controller;

    void LateUpdate()
    {
        controller.target = transform.position;
    }
}

f:id:emifuwa:20171124211824j:plain

全選択→

f:id:emifuwa:20171124211854j:plain

上記コードをコピーしてペースト→保存

f:id:emifuwa:20171124211959j:plain

 記号が抜けている…などのコピペミスがなければ、これで「Target」スクリプトは出来上がりです。

(※何か抜けがあったりした場合、スクリプトを保存した段階でUnity画面左下に赤いエラーが出ます)

 それでは、出来上がったスクリプトをMain Cameraにアタッチしましょう。

Hierarchy上のMainCameraを選択し、Inspectorの一番下「Add Component」から、Targetスクリプトを探してアタッチしてもいいですし、出来上がったスクリプトを直接オブジェクトにD&Dしてもアタッチできます。

f:id:emifuwa:20171124212905j:plain

追加できれば、Main CameraのInspectorはこうなっているはずです。

f:id:emifuwa:20171124213233j:plain

「Controller」という項目に、対象となるモデルを設定しましょう。

f:id:emifuwa:20171124213733j:plain

右の候補選択ボタンを押して、該当モデルを選びます。

または、Hierarchy上のモデルの名前を選択→「None」と書いてある欄に直接D&D…でも設定できます。

f:id:emifuwa:20171124214003j:plain

「Controller」の部分にモデル名を設定できたら、準備完了です。

再生ボタンを押して、Rift本体を色んなところに動かして試してみましょう。

設定が間違ってなければ、モデルの頭がちゃんとカメラの動きに応じて追いかけてくれるようになっているはずです。

f:id:emifuwa:20171124221203j:plain

頭がぐるぐる回転しちゃう!という人は、前述の通り

モデルのHeadLookControllerコンポーネントの一番下にOverride Animationにチェックを入れましょう。

※また、モーションがちゃんと再生される状態になっていない場合、うまく動かない時があります。モーション再生から設定し直しましょう。

※頭が横を向くモーションを作っても、基本的にはHeadLookに上書きされてしまいます。なので、そっぽを向いてほしい時にも常にこっちを向いた状態になってしまいます。

このあたりは、Unity上でモーションにレイヤーを作り、HeadLookのEffectの値を操作することによって調節が可能です(下の説明は自分メモ用なので、あとでもっとわかりやすく記事を立てるかもしれません)。

bvillage.hatenablog.com

HeadLookControllerのコンポーネントを増やす

現時点では、モデルの「頭」が体験者(カメラ)の方を向くように設定されていますが、これを「上半身」や「視線(目ボーン)」も動くようにしたいと思います。

まず、HeadLookControllerのコンポーネントを増やします。

最初にコンポーネントをアタッチした時と同じく、「Add Component」からスクリプト名を探して増やすか、スクリプトの入っているフォルダから、スクリプトを直接Hierarchy上のモデルの上にD&Dすることで、新しくコンポーネントを増やすことが出来ます。

手順通りSegmentsに1を入力してElements欄を作ります。

上半身の設定は以下の通り。

First Transform:joint_Torso

Last Transform:joint_Torso2

f:id:emifuwa:20171128111803j:plain

Threshold Angle Differenceなどの数値を変えると、かなり動き方が変わります。

キャラクターの性格などによって、ちょうどいい数値を探すといいでしょう。

qiita.com

 

次に、目ボーンの設定に挑戦してみましょう。

またコンポーネントを増やします。

右目左目の設定が必要なため、ここでもSegmentの数値は2にします。Elementが2つになりました。

①First Transform:joint_RightEye

 Last Transform:joint_RightEyeTip

②First Transform:joint_LeftEye

 Last Transform:joint_LeftEyeTip

f:id:emifuwa:20171128112715j:plain

※モデルに上半身2(Torso2)がない・目の先ボーン(EyeTip)がない…などの場合は、PMXエディタなどで付与した方が早い気がします。

※モデルの構造によってはHeadLookと相性が悪く、頭と上半身はいいけど目だけ上手く動かない・コンポーネント1枚分しか動かない…などの結果が生じることがあります。(経験上、ほとんどのモデルはコンポーネント1枚まではしっかり動きます)

もしコンポーネントを追加していくうちに、再生がうまくできなくなったり(再生ボタンを押すと同時に一時停止ボタンも付いてしまう、など)した場合、原因がどこなのか見極めるために、コンポーネントのチェックを外してみましょう。

f:id:emifuwa:20171128103139j:plain

すると、チェックの外れたコンポーネントは一時的に機能しなくなるため、どこが問題なのか切り分けがしやすくなります。

また、オブジェクト自体のチェックを外すと、そのオブジェクトは非表示になります。

f:id:emifuwa:20171128104005j:plain

便利な機能なので、覚えておきましょう。

5. HeadLook機能の実装(準備編)

前回までで、なんとなくですがUnity内の操作方法がわかったのではないかと思います。

次は、HeadLookControllerというスクリプトを使って、モデルに「いつも体験者の方を向く」機能を実装しましょう。

準備として、これから必要になるであろうものをいくつか先にダウンロードし、Unity内にインポートしておきます。

UnityPackageやスクリプトの入手

①UnityのStandardAsset

https://www.assetstore.unity3d.com/jp/#!/content/32351

Unityを使用する上で色々と役立つものが入っている標準的なPackageです。

アセットストアから入手できます(旧バージョンのものも現在まだストアにありますので、間違えないよう気をつけてください。リンク先はUnity5以上を使用している場合向けのPackageです)

アセットストアへは、普通にブラウザからアクセスしても構いませんし、Unityのメニューバーから「Window」→「Asset Store」でタブ表示することも出来ます。

f:id:emifuwa:20171123220043j:plain

タブ小さすぎて見にくい!と思ったら、タブ名のあたりを左ドラッグで掴んで、画面上の方にぐーっと押し上げると、独立タブにすることも出来ます。

f:id:emifuwa:20171123220111j:plain

もちろん他のビューもこんな感じで独立タブにすることが出来ますし、コンパクトにしまっておきたければどこかのタブの脇にでもドラッグすれば、その場所に置いておくこともできます。

アカウント・ログイン・インポート手順などに関しては、こちらの記事を参照のこと。

www.atmarkit.co.jp

 Standard Assetを正しくインポートできれば、Assetフォルダの中身はこんな感じになっていると思います。

f:id:emifuwa:20171123191852j:plain

こうやって様々なアセット(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」の方をクリックすると、ダウンロードページに飛びます。チェックを入れてダウンロードしてください。

f:id:emifuwa:20171124111020j:plain

ファイルをどこか任意の場所に展開しておき、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」に。

f:id:emifuwa:20171127142323j:plain

「Rendering」の「Anti Aliasing」「8×Multi Sampling」に。

 アンチエイリアスの精度を上げます。

「Shadows」の「Shadow Resolution」「Very High Solution」に。

「Other」の「Blends Weights」「4 Bonesに。

 特にpmx形式のモデル使用時には必ずこの項目にしてください。

f:id:emifuwa:20171127142417j:plain

以上の設定が終了したら、次回、ようやく実作業です。

 アセットストア使用上の注意 

※アセットストアでアセットを入手する場合、アセットの推奨バージョンに十分注意してください。

単純な3Dモデルだけのものの場合は問題ないことも多いのですが、インポートしたものの中に「Unity4では動くがUnity5では動かないスクリプトなどを含んでいた場合、インポートしただけでSceneの再生が出来なくなったりすることがままあります。

そんな時は必ずインポートの際に赤文字でエラーが出ます。原因となったファイルの場所や名前が表示されますので、それをUnity上で削除してしまえば元に戻ったりします。

推奨バージョンは「新しすぎても古すぎてもダメ」だったりするので、エラーが出て、当該スクリプトを削除しても再生が出来なくなってしまった場合は、原因となったアセットはとりあえずAssetフォルダから削除しましょう。

Projectのおおもとのフォルダについて

重要なことなのですが、UnityのProjectから何かを削除したい時は、必ずUnityの画面内で削除をしてください(Hierarchyビュー、Projectビュー、Assetフォルダなど)。

Projectが保存されているおおもとのフォルダを開いて削除をしてはいけません。かなり高い確率で、Projectが壊れます。

f:id:emifuwa:20171123214146j:plain

f:id:emifuwa:20171123214208j:plain

このモデルはもう使わないから…とか、このファイルは要らないよね?ということで、Projectの中身を整理したくなることはあると思うのですが、オブジェクトを足すのも削除するのも、全てUnityの作業画面内で行いましょう。

もとの保存場所は基本開かないくらいでいいと思います。ご注意を…

4. オブジェクトの移動とCameraの設定~出力まで

前回は、モデルをSceneに配置し、モーションを再生するところまで行きました。

今回は、カメラを配置してみましょう。

カメラの配置

まず、Sceneの中でモデルが見えやすいようにビューを調整します。

前にもやったように、Hierarchy上のモデルの名前をダブルクリックしてみてください。

これでモデルがSceneの真ん中に見えるようになります。

f:id:emifuwa:20171121132144j:plain

※前の状態によりけりで、ダブルクリックすれば必ず上の画像のような位置に来るわけではありません。自分の見えやすい位置にあればOKです。

Hierarchyを見ると、「Main Camera」「Directional Light」は既にこの場にあるはずですね(この2つの名前が表示されていない場合は、Hierarchy欄一番上、UnityアイコンのScene名のツリーを開いてください/グレーの▶をクリック)

どこにあるのか今ひとつわからないので、「Main Camera」をダブルクリックしてみましょう。

f:id:emifuwa:20171121132801j:plain

…どこ…( ;∀;)

最初のモデルの向きによっては、Cameraがどこにあるのかわかりにくいかもしれません。

Scene右上の「シーンギズモ」で、画面の向きを変えてみましょう。

f:id:emifuwa:20171121133743j:plain

XかYのコーンをクリックすると、どうやらCameraらしきものが見えてきました。

Sceneビューの上でマウスホイールを回すと、ズームイン・ズームアウトが出来るはずですね。それで、もうちょっと近づいてみましょう。

アップになるとこんな感じ。

f:id:emifuwa:20171121134344j:plain

これがUnityのカメラです。

カメラから2本伸びている白い線は、いまこのカメラが映している方向と画角を表しています。

現時点では、モデルのかなり後ろの方から、背中を映している状態です。

せめてモデルの正面に持ってこないといけません。

オブジェクトの移動

 オブジェクトの移動にはざっくり2つのやり方があります。

①Sceneビュー上にある操作ツール「移動」で動かす

②Inspectorビューの「Transform」コンポーネントで動かす

まず①からやってみましょう。

操作ツールはSceneビューの上にある、5つ並んだアイコンです。

f:id:emifuwa:20171121142912j:plain

ここで使うのは、左から二番目の「移動」ツール(ショートカットW)。

動かしたいオブジェクトをHierarchy上で選択し、このアイコンを押すと、Scene上に赤・黄・緑のそれぞれの方向に向けた矢印が出現します。

この矢印の上にカーソルを持っていき、ドラッグして引っ張るとオブジェクトが移動します。

f:id:emifuwa:20171121143002j:plain

実際に出てきた矢印を、モデルの方向に引っ張ってみましょう。

f:id:emifuwa:20171121143409j:plain

幾分移動し、Sceneビューに表示されたカメラのプレビューでも、下のGame画面でもモデルにだいぶ近づきました。

でもこれじゃまだ足りないですね。

見た目わかりやすいように、もっとSceneの真ん中にモデルを持っていきましょう。

ここでまたHierarchy上のモデルをダブルクリックしてSceneの真ん中に持ってきてもいいですし、操作ツールのてのひらアイコン(ハンドツールと言うらしい)を押して(ショートカットQ)、画面をドラッグして視点を移動しても構いません。

少しずつUnityの画面操作に慣れていきましょう。

さて、更に引っ張って、やっとモデルの前まで来ました。

f:id:emifuwa:20171121144245j:plain

モデルの体をすり抜けて移動し、映している方向は逆なので、右下のカメラプレビューにモデルが映っていません。

カメラの向きを180度変えないといけませんね。

ここで使うのは、「回転」ツール(ショートカットR)。

f:id:emifuwa:20171121144624j:plain

真ん中のアイコンです。

ここを押すと、Sceneに白い球と色のついたラインが現れますので、ラインのあたりをドラッグすればオブジェクトが回転します。

f:id:emifuwa:20171121144932j:plain

この状態から、黄色のラインのあたりを大きくドラッグすると

f:id:emifuwa:20171121145220j:plain

…だいたい…いい位置に来たでしょうか?カメラプレビューにも、Gameビューにも、正面にモデルが映っています。

ですが、キレイに180度ぴったりには回せていない気がします。

数値ぴったりにしたい場合は、

②Inspectorビューの「Transform」コンポーネントで動かす

こちらの方法を使っていきます。

まず、動かしたいオブジェクトをHierarchyで選択。

f:id:emifuwa:20171122093749j:plain

すると、Inspectorにオブジェクトの情報が表示されます。

どんなオブジェクトでも、一番上に「Transform」というコンポーネントがあり、ここでオブジェクトの位置・角度・大きさを数値で制御できます。

f:id:emifuwa:20171122093846j:plain

Position:オブジェクトの位置

Rotation:オブジェクトの角度

Scale:オブジェクトの大きさ

MMDで言うところのアクセサリファイル(xファイル)のような感じで制御できます。

モデルの大きさも簡単に変えられるので、PMXエディタ等でスケールを変更する必要はありません。

直接数値入力できる(※半角数字)のは無論のこと、それぞれの数値入力ボックスの「X・Y・Z」の文字の上にカーソルを重ねると、◁ ▷のマークが表示され、ドラッグで数値を動かすことが出来ます。

f:id:emifuwa:20171122095234j:plain

筆者はオブジェクトの移動はほぼこの機能と直接数値入力で行っており、①で説明した操作ツールでの移動は、画面で他のオブジェクトのバランスを見ながら移動したい時などに使用しています。

場面場面で使いやすい方を使ってみてください。

また、数値入力ボックスにはマイナスの値も入力出来ますし、現在の位置から「0.5だけ移動した場所に動かしたい」という場合などには「1+0.5」という数式入力も可能です。

さて、現時点でのカメラの位置・角度ですが、モデルの方を向いてきっちり180度ではなく、中途半端な数値で回転配置されてしまっているようです。

f:id:emifuwa:20171122102030j:plain

こういう場合はキーボードから直接数値入力した方が良さそうですね。

ボックスを選択し、Rotation(角度)のYの値を-180に入力し直します。

f:id:emifuwa:20171122102351j:plain

角度Yの数値が-180になり、カメラがモデルの正面を向くようになりました。

スケールの変更

今度は、モデルの大きさも変更してみましょう。

Unityでは、MMDモデルをインポートすると、実物よりやや小さく表示されます。

なので、Hierarchyに読み込んでからScaleを変更しましょう。だいたい1.2~1.3倍くらいの大きさにするとちょうどいいです。

Hierarchyでモデルを選択し、InspectorのTransformコンポーネントのScale数値を、手入力でXYZ全て「1.2」にしていきます。

半角英数入力モードで、Tabキーでボックスを移動していくと早いですね。

モデルの大きさが変わったことが、SceneやGameビューでも視認できます。

f:id:emifuwa:20171122103252j:plain

モデルを間近で見るには、Cameraはかなり近い位置に持っていく必要があります。

また、カメラの位置が低すぎるな?と思ったら、Main CameraのPositionのY数値(高さ)を1.4くらいにしてみるといいかもしれません。

視野角とカメラの描画距離

次は、Main Cameraの「Camera」コンポーネントを見てみてください。

f:id:emifuwa:20171122112121j:plain

様々な設定項目がありますが、とりあえず重要なのは3つ。

Field of ViewMMDで言うところの視野角

※デフォルトでは60になっていますが、30にすると良いでしょう。値が大きすぎるとモデルを眺めるには不向きですし、小さすぎると周囲の背景に影響が生じます。

Clipping Planes:カメラがどこまで描画をするかの距離

※デフォルトではNearが0.3になっていますが、この値ではモデルに近づいた際、カメラがモデルに埋まってしまい、モデルの中身が見えてしまいます。Nearは0.01が推奨値です。

Farは逆にどこまで遠くまで描画するかという数値です。デフォルトの「Far 1000」は1キロ先まで描画するということなのですが、FarとNearはあまり差があるとバランスが崩れるため、広大な空間を描画するのか、狭い部屋の中なのかなどを考え、数値を変えてみてください。

とりあえず、このくらいの数値にしてみました。

f:id:emifuwa:20171122114209j:plain

この辺まで来たら、また「再生」を押して、じっくりモデルを眺めてみるのもいいんじゃないでしょうか!

ちなみに、再生状態でもコンポーネントの数値を操作することが出来ます。

なので、VRで実際にモデルを見ながら数値をドラッグで操作する機能を使用し、モデルを近づけたり遠ざけたりして、ちょうどいい間合いを測ることができます。

ただし、注意すべきなのは「再生状態で動かした数値は再生を解除すると全て元の状態に戻る」ので、「このくらいの数値がちょうどいい!」と思ったら、その数値を覚えておいて、再生解除してからあらためて入力し直す必要があります。

こういったことがあるので、先の記事で「再生状態とそうでない状態を区別するためにインターフェイスに色をつける」ことを推奨しました。

もしくは、再生状態で数値を変えたあと、これでOK!と思ったら、該当コンポーネントの右上・歯車マークの上で右クリックをすると、コンポーネントの値をリセットしたりコピー&ペーストしたり出来るメニューが出てきます。

f:id:emifuwa:20171203135459j:plain

ここで「Copy Component」を選択しておいて、再生を解除し、再び歯車マークの上で右クリック→「Paste Component Values」を選択すると、再生状態でコピーしておいたコンポーネントがペーストされます。

再生状態での数値変更時は、そのまま解除してしまわないよう気をつけましょう。

buildの設定

とりあえず見られるものが完成したので、一つのデータとして出力してみましょう。

メニューバー「File」→「Build Setting...」で、build(出力)の設定画面が出てきます。

f:id:emifuwa:20171205094802j:plain

「Platform」で、どんなプラットフォーム向けにbuildするかを選択します。

ここでは、PC,MacLinux Standaloneを選択しましょう。

Target Platformにそれぞれの対象OS(ここでは「Windows」)を、Architectureは、ここでは「×86_64」を選択し(※ビルドに失敗してしまう時「×86」を選択するとうまくいく場合もあります)「Build」を押します。

保存用のダイアログが開きますので、保存場所を選択します。

Assetフォルダには保存できません。大きめのデータになりますので、余裕のありそうな場所に新しくフォルダを作り、そこに保存するのが良いでしょう。ここではローカルのDドライブに「DEMO1」というフォルダを作りました(※フォルダ名は半角英数で)。

いくつも違う種類のデータを作る予定があれば、「DEMO1」フォルダの中にまた新しいフォルダを1つ作り、Sceneがわかるような名前を(半角英数で)付けておくと良いでしょう。

Unityで何かを保存する時は、フォルダ名もファイル名も必ず半角英数にしてください。

f:id:emifuwa:20171205100308j:plain

「DEMO1」の中に「MIKU」というフォルダを作り、そこに「Miku」というファイル名で保存することにしました。exeという拡張子で保存されます。

出力は最初の一回がやや時間がかかり、修正した後同じ場面を出力する際はもう少し早くなります。

出力が終了すると、保存されているフォルダが自動的に開きます。

出力データを再生

f:id:emifuwa:20171205100701j:plain

フォルダの中のUnityアイコンのデータをダブルクリックすると、実行ファイルが起動します。

f:id:emifuwa:20171205101638j:plain

このようなダイアログが出てきますので、基本そのまま「Play!」を押して構いません。

Windowedにチェックが入っていれば、デスクトップに実行中の画面がミラーされます。

再生を中断する場合は、デスクトップでウィンドウの×をクリックするか、Escキーを押しましょう。

※中断がうまくいかない時は、Altキー+Escキーでうまくいくかもしれません。

※再生しようとすると「データがクラッシュしたよ!」のようなダイアログが出る場合は、保存場所が適切でないか、フォルダやファイル名が半角英数でないことが考えられます。 

3. Sceneへのモデル配置・モーション再生

前回、ついにモデルを変換することが出来ました。

今回はまず、メインの作業場所であるHierarchy+Sceneにモデルを持っていくことにします。

Sceneビューにモデルを表示する

Unityの画面内は、いろんなものをD&Dでファイル移動できます。

変換されたモデルを、そのままSceneビューもしくはHierarchyビューまでぐいっとD&Dしてください。

f:id:emifuwa:20171117174619j:plain

Hierarchyにモデル名が表示され、Sceneにモデルが表示されていることがわかります。

厳密に言えば、モデルを移動するというよりは、コピーするというか…

Assetフォルダという絵の具箱から、Hierarchyというパレットに色を乗せるような感じ…と筆者は思ってます。

 Sceneビューでの視点移動など

前回やったように、Hierarchy上のオブジェクト…ここではモデルの名前をダブルクリックすると、Sceneビューの中心にモデルが来ます。

自分から見にくい位置にモデルが居るなあ…と思ったら、少し視点を変えてみましょう。

まずSceneビュー右上にある「シーンギズモ」で表示方向を変更します。

f:id:emifuwa:20171117180403j:plain

X(赤)Y(青)Z(緑)は、MMDユーザーならごく見慣れたものだと思います。

それぞれの色の付いたコーン(円錐)の部分をクリックすると、方向がぐるぐると変わります。

そして、シーンビューの左上には、丸っこい手のひらのようなアイコンがあります。

ここを押した状態でScene内を左ドラッグすると、視点を移動することが出来ます。

(ショートカット:Q)

f:id:emifuwa:20171117181419j:plain

MMDで言うところの「右上の緑の十字架」と似たようなやつ…(あっちはアイコンドラッグで、こっちはボタン押してドラッグですが)

また、Sceneビューを右ドラッグすると、視点が回転します。

これはMMDとまったく同じですね。

Sceneビュー上でマウスホイール回転→ズームイン・ズームアウトMMDと同じ。

最初はMMDと勝手が違ってかなり使いにくいと思いますが、

モデルをダブルクリックで真ん中+手のひらで移動+ホイールでズーム+回転はギズモ…この辺に慣れてくれば、問題なく使えるようになります。

アニメーションを再生する

変換されたモデルは、モーションデータの最初のポーズを取っていると思いますが、まだ再生ボタンを押しても動きません。

アニメーションを再生するために、「Animator Controller」を設定しましょう。

まずHierarchy上でモデルの名前を選択すると、画面右の「Inspector」にモデルのプロパティが表示されます。

f:id:emifuwa:20171118100931j:plain

いくつかのパネルで構成されていますが、これらのパネルをコンポーネントと呼んでいます。

モデルの位置情報(Transform)や、MMD4Mechanimによって変換されたモデルであることがわかります。

その中に「Animator」というコンポーネントがありますね。

ここの「Controller」という箇所、今は「None」となっていますが、ここに、このモデルを動かすための「Animator Controller」を設定します。

やり方はいくつかありますが、一番簡単で手っ取り早い方法を紹介します。

まず、Project内・Assetsフォルダの中にある、おおもとの変換後モデルの方に注目します。 

水色のキューブのアイコンの左横にある、グレーの「▶」をクリックしてツリーを開くと、その中には変換済のモーションデータが入っていることがわかります(ここでは「1基本モーション」という名称)

f:id:emifuwa:20171118101108j:plain

このモーションをクリックして選択し、そのままInspector上のモデルの名前めがけてD&Dします。名前の上に乗っける感じ…

f:id:emifuwa:20171118101335j:plain

設定に成功すると、InspectorのAnimatorコンポーネントの「Controller」に、モデルと同じ名前の「Animator Controller」が設定されているのがわかります。

少しわかりにくいのですが、フォルダの中にAnimatorControllerファイルが自動生成されていますね。

f:id:emifuwa:20171118164054j:plain

では、モーションがちゃんと設定されているか、ほかの場所からも確認してみましょう。

現在、このUnity画面には、まだ登場していないタブがいくつかあります。

それらを画面に追加していきます。

タブの追加

画面左下、Gameビュータブの名前が表記されているあたりにカーソルを持っていき、右クリックして出て来るメニューから「Add Tab」→「Animation」を選択します。 

f:id:emifuwa:20171118102703j:plain

すると、Gameビューの横に「Animation」というタブが表示されました。

f:id:emifuwa:20171118102923j:plain

モーションのファイル名も確認でき、モーションキーらしきものも見えます。

(※ちなみに、ここでキーをいじってモーションを変更することはほぼ不可能なので、ここで修正することはあきらめてMMDで作り直しましょう)

必要ない時はGameビューのタブをクリックして、そちらを表示させておいて構いません。

あともう一枚追加します。

以前は右クリック→Add tabで追加できた気がするのですが…このバージョンで確認したらメニューになかったので、別の場所から。

メニューバー→「Window」→「Animator」を選択してください。

f:id:emifuwa:20171118103456j:plain

すると、たぶんSceneタブの横に「Animator」タブが出来ていると思います。

f:id:emifuwa:20171118103808j:plain

中に、モーション名が表記された黄色いかたまり(ステートと呼ばれます)があるのがわかりますね。

ここは複数のモーションデータをくっつけたりなんだかんだする場所なのですが、とりあえずは「こういうところがあるんだな~」程度で構いません。普段は使わないので、Sceneタブの方をクリックしてSceneを表側に表示しておいてください。

Hierarchyタブでモデルを選択した状態で、Animatorタブで黄色いステートが表示されていなかったら「モーションが登録できていない」ということです。

Animatorタブに黄色いステートもあるし、Animationタブにもキーが表示されているので、モーションはちゃんと登録できているようです。

再生ボタンを押してみましょう。

f:id:emifuwa:20171118110149j:plain

モーションを登録できていれば、問題なく動いてくれるはずです。

「AnimatorControllerを設定する」のが一番忘れがちなのでご注意を。

現時点では、カメラがまだ遠くにある上にモデルが向こうを向いているので、Riftで覗いてみても「遠くにいるな~」って感じですよね…

とりあえず、ProjectとSceneをこの辺で一回保存しておきましょう。

音声の追加

ダンスモーションを適用したので、音声も入れたい!という場合。

まず、音源ファイル(wavでいいと思います)をProjectに読み込みます。
D&Dで構いません(ここでは、とりあえずモデルのフォルダの中にD&Dしました)。

すると、オレンジ色の波形のようなアイコンのファイルが読み込まれました。

f:id:emifuwa:20171206101940j:plain

ダンスモーションに合わせたい場合は、モデルを選択し、MMD4Mechanimのコンポーネントから「Anim」タブの中の「Audio Clip」というところに音源ファイルをD&Dします。

ここに音源ファイルを設定すれば、モデルは自動的に音源に合わせて踊ってくれる…はずなのですが…

稀に、モーションと音源がズレてくることがあります。

キー数の多いモーションなどで、たまに生じる不具合なのですが…対策としては

MMD側で不要キー削除を行ったモーションを使う

②音声ファイルの方を加工する

といった感じになります。

それ以外の音声の追加や、基本的なUnityの中での音源の扱いなどに関しては、いくつかリンクをはっておきますのでそちらをご参照ください。

その1 Unityのサウンドの根っこ

[Unity] Unity×音についてざっくりまとめ - Qiita

※なお、配布されているダンスモーションにもたいてい利用規約が存在します。そちらをよく確認の上ご使用ください。

動かしてみて、モーションを修正したくなったら(モデルの再変換)

実際にVRで動かしてみると「ああ~ここのモーションはもうちょっとこうした方が…」っていうのが必ず出てくると思います。

Animationタブでモーションキーらしきものが出てきますが、あれをどうにかしてモーションを修正するのは無理なので、諦めてMMDでモーションを作り直してください。

保存の際は、最初のモーションと区別出来るように、またUnity上で判別しやすいような名前をつけていくといいと思います(日本語でOKです)。

モデルに新しいモーションを入れて変換し直す必要が出て来るのですが、この際にHierarchy上のモデルは削除しないでおいてください

なぜなら、「おおもとを削除しても、Hierarchy上から削除しない限り、このモデルがここにあったという情報がまだ残っているから」です。

f:id:emifuwa:20171118111838j:plain

今後作業をしていく上で、Inspectorでモデルの位置や大きさ、向きを調整したり、モデルに必要なコンポーネントをどんどん足していくことになると思います。

Hierarchy上からモデルを削除してしまうと、それらの情報は残りません。

また一から全部設定し直しです。めんどくさいです。

ですが、Hierarchy上では削除せずおおもとのモデルだけを変換し直せば、完全に同じモデルを変換し直した場合に限り、自動的にScene上に同じ状態で現れてくれます。

なので、モーションを変更するためには、とりあえず

MMDで新しいモーションを作成する

→AssetフォルダにD&Dする

→MMD4Mechanimファイルを選択し、新しいモーションを入れ、Processを押す

→新しいモーションを含んだモデルが生成される

という流れになります(その先もあります)。

では、新しいモーションをAssetフォルダにD&Dしたとして、その先を解説します。

f:id:emifuwa:20171118114554j:plain

上図の通りに新しいモーションを入れてProcessを押すと、変換後モデルが2つに増えるわけではなく、以前作成した変換後モデルの中身が自動的に新しいモーションに変わります

一見なにも変わっていないように見えますが、モデルのツリーを開いてみると、モーション名が変更されているのがわかります。

f:id:emifuwa:20171118120514j:plain

ですが、このまま新しいモーションを再生できるわけではありません。

Hierarchy上でモデルを選択し、さきほど追加した「Animatorタブ」をクリックして見てみると、モーション登録は以前の「1.基本モーション」のままになってます。

f:id:emifuwa:20171118121049j:plain

モーションを再登録する必要があります。 

まず、一番最初にモーションを登録する時に自動生成された「AnimatorController」をフォルダの中から削除してしまいます。

f:id:emifuwa:20171118170402j:plain

同じようなアイコン・同じような名前が並んでわかりにくいですが、変換後モデルの下にあるファイルです。

フォルダの中にある方を選択して削除してしまえば、InspectorのAnimatorコンポーネントに登録されている方も消えます。

f:id:emifuwa:20171118170959j:plain

あとは、一番最初にモーションを登録したのと同じ手順を繰り返します。

変換後モデルのツリーを開いた中に入っている新しくなったモーションを、Hierarchy上のモデルにD&Dします。このページの「アニメーションを再生する」の項目で説明していますね。

そうすれば、また新しくAnimatorControllerが自動生成し、モデルに新しいモーションが登録されます。

ですが…これでも何かうまくいかない時があります。

「新しいモーションにしたはずなのに新しい動きが反映されてない…」

「表情モーションだけ消えちゃってる…」

なんてことが、ままあります。

こんな時は慌てず騒がず、Hierarchy上のモデルを選択し、モデルのInspectorを表示させます。

モーションがモデルにちゃんと登録されているかどうか確認する箇所は、AnimatorControllerが適切に設定されていることと、「Anim」タブ内にanimファイルがちゃんと登録されているかどうかです。

f:id:emifuwa:20171118172214j:plain

Inspectorの「MMD4Mechanim Model(Script)」というコンポーネントがあります。

ここでモデルの様々な設定ができるのですが、ここでは「Anim」をクリックします。

Animタブの中を見てみると、ここに設定されているanimファイルが、前のままになっているのがわかりました。

(よくあるんだこれが…)

f:id:emifuwa:20171118173115j:plain

animファイルは、モーション変換時に自動生成されるファイルです。

f:id:emifuwa:20171118173633j:plain

フォルダの中にありますので、それを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ファイルのリンクから。

Stereoarts Homepage

f:id:emifuwa:20171117101644j:plain

ダウンロードする場所はどこでもいいですが、中にはチュートリアルのpdfも入っているので、すぐに参照できる場所に置いておくのが良いでしょう。

ダウンロードしたフォルダを開くと、中にUnityアイコンのパッケージが入っています。

「MMD4Mecanim」(Standardじゃない方)をダブルクリック・もしくはUnity画面のProjectビューの中の「Assets」フォルダに直接D&Dします。

(メニューバー「Assets」→「Import Package」→「Custom Package...」からでもOK)

f:id:emifuwa:20171117104303j:plain

するとPackageの内容が表示されたウィンドウが表示されますので、「Import」を押せば、インポートが始まります。

インポートが終わると、ProjectビューのAssetsフォルダの中に「BulletXNA」「MMD4Mechanim」の2つのフォルダが増えているのがわかりますね。

f:id:emifuwa:20171117104915j:plain

この2つのフォルダに関しては、何か特別な用がない限りは何もいじらず(※中身の移動やフォルダ名の変更などをしない)放っておいてください。うっかり削除などをしてしまうと、当然使用できなくなってしまいます。

 MMD4Mechanimのインポートが終わったら、これでもうUnityにMMDモデルを読み込める状態になっています。 

MMDモデルを読み込む 

いよいよMMDモデルを読み込みます。 

※なお、MMDモデルは、当たり前ですが「Unityに読み込むことを前提に作られていない」です。

また、「Unityに読み込むこと・VRで鑑賞すること」などを許可していないモデルもあります。

使用する前には、必ずモデルに同梱のReadMeなど、取扱に関する規約を確認してください。よろしくお願いします。

 

MMDモデルとモーションを準備する

まずMMDモデルを用意します。モーションはvmd形式のものを用意します(モーションがなくても読み込み可能)。

今回は、「Tda初音ミク・アペンドVer1.00」モデルを読み込み、モーションは筆者がMMDで作成したものを使用します。

モデルはダウンロードして解凍した、フォルダそのままの状態です。

②UnityにモデルをD&Dする

MMDモデルを、フォルダごとProjectビューのAssetsフォルダにドラッグ・アンド・ドロップします。

f:id:emifuwa:20171117112648j:plain

モーションはモデルフォルダの中に同梱しておいても良いですし、あとから単体でAssetsフォルダの中に直接D&Dすることも出来ます

また、音楽ファイルや画像ファイルなども、このようにAssetsフォルダに直接D&Dして使用することが出来ます。

筆者は、同梱するにしてもあとから入れるにしても、モーションを見失わないよう該当のモデルフォルダの中に入れておくようにしています。

(なにせUnityは字が小さい!上にデータの数がたくさんあって、目当てのものを見失いやすいのです…)

 

さて、問題なく読み込めれば、Assetsフォルダの中にモデルフォルダがそのまま入っているのがわかりますね。

f:id:emifuwa:20171117112948j:plain

モデルをD&Dしたらエラーが表示された時

さて、稀にですがモデルの読み込みに問題が生じることがあります。

例えば「テクスチャやtoonが読み込めないエラー」

このようなエラーが生じた場合、モデルフォルダをUnityにD&Dした時点でUnityの下部にエラーメッセージが表示されます。

f:id:emifuwa:20171117114635j:plain

エラーメッセージをダブルクリックすると、メッセージを表示するConsole画面が現れます。

f:id:emifuwa:20171117115053j:plain

(※モデル名の部分を白く塗りつぶしています)

エラーメッセージを読むと、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フォルダの中のモデルフォルダをダブルクリックすると、最初はフォルダの中身がこんな感じで表示されると思います。

f:id:emifuwa:20171117124527j:plain

アイコン表示が大きすぎて使いにくいので、リスト表示に変更しましょう。

Projectビューの右下にあるスライダーを左右に動かすことで、フォルダ内のアイコン表示の大小を調節します。

フォルダ内のファイルの視認性が高くなるので、一番アイコンが小さい状態にします。

f:id:emifuwa:20171117125128j:plain

また、各ビューの大きさも、境目のあたりを左ドラッグすることで広さを変えられるので、その時々で都合のいいよう調節しましょう。 

MMDモデルの変換

読み込んだモデルフォルダの中にある、自動生成されたMMD4Mechanimファイルを選択します(もともとpmx/pmdファイルだったものです)。

Inspectorビューには、モデルファイルに同梱されている利用規約が表示されます

f:id:emifuwa:20171117135909j:plain

利用規約を確認後、利用に問題がなければ、一番下までスクロールし、チェック欄を確認・チェックを入れ「同意する」をクリックします。

f:id:emifuwa:20171117135840j:plain

すると、Inspectorビューがvmdファイルを登録・変換画面に遷移します。

モーションを準備してある場合は「VMD」の「None(Object)」と書いてある場所に、直接ファイルをD&Dします

f:id:emifuwa:20171117170352j:plain

モーションが登録されると、「VMD」のところにモーション名(ここでは「1基本モーション」という名前のファイル)が表示されます

間違えて登録してしまった場合は、vmd欄左の「-」のマークを押すと消えます。

f:id:emifuwa:20171117171311j:plain

モーションの登録が終わったら、「Process」のボタンを押すと、変換が開始されます。

f:id:emifuwa:20171117171808j:plain

こんな感じに処理が走ります。しばらく待ちましょう。

モーションが長かったりすると、やや時間がかかることもあります。

無事変換が終了すると、モデルのフォルダの中に、水色のキューブの形をしたアイコンが増えています。

f:id:emifuwa:20171117172904j:plain

(※ちなみに、フォルダ内のアイコン表示を大きくした状態だと、以下のようにモデルの姿が映ったものになります)

f:id:emifuwa:20171117172846j:plain

これが、Unity表示用に変換されたMMDモデルです。

また、上の方には「1基本モーション」という名のvmdファイルがanim形式のファイルに変換されたものもあります。

f:id:emifuwa:20171117173044j:plain

右下の画面を見ると、どうやらテクスチャはちゃんと反映されているようです。

(※この時点でUnity画面左下にメッセージが出ることがありますが、ちゃんと変換されていたらとりあえず無視してください。赤い「!」メッセージは何かしらまずいですが、白い「!」メッセージは「処理終わったよ~」的なアレだったりします)

 

では次回、変換が終わったモデルを遂にSceneビューに表示させてみましょう。

 

1. Unityの画面構成

今回は、Unityをダウンロードした状態から始めます。

使用しているバージョンは5.6.2p4です。

(p4はパッチです。パッチはここからダウンロードできます)

 

Unityのアカウントを取得し(この部分の説明は省略しますが、アカウントとパスワードはのちのち必要になるので、忘れないよう控えておいてください)、「新規Projectを作成」するところからです。

新規Projectを作成する

Unityを起動すると、下のようなダイアログが出てきます。

(もしくは、画面上部メニューバーの「File」→「New Project」を選択します)

f:id:emifuwa:20171116102705j:plain

①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の画面が開きます。

こちらが初期画面。

f:id:emifuwa:20171116115657j:plain

レイアウトが少し使いにくいので、変更します。

f:id:emifuwa:20171116120116j:plain

画面右上の「Default」をクリックし、「2 by 3」を選択。

f:id:emifuwa:20171116121939j:plain

レイアウトが変更されます。

また、画面上部のメニューバー「Window」→「Layout」からも変更が可能です。

Unityのレイアウトはタブを引っ張って色んな場所に持っていくことができ、かなり自由がきくので、おいおい自分の使いやすい形に変えていくのが良いでしょう。

とりあえず、今後の解説はこのレイアウトで行います。

Unityの画面構成 

Unityの画面は、おおまかに以下の5つに分けられます。

f:id:emifuwa:20171116125612j:plain

①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」という名前になっていますが、アイコンの左部分のグレーの▶を押し、ツリーを展開すると

f:id:emifuwa:20171116150711j:plain

「Main Camera」「Directional Light」というオブジェクトが、このSceneの中に最初から存在していることがわかります。

「Main Camera」はそのまま、VRにおける私たちの目となるカメラです。

Sceneビューの下のGameビューに映っている映像は、そのカメラから映した映像になります。

「Directional Light」は、Unityの世界を照らす基本になる照明です。MMDのデフォルトの照明とだいたい同じ役割です。

クリックして、Hierarchy上の「Main Camera」を選択します。

また、Hierarchy上でオブジェクト名をダブルクリックすると、Scene上でそのオブジェクトが真ん中に来ますので、やってみてください。

広い空間の中でオブジェクトを見失った時などに便利です。

f:id:emifuwa:20171116152725j:plain

そして、オブジェクトを選択したことによって、今まで空白だった画面一番右の⑤Inspectorビューに、選択したオブジェクトのプロパティが表示されました。

Inspectorビューでは、選択したオブジェクトの要素が表示されることに加え、要素を追加したり、編集したりすることが出来ます。

AviUtlを使ったことがある方には、馴染みのあるインターフェイスかもしれません。

 

五種類のビューの主な特徴がわかったところで、試しに「Main Camera」「Directional Light」を同時に選択してみましょう。

※Shiftキーを押しながらで、複数選択が可能です。

f:id:emifuwa:20171116173602j:plain

選択した状態で右クリック→出たメニューから「Delete」を選ぶ

…もしくは、選択した状態でDeleteキーを押すのでも構いません。

f:id:emifuwa:20171116154210j:plain

すると、世界から光が消えたことで空と地面の色が変わります。

また、カメラが消えてしまったので、Gameビューには何も映らなくなります。

この状態のままだと困るので、ショートカットのCtrl+Zで、削除する前の状態に戻りましょう。

また、Hierarchy上の空いたスペースで右クリックすることによって、球形や平面のオブジェクトや、カメラやライトをSceneに簡単に追加することができます。

f:id:emifuwa:20171116154819j:plain

こちらも是非試してみてください。

このように、Unity上では、おなじみの右クリック、デリート、アンドゥ、コピーアンドペーストあたりは、それほど悩まずに出来るのではないかと思います。

 

さて、この状態でもうUnityの世界をVRで見ることが出来るのでしょうか?

Oculus Rift CV1を既に接続し、使える状態にしている方は、ちょっと試してみましょう。

その前に、UnityがVRモードになっているのか確認します。

f:id:emifuwa:20171116160741j:plain

Unity画面上部メニューバー「Edit」「Player Setting」「Player」で、Inspectorに表示された部分を下にスクロールし、「Other Setting」「Virtual Reality Supported」という項目にチェックが付いているかどうか確認します。

f:id:emifuwa:20171116160034j:plain

また、下の「Virtual Reality SDKs」という部分に「Oculus」という名前が表示されていることも確認してください。

ついでにですが、「Color Space」という項目。

初期設定では「Gamma」になっていますが、「Linear」に変えておいてください。

f:id:emifuwa:20171203123510j:plain

※これは、Sceneの明るさをなるべく正しく表示するための項目です。ガンマ補正をするかしないかということなのですが、なぜか「Gamma」はガンマ補正しない・「Linear」はガンマ補正する…なので、Linearにしておきましょう。

 

これで、もうUnityの世界をVRで見ることが出来るようになったはずです。

Unity画面上部の真ん中あたりにある、▶のマークの再生ボタンを押し、Oculusをかぶって見てみましょう。

f:id:emifuwa:20171116161324j:plain

何もオブジェクトがないと、空と地面しか映らないので、Hierarchy上で右クリック→3DObject→Cube あたりにして、何か置いておいてもいいかもしれません。

ちなみに、再生モード解除は、もう一度再生ボタンを押してください。一時停止ボタンはありますが、停止ボタンはありません。

 

さて、上の画像では、再生時にUnityの画面の全体の色が薄い緑色に変わっています。

今後作業をしていく上で、今は再生中なのか・再生中でないのかをパッと見でわかりやすくした方が便利だからです。

デフォルトでは再生時もそうでない時も色が変わらず不便ですので、今の時点で「再生中は全体の色が変わる」ように設定し直しておきましょう。

Unity画面上部メニューバー「Edit」→「Preferences...」にすると、「Unity Preferences」のダイアログが表示されます。

f:id:emifuwa:20171116162447j:plain

左のバーで「Colors」のタブを選択し、「Playmode tint」の色のついたバー部分をクリックすると、カラーピッカーが表示されます。好きな色を選びましょう。

また、見ていただけるとわかる通り、その他の部分も色を好きなように変更できます。

慣れてきたら、自分の好きな色にカスタマイズしてもいいかもしれません。

 

以上、おおまかなUnityの主な画面構成の説明でした。

 

最後に、いまSceneビューに表示されている「Scene」を保存しておきましょう。

Unity画面上部メニューバーから「File」→「Save Scenes」で、保存のダイアログが開きます。

f:id:emifuwa:20171116163024p:plain

 保存場所は初期設定では「Assets」のフォルダ内になります。

ここには今後モデルフォルダやらなんやらたくさんのデータが保存されていくはずなので、あまりとっ散らかっていると使いにくい+あとからあまりデータを移動したくない…ので、私の場合はそのまんま「Scene」というフォルダをここに作成し、そこにSceneデータを保存しています。参考までに。

それと、最初の方でも注意しましたが、名前を付ける際は必ず半角英数字で

 

とりあえずここでは、アセットフォルダの中に「Scene」というフォルダを作成し、その中に「First」という名前でSceneを保存しました。

f:id:emifuwa:20171116165405j:plain

そうすると、Hierarchy上のSceneの名前が「First」に変わり、Projectの中のアセットフォルダに「Scene」フォルダが出来ているのがわかります。

そして、Projectも保存した方がいいですね。こちらもメニューバーから保存できます。

Scene/Projectの保存範囲についてはこちらをご参照ください。

docs.unity3d.com

※この記事の一連の流れをid:izm_11さんが動画にしてくださいました。実際のUnityの挙動がわかりにくいという方はこちらをご参照ください!

www.youtube.com

お疲れ様でした。

次回はようやく、MMD4Mechanimのインポート+モデルの読み込みの予定です。