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

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

Unity+Oculus+MMD 講座記事一覧

UnityにMMDモデルを読み込み、VRコンテンツを作るための記事一覧

MMDユーザー向け・Unity初心者向け

0. 環境の構築と、MMDユーザーからのよくある質問 

導入編。Rift購入+PC準備+Unity入手~・MMDユーザーからのよくある質問。

1. Unityの画面構成 

各ビューの説明と、保存についてなど。

2. MMD4Mechanimのインポート・モデルの読み込み

モデル読み込みまでと、読み込み時にエラーが出た場合の対処法。

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

モーションの再生と、モーションを修正したくなった時の差し替えのやり方。

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

Transformコンポーネントと操作ツールでのオブジェクト移動・カメラの設定。出力。

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

Standard Asset・HeadLookControllerなどのインポート。

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

HeadLookControllerのアタッチ・Targetスクリプト作成。

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

DirectinalLightとSkyBox、Lighting(EnvironmentLight)の設定。

8. Unityの照明効果②(PointLight・SpotLight・AreaLight)

PointLight・SpotLight・AreaLightの説明+親子とグループ化。

9. Post-Processing Stackの使い方① 

Post-Processing Stackの導入と設定。Fog、Ambient Occlusion、Screen Space Reflection。

10. Post-Processing Stackの使い方②

DoF、Eye Adaptation、Bloom、Color Grading、Grain、Vignetteなど。

11. MMDモデルのシェーダを変更する 

MMDモデルのシェーダをStandardに変更する。

11. MMDモデルのシェーダを変更する

前回ポストエフェクトについて解説しましたが、今回はシェーダについて。

MMD4Mechanimを使用してUnityにMMDモデルを読み込むと、Unity上でなるべくMMDと同じように表示するため、Unityのスタンダードではない独自のシェーダを身にまとったモデルになります。

MMDと同じように表示される反面、Unity上でポストエフェクトを乗せても影響を受けず、ビジュアルが変わらないことがある(特にSSAO系)といった弊害があります。

また、MMDで言うところのシェーダ系エフェクトをモデルに適用し、リアルっぽいライティングにしたい…という方も居ると思います。

そんな時、モデルに適用されているシェーダをUnityのスタンダードなものに差し替えるということが出来ます。

f:id:emifuwa:20171205162258j:plain

モデルのマテリアルとシェーダ

Unityのレンダリング「マテリアル」「シェーダ」「テクスチャ」によって行われています。

UnityにMMDモデルを読み込むと、読み込んだモデルフォルダの中に「Materials」というフォルダが増えているのがわかりますね。

マテリアルとは、オブジェクトの表面をどう描画するか、どのテクスチャを参照するか、どのような質感にするか(シェーダ)などの要素が詰まったものです。

モデルフォルダの中の「Materials」フォルダを開いて、マテリアルを選択してみましょう。

f:id:emifuwa:20171205152045j:plain

どのテクスチャが指定されているかなどがここから読み取れます。

一番上の「Shader」と書いてあるドロップダウンリストをクリックしてみましょう。

f:id:emifuwa:20171205152653j:plain

MMD4Mechanim専用のシェーダが指定されています。非常にたくさんの種類の中から、モデルのビジュアルを再現するために適したシェーダが選択されています。

では、このシェーダを「Standard」に変更してみましょう。

f:id:emifuwa:20171205153041j:plain

上の変更前の画像と比較して、モデルのビジュアルが急に変わったのがわかると思います。

作業としては

①モデルのシェーダを適宜Standardに変更

②必要に応じてパラメータを編集

という流れになります。

 

では、パラメータの設定を見ていきます。

f:id:emifuwa:20171205154230j:plain

ShaderStandardにしたら、上から順番に見ていきます。

Rendering Mode:とりあえずOpaqueで。

Opaque:デフォルト設定。透明部分が無いもの向け。

Cutout:透明不透明をはっきり分ける(半透明ではなく、100%不透明かまったく見えないのどちらか)

Transparent:透明なプラスチックやガラスなど。テクスチャのアルファチャンネルをそのまま再現→Albedoのアルファ値を下げると半透明になる)

Fade:オブジェクトが反射要素を含んでいても透明にフェードイン・アウトできる。

Main Maps

Albedoテクスチャを設定。または、指定された単色カラーになる。

