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

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

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