Metalic:右にスライドするほど金属っぽくなる。金属的になればなるほど周囲の光を反射する。

Smoothness:右にスライドするほど光沢が出る

それ以外の項目に関しては必要に応じて調べていただきたいのですが、もう一つ。

Emissionという項目にチェックを入れ、「0」となっている数値をあげていくと、オブジェクトが発光するようになります。オートルミナスのような感じです。

 

とりあえずは全部のシェーダをStandardに変更し、こだわりたい部分をコツコツと調整していく形になると思います。

モデルの相性もあるので、なかなか全てにいい効果が出るとは言えませんが、チャレンジしてみる価値はあります。

Materialsフォルダの中からStandardに変更する作業を行っても良いのですが、個人的には、Hierarchyのモデルのツリーを開く→「U_Char」という項目を選択→InspectorにMaterialのリストが出るのでそこから調整…という流れをおすすめします。

f:id:emifuwa:20171205161309j:plain

モーフがらみで、Standardに変更してしまうとモデルのビジュアルが壊れてしまう場合があります(頬染め系によくある)。そういう場合は、その部分だけMMD4Mechanimのシェーダのままにしておくのが良いでしょう。

ですが、一度Standardに変更してしまうと、以前に適用されていたシェーダが何だったかわからない…ということもあるので、筆者はこうして一覧になっているところをスマホで写真を撮っておき、もしもの時はそこを見て戻したりしています。

エフェクトやライトも含めての効果は、こちらが参考になるかと思います。

togetter.com

少し古いまとめなので使用されているエフェクトが旧ImageEffectだったりしますが、ほぼ問題なくPost-Processingでカバーできると思います。

Particle Systemについて

パーティクル系のエフェクトについてなのですが、Unityには標準でパーティクルを作れる機能がついています。

設定できるパラメータなども非常に多いので、ここで説明するとそれだけでかなりの仕事になってしまうため、ちゃんと解説されている人様の記事をリンクしておきますので、そちらをご参照ください…

その1 Unityのパーティクル「Shuriken」

ゲームつくろー!さんより)

また、アセットストアでも様々なパーティクルが入手できますので、そちらも無料のものから試してみるといいと思います。

10. Post-Processing Stackの使い方②

前回に引き続き、Post-Processingのエフェクト説明です。

Depth of Field

おなじみ被写界深度。DOFです。レンズのボケをシミュレートするエフェクト。 

f:id:emifuwa:20171203211510j:plain

Focus Distance:どの距離にフォーカスを置くか。数値が低いと手前、数値を増やすと奥のものにピントがずれていく。

Aperture:カメラの「絞り」。絞りとは、カメラが取り込む光の量。それを数値化したものをF値という。Fの値を下げるとピントの合う範囲が狭まり、ボケる。上げるとピントの合う範囲を広げることができ、ボケなくなる。

Use Camera FOV:カメラに設定されているField of Viewの値から勝手に焦点距離を逆算してくれる。基本的にチェック推奨

Field of Viewが小さいとよくボケる。大きすぎるとボケない。

Kernel Size:ボケの半径に対するリミッター値。高くすると大きなボケを表現できるが処理は重くなる。

Motion Blur

モーションブラーです。シャッタースピードのシミュレーション。

動きの軌跡を表現するもの…ではなく、動きの飛びを散らし、画面に落ち着きと連続性を与えるエフェクト…だそうです。

※VRではブレが酔いにつながり、またフレームレートが高すぎてほとんど反映されないので無意味…なので使わないようにしましょう。

Shutter Angle:大きいほどブラーが深くなる(小さいとくっきりする)

Sample Count:サンプリングを何回やるか。大きくするとスムーズになるが負荷に直結するのでなるべく低くする。

Eye Adaptation

アイアダプテーション、画面の明るさを動的に調整するエフェクトです。

どんな時に使うかというと、明るくなった時の白飛び防止です。カメラのオート露出(AE)機能の使用感に近いです。

これ、実際にやってみようと思ったのですが、動画を見たほうが絶対わかりが早いので…

こちらの動画の29:10あたりからを参照していただければと思います。

www.youtube.com

Bloom

光が散乱している感じを足すエフェクト。明るいピクセルをまわりに足すことによって、うっすらと光っている感じが表現できます。

割と手軽にふわっといい感じになるのですが、何かの物理現象をシミュレートしたものではなく、リアリズムには寄与しません。

個人的に、リアル感よりはファンタジー感を出すのに良いのではないかと思います。雰囲気です。

効果的に使うことで画面を派手に出来ますが、やたら白っぽくなるという欠点もあり、使いすぎに注意。

f:id:emifuwa:20171203221700j:plain

Intensity:どのくらい明るくなるか

Threshold:どの程度の明るさのピクセルが反応するか。数値を下げると反応するピクセルが増えていって、最終的に画面全体が明るくなる。

※Thresholdを厳密に設定しすぎると、どこから明るくなってどこから暗くなるかがキッパリと分かれすぎてしまうので、Soft Kneeの数値を上げると、カーブが滑らかになる。

Radius:光の半径を設定。

低=小さい範囲でしか光が広がらない。高=広い範囲に光が散る。

Radiusが低いと光ってるところと光ってないところがハッキリしてしまうので、Radiusは常に最大値にして、Intensityで調整することを推奨。

Anti Flicker:Bloomはどんな小さなピクセルも散らしてしまうので、チラつきがちになる。アンチフリッカーにチェックを入れると、それを抑えてくれる。

Dirt:レンズに付いている汚れを表現する(リアルっぽくなる)。

Color Grading

 明るさ調整(Tonemap)と色調補正。これがPost-Processingで一番すごい!と思った機能。Photoshopのように自由に色調補正が出来ます。自由すぎて、いつまで経っても調整しきれず困るくらい。

まずはTonemappingから。

トーンマップとは、色々端折って単純に言えば「明るさと暗さをいい感じに補正する」ことです。Sceneにすごく明るいところとすごく暗いところがあって、どっちに合わせてもうまくいかない…っていう時に、なんとか両方いい感じに見えるようにする…白飛びを馴染ませる…のがトーンマップ。

f:id:emifuwa:20171204093659j:plain

Neutral:色んなゲームで広く使われているトーンマップ。やわらかい効果が得られる。

Filmic(ACES):Neutralに比べてだいぶコントラストが強い。

※下のBlack Inやらなんやらの項目、細かく調整できるようになっているのですが「ぶっちゃけ使いにくい、下のカラーグレーディングで明るさはいくらでも調整出来るからいじらずデフォルト値推奨」とのことでした…

次からがカラーグレーディング(色調補正)の項目になります。

f:id:emifuwa:20171204095642j:plain

Post Exposure(EV):明るさの調整。

Temperature色温度の調整。

Tint:色彩調整。左が緑・右が紫。

Hue Sift:色相をずらす。

Saturation:彩度調整。左が彩度落ちる・右が鮮やか。

Contrastコントラスト調整。

Channel Mixer:チャンネルミキサー。RGB・特定の色だけ補正することが出来る。

次はTruck Balls

3つのカラーホイールが並んでます。LinearとLogとありますが、Linear推奨

左がShadow、真ん中がMidZone(中間帯)、右がハイライトです。

f:id:emifuwa:20171204100611j:plain

使い方

①左のシャドウのホイールの下のスライダを動かすことによって、影の部分の明るさを変えることができます。

真ん中のホイールは中間帯の明るさ調整、右のホイールはハイライトの明るさ調整。

②ホイール真ん中の白い○を掴んでドラッグすると、色合いを調整できます。

ホイールの中は色合い調整、ホイール下のスライダは明るさ調整。

 ※もし「変な風になっちゃった!」と思ったら、ホイール真ん中の○を右クリックすると、デフォルト値に戻ります。

その下のGrading Curvesは、これまたPhotoshopトーンカーブ的に色々補正が出来ますが、詳しい説明は割愛します。

あまりに使いやす過ぎ・便利すぎて、逆にいじり過ぎて時間を使ってしまうことがありますが…普通のムービーの絵作りではなくVRコンテンツ用の際は、実際にHMDかぶって眺めてみて、違和感がないかどうかに気をつけましょう。

色々いじくりまわしたけど結局デフォルトの方が良かった~とならないように…

User Lut

UnityのSceneをスクショして、Photoshop上で調整したカラーコレクションをそのまま適用できます。Photoshopの方が慣れてるよ~な人にはいいのかな…?割愛。

Chromatic Aberration

色収差(色ズレ)です。

ムービーでは良く見かけますが、VRでは避けた方がいい気がします…

今試してみたけど、あるのと無いのとでほとんど差を感じなかった。割愛。

Grain

フィルム粒子のザラザラ感を足します。

VRで見てみると…うーん、不思議感とかおどろおどろしい感を出すにはいいかも。「単に画質が悪いのか?」に見えないこともなく。ホラー系向き?

Intensity:ザラザラ度の調整。

Luminance Contributions:明るい部分はザラザラ小さく、暗い部分はザラザラ大きく。上げた方がリアル。

Size:ザラザラというかブツブツのサイズ調整。

Coloredのチェックを外すとモノクロのザラザラになる。

Vignette

これもおなじみ。画像の周辺を暗くして、カメラっぽい効果を付加するエフェクト。

f:id:emifuwa:20171204111916j:plain

Colorで色を好きに変えることが出来ます。

Intensity:黒ずみのかかり具合を調整。

Smoothness:なめらかさ。

Roundness:下げると四角になります。

Roundedアスペクト比を無視するか考慮するか。

ModeClassicではなくMaskedにすると、テクスチャを使用することが出来ます。

 Dithering

グラデーションでマッハバンドが出た時(グラデーションをなめらかに表現できず、シマシマのようになってしまった場合)、ノイズをかぶせて目立たなくするエフェクト。

割愛します。

 

とりあえずVRコンテンツで使わないかもしれないものも一応「こういうものだよ」という説明のみさせていただきました。

実際に一番がっつり使うのはたぶん「Color Grading」「Bloom」あたり。

AOなんかはMMDステージなんかを使う場合、シェーダをスタンダードに変えて使用するのがいいかと思います(とにかく重いのであまり推奨しないけど…)。

何度も言うようですが、VRコンテンツを作る場合は2Dのムービーを作るのとはかなり違った画面作りになってきます。画質を落とすようなエフェクトが酔いにつながることもあるので、実際に自分でHMDかぶって試してみるのが大事です。

また、Post-Processingの現時点での弱点は、アニメーション出来ない(最初は暗くしておいてあと明るくするとか、タイムライン的な調整が出来ない)ところです。

しかし今後この辺はスムーズに出来るようにしたい…とのことですので、アップデートを待ちましょう… 

9. Post-Processing Stackの使い方①

Unity上で作業をする場合、当然ながらMME(MMD専用のエフェクト)は使えません。

 MMEを種類別におおまかに分けると、

①ポストエフェクト(画面全体に対して適用されるエフェクト)

②シェーダ系エフェクト(オブジェクトに個別にかけるエフェクト)

③パーティクル系エフェクト(雪や煙など、粒子のようなエフェクト)

になると思いますが、②については、Unity上でそれぞれのオブジェクトのマテリアルを編集することができます。③はパーティクルシステムという機能によって自作することも出来ますし、アセットストアで入手することも可能です。

①について。少し前までは、ポストエフェクトを使いたい時は、Standard Assetに入っている「Image Effect」(それぞれ「ブラー」とか「オーバーレイ」とか種類別に分かれているもの)を、必要に応じてCameraにコンポーネントとして追加する…という方式でした。

今でも同じ使い方で使えるのですが、あまり推奨しないのは、Post-Processing Stackの方がより軽くて高機能だからです。公式でもこちらの使用を推奨されています。

実際VRコンテンツで使用するようなエフェクトはそう多くないのですが、今回は一応全てのエフェクトをざっくりと解説していきます。

※なお、今回説明するようなポストエフェクト効果は、基本的に重いです。VRの場合、MMDでムービーを作っていた時よりも更に負荷がかかります。特にSSAO系は非常に負荷が高いので、できれば使わない方がいいかもしれないレベルです。

重くてビジュアルに難が生じそうな域にまで達してしまったら(首を振った時に遅延が発生するなど)潔く諦めましょう…VRでのそのような状態は、酔いにつながります。

※Post-Processing普及前に作られたアセットを使おうとすると、ImageEffectによりビジュアルを設定されているものがほとんどです。Cameraにコンポーネントとしてくっついているので、必要があればそこから編集しましょう。

Post-Processing Stackの導入

アセットストアにアクセスし、Post-Processing Stackをダウンロード・インポートします。

https://www.assetstore.unity3d.com/jp/?&_ga=2.76541397.1526715928.1512133327-912155784.1496207248#!/content/83912

インポートが成功すれば、Assetフォルダに新しいフォルダが追加されます。

f:id:emifuwa:20171203145801j:plain

Behaviourをアタッチ・Profile作成

ポストエフェクトは全てCameraに関連づける形になりますので、Cameraを選択

Inspector下の「Add Component」「Effcets」「Post-Processing Behaviour」を選択します。

f:id:emifuwa:20171203151644j:plain

そうすると、Cameraにこんなコンポーネントが加わります。

f:id:emifuwa:20171203151930j:plain

次は、この「None」の部分に入るProfileを作ります。

1つのSceneの上に乗せるポストエフェクトのセットみたいなものです。

Profileを作る際、どこでもいいんですが、わかりやすいところに保存しておきましょう。とりあえず、Sceneフォルダの中にSceneと一緒に入れておくのがわかりがいいかもしれません。

Sceneフォルダの中で右クリック→「Create」「Post-Processing Profile」

で、新規のProfileが作成されました。

f:id:emifuwa:20171203152707j:plain

名前もSceneと同じにしておくと探しやすいかもしれません。Profile名を「First」にします。

f:id:emifuwa:20171203152802j:plain

こうして作成したProfileを、Cameraにアタッチした「Post-Processing Behaviour」にD&Dします(もちろん、選択ボタンから選択しても構いません)

f:id:emifuwa:20171203152952j:plain

「First」という名前の新規のProfileが設定されました。

これで、このCameraが映しているSceneにPost-Processingが適用されるようになります。

Post-Processing Stackのための設定

Post-Processingの能力を100%発揮するために、いくつか設定しておく部分があります。

①Color Spaceを「Linear」にする

これは以前にも説明しましたが、メニューバー「Edit」→「Project Setting」→「Player」→「Other Setting」→「Color Space」が「Linear」になっているか確認してください。

f:id:emifuwa:20171203123510j:plain

ガンマ補正をするかしないかの設定です。なぜか、「Gamma」は、「ガンマ補正しない」なので、「Linear」にします。

②Cameraの「Rendering Path」を「Defferd」にし、「HDR」をONにする。

CameraのコンポーネントのRenderingPathを「Defferd」にし、「Allow HDR」をONにします。

f:id:emifuwa:20171203192124j:plain

HDR(ハイダイナミックレンジ)は、物凄くざっくり言うと、白よりも明るいものを表現できるって感じですかね…発光してるものなんかを表現するには不可欠です。

ここまで設定したら、Projectをいったん保存しておきましょう。

メニューバー「File」→「Save Project」にするだけです。

Post-Processingのエフェクト各種

Profileを選択すると、Inspectorにずらっとエフェクトの一覧が現れます。

f:id:emifuwa:20171203154210j:plain

エフェクト名の白い○の部分にチェックを入れると、そのエフェクトがSceneに適用されます。

エフェクト名をクリックすると設定画面が開くので、そこで調整をしていきます。

Fog

フォグ(霧)です。ここに細かい設定画面はなく、Lightingタブの下の方に設定画面があり、そこから色や密度などを設定するようになっています。

Antialiasing

アンチエイリアスジャギーを取り、エッジを滑らかにします。

VRコンテンツでここを使うとしたら、とりあえず軽い「Fast Approximate」の方でOK。

f:id:emifuwa:20171203162934j:plain

Ambient Occlusion

アンビエントオクルージョン。おなじみの、影を追加するやつです。

これ、正直あまりおすすめしません。なぜならまずとても重いのと、MMDモデルを使用している場合、影が出なかったりしてほぼ無意味だから。

MMD4Mechanimは「Unity上でMMDと同じようなビジュアルになる」ように変換を行っており、Unityのスタンダードではない専用シェーダを纏った状態になります。

そのため、Unity上のMMDモデルにはSSAO的なポストエフェクトは極めてかかりにくく、あまり見た目にいい効果を出しません。

しかしもちろん、Unity上でMMDモデルのシェーダをスタンダードに変更し、かかりやすい状態にすることは出来ますし、アセットストアなどで入手したUnity専用の3Dモデルにはちゃんと適用されますので、そういった場合の設定です。

f:id:emifuwa:20171203165325j:plain

Intensity:影の濃さの調節

Radius:ここで指定した範囲内にAOがかかるが、値を大きくすると不自然になるため、小さめ推奨。

Sample Count:高くするほど画質は上がるがその分負荷がかかるため、LowLowestで十分。

Down Sampling:処理を半分の解像度で行う。ディテールは失われるが劇的に軽くなるのでチェック推奨。

Force~とHigh~はあまり使わないのでスルーで。基本両方OFF。

Ambient Only:AOの影響をAmbientLightのみに限定する。重要なのでなるべくONに。

Screen Space Reflection

テカテカしたものなどに他のオブジェクトの反射がちゃんと映り込むようにする。リッチな表現になるがめっちゃ重い。設定もなかなか難しい。

f:id:emifuwa:20171203194857j:plain

Reflection Quality:反射の解像度。負荷が劇的に下がるのでLOW推奨。

Max Distance:反射の最大距離(範囲・伸ばすと広がる)

Iteration Count:処理の最大サンプル数。多ければ多いほど反射範囲が広がり、負荷増。小さくすれば反射範囲が消えていく。

Step Size:処理のサンプル間隔。1だと密なのでキレイだけど、小さい範囲しか出来ない。数値を増やすと粗くなるが大きい範囲が出来る(※不正確になり変な表現になることも)

Width Modifier:オブジェクトの平均的な厚みを決定。

オブジェクトに光を当てた時、とりあえず「見えてない部分には何か詰まってる」という前提で影を計算・処理している。そうすると不自然な映り込みになることがあるので、この値を操作してちょうどいい感じにする。

Reflection Blur:映り込んだ像にブラーをかけてぼやかす。

Reflection Multiplier:反射を明るくしたり暗くしたりする。

Fade Distance:前出のMax Distanceで反射範囲を伸ばすと不自然にバツンと切れた状態になることがあるので、ここの値を調節する(ぼかすために輝度を下げる)。

Fresnelは変数に関するパラメータ。とりあえず無視して良い。

Screen Edge Mask:Vignetteのような効果で、画面の端っこのリフレクションがおかしいのを誤魔化す。しかしあまり効果ないので無視して良いとのこと。

 

次回に続きます。

※Post-Processingに関する記事の内容は、下の動画から内容をほぼ丸写しにしたものです。動画では実例も見られてわかりやすいので、意味がわからない…と思ったらこちらをご覧ください。

【Unite 2017 Tokyo】ゲームの見た目も盛ったら変わる!!!!ヤバい!!ポストプロセス!!入門!!!!!!!!! 

講演者:高橋 啓治郎さん(ユニティ・テクノロジーズ・ジャパン合同会社)

www.youtube.com

 

8. Unityの照明効果②(PointLight・SpotLight・AreaLight)

今回は、前回説明しきれなかった残りのLightについて説明していきます。

Lightの追加

Hierarchy上で右クリック→「Light」から、4種類の照明を簡単にSceneに追加することが出来ます。

f:id:emifuwa:20171127104532j:plain

まず、「Point Light」をSceneに追加してみましょう。

新しくオブジェクトを追加した時、もしかすると、位置が「0.0.0」のところに行かないかもしれません。

そうしたら、とりあえずTransformコンポーネントでPositionの値を全部ゼロにしてください。

 

説明の前に、光がわかりやすいように、世界を暗くしておきましょう。

あらかじめ「DirectinalLight」のTransformコンポーネントのRotation(角度)を-150にし、更にIntensityを0にして真っ暗にしてください。

f:id:emifuwa:20171130153121j:plain

そして、PointLightの位置を「0.0.0」にすると、こんな感じです。

f:id:emifuwa:20171130153431j:plain

Point Light

この状態のままではPointLightがどんなものかわかりにくいので、いったん視点をロングに引きます。マウスのスクロールホイールで少しズームアウトしてみましょう。

f:id:emifuwa:20171201222546j:plain

イエローのラインで出来た球形が見えます。

PointLightは、この球形の中心点から全方向に広がる光です。例えるなら、電球に近いです。

球の中心点から半径の距離「Range」になります。

光はRangeの中(球の中)のオブジェクトすべてを照らし、光の強さは距離が離れると減衰します(DirectinalLightは減衰しません)。

現時点ではPointLightがまったく目立っていない状態ですが、

PointLightの位置をあげてみたり(PositionのYの値をあげる)、Rangeの値を上げてみたり(光の到達範囲が広がる)すると、この照明の特性がわかってくるかと思います。

f:id:emifuwa:20171201223303j:plain

暗い場所をふわっと明るくしたり、焚き火の炎の明るさを表現する時など、このライトを仕込んでおけば自然な明るさが表現できるでしょう。

設定するのは、Position(位置)・Range(到達範囲)・Intensity(光の強さ)あたりが重要になります。

f:id:emifuwa:20171201225045j:plain

 Spot Light

次はSpotLightです。

とりあえずモデルと同じ位置にSpotLightを出現させたいので、まずモデルを選択。

選択した状態のまま、右クリックでSpotLightを選択します。

f:id:emifuwa:20171201230150j:plain

そうすると、SpotLightがモデルの「子」オブジェクトとして追加され、「親」であるモデルと同じ位置に出現します。

f:id:emifuwa:20171201230320j:plain

ずっとくっつけておきたければそのまま。

分離させたければ、Spotlightを下の方にドラッグすれば、「親」から外れます。

f:id:emifuwa:20171201230544j:plain

とりあえずここでは「親」から外して、一つの独立したオブジェクトとして扱います。

オブジェクトの親子関係については、この記事の一番下で説明します。

※ところで、このように別のオブジェクトを親として設定した場合、位置だけでなく大きさも親のサイズを受け継ぎます。ここではモデルの大きさを1.2にしていたため、ライトもScaleが1.2となっていますが、ライトは大きさが変わっても光量などに影響はありません。

 

この状態(0.0.0)だと地面に埋まっていてわかりにくいので、PositionYを1.5にしましょう。

イエローのラインが円錐形に伸びているのがわかります。

f:id:emifuwa:20171201231838j:plain

Spotlightは名前のまま、円錐形に放射される光がスポットを照らします。

Rangeで光が届く範囲の距離を、SpotAngleで光が届く範囲の広さを指定します。そして、このライトも減衰します。

人工的な光を表現するのに向いています。ステージライト、懐中電灯、車のライトなどに良く使用されます。

f:id:emifuwa:20171201233023j:plain

PositionのZも移動し、モデルを後ろから照らしました。Angleをかなり広げ、照射角度を広くしています。

SpotLightはPosition(位置)・Rotation(角度)・Range・SpotAngle・Intensityの設定がメインになるでしょう。

気を付けることと言えば、Rangeの長さです。

例えばいわゆるステージのスポットライト的に床を照らしたい場合、Rangeの長さを床ぴったりに合わせてしまうと、Spotlightは距離が離れるほど光が減衰するので、底辺の部分では減衰して床に光が映らなくなってしまいます。

照らしたい部分は、壁や床を通過するようにRangeを設定しましょう。

Area Light

AreaLightは、今まで紹介してきた3つの照明とは少し違います。

基本的に長方形の形をしていて、「片面が光る板」のようにオブジェクトを照らします。

f:id:emifuwa:20171202202621j:plain

ですが、照らす対象は、静的(Static)なオブジェクトだけです。

例えば、大きな部屋の中で絶対に動かない家具や小物などをStaticに設定し、このライトを置いて焼き付けることによって、あまりデータを重くせずに、他のライトよりも繊細でニュアンスのある影を落とすことが出来ます。

その代わり、配置に悩んでStatic設定した小物を動かすたびに焼き付け直す必要があります。Bakeは空間が広く大きいほど時間がかかりますので注意。

上の画像でStaticとして設定しているのは、床、それに球と正方形のみです。モデルはStaticでないので、照らされていません。

また、今までのライトは全てリアルタイムで処理出来ましたが、このライトはBake(焼き付け)が必要になります。

 

オブジェクトをAreaLightに照らされるようにするには、オブジェクトを選択し、Inspectorタブの上部右上にある「Static」にチェックを入れます。

すると、下の方にある「Mesh Renderer」コンポーネント「Lightmap Static」にも、自動的にチェックが入ります。

Lightmap(ライトマップ)とは、反射光や影を焼き付けたテクスチャのことです。

f:id:emifuwa:20171202205155j:plain

「Cast Shadows」はとりあえず「On」にし、Receive Shadowsにチェックを入れます。「On」以外の項目は、実際に試してみた方が結果がわかりやすいかと思います。

次は、AreaLight自体の設定です。

重要なのはPositionRotation(Scaleは反映されません)、照らす平面の大きさは「Width」「Height」で設定します。光の強さはIntensityです。

f:id:emifuwa:20171202210546j:plain

ライトの角度を変えてみると、こんな感じになりました。

f:id:emifuwa:20171202210921j:plain

え、でもじゃあこのAreaLightを、動くオブジェクト(静的でない)であるモデルに適用するにはどうしたらいいの?ってなりますよね。

StaticでないオブジェクトにAreaLightを適用する…ことは出来ないのですが、「適用してるっぽく見せる」には、ここでは詳しく説明しませんが、「Light Probe」というものを設置する必要があります。

f:id:emifuwa:20171203112255j:plain

とりあえずLightProbeを置いてみました。

モデルにもAreaLightの光が反映されているのがわかります。

docs.unity3d.com

更に、Sceneに鏡面で出来たような、周囲のものが映り込むオブジェクトを置く場合、ちゃんと映り込みを反映させるには「ReflectionProbe」が必要になります。

いやいやそこまで精密な画作り必要ないんで…という場合は、この2つは無視して構わないでしょう。

 

これらの照明を様々に組み合わせて、Sceneを美しく彩ることができます。

ただし、無尽蔵に増やしていくと、もちろん重くなりますので注意が必要です。

照明の照らし方ひとつで、モデルの美しさ、場面の説得力が大きく変わってきます。

とりあえず照明についての説明はこれだけにしますが、もっと色々やってみたい場合は、突っ込んで調べてみることをおすすめします。

Unityの親子関係・グループ化

オブジェクトをSceneに追加する時、必ず「0.0.0」の地点に現れるわけではなく、変な場所に配置されてしまうことが(よく)あります。

そんな時は、「いったんSceneに既に存在するオブジェクトの『子』にしてしまう」と、親になったオブジェクトと同じ場所に配置されます。

f:id:emifuwa:20171130143059j:plain

D&DでHierarchyにオブジェクトを持っていく場合は「既存オブジェクトの名称の上に新しいオブジェクトを重ねるようにドロップする」ことで「子」になります。

右クリックでLightやCameraを新しく配置したい時などは、「既存オブジェクトを選択した上で右クリックしオブジェクトを追加する」ことで「子」になります。

例えば、モデルの位置の真上にスポットライトを配置したい!という時…

モデル選択→その状態のまま右クリック→SpotLight追加…とすれば、モデルと同じ位置にSpotLightが配置され、あとは位置を上の方に動かせばいいだけ…という風になります。

f:id:emifuwa:20171130143403j:plain

いったん「子」にしたあと、Hierarchy上でD&Dしてしまえば、オブジェクトの位置はそのまま、親子関係は外れます。

f:id:emifuwa:20171130150832j:plain

親子関係になると、「親」を動かせば「子」も一緒に動いてしまうので、不要な場合は親子関係を外しましょう。

「この車にこのモデルを乗せたい!」時などは、車を親にし、モデルを子にしたりします。

これに似た関係としては「グループ化」というものもあります。

グループ化は「部屋+家具」のように、たくさんのオブジェクトをまとめておきたい時などに便利です。

部屋に配置する家具オブジェクトや小物オブジェクトがたくさんある場合、Hierarchyがそれらの名前でいっぱいになって、ほかのオブジェクトを視認するのが大変になってしまいます。

そんな時、Hierarchy上で右クリック「Create Empty」とすると「Game Object」という空っぽのオブジェクトが出来ます。

この中にひとまとめにしておきたいものを全部入れておくと、必要ない時は中身を表示せずに一つのオブジェクトとして置いておけます。

必要な時は、ツリーを開いてそれぞれのオブジェクトを編集すれば良いのです。

例えば、SkyBoxはMMDにおけるxファイル形式のスカイドームのように、回転させることが出来ません。あっちに出ている月をモデルに背負わせた構図にしたい!という時などに困ってしまいます。

なので、空を回転させるのではなく、モデルやステージなどを回転させてしまった方が楽です。

GameObjectにモデルやステージを全部配置したものを入れ、GameObjectを回転させてしまえば、簡単に目当ての場所にステージやモデル一式を配置することが出来ます。

 

親子子は親を基準に移動・回転・拡大縮小する。親が動けば子も動く。

グループ化オブジェクト同士が並列。他のオブジェクトが移動しても一緒に移動はしない。

 

これらの関係を上手く使って、Sceneを構築していきましょう。

 

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

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