BlenderとUnityで作ったものをVR(Oculus  Quest/Oculus Link)で動かします

ブログの女の子を作る #62 UnityのHDRPをVRで試してみる

 
前回の記事では、キャラクターの頭を小さくして頭身を上げてみました。
 
今回は、少し前から気になっていた「HDRP(High Definition Render Pipeline)」をVRで試してみます。いま使っているURPの高解像度版という感じでしょうか。
 
見た目がリアルできれいになるらしい。



目次

開発環境

・Blender 2.90.1
・Unity 2019.4.19f1
・グラボ:ASUS ROG-STRIX-RTX2060S-O8G-GAMING
・Oculus Quest 2(Oculus Link利用)
 

(1) HDRPをインストールする

まずは、HDRPをインストールします。
 
Unity公式サイトの記事を参考にさせていただきました。
 
今回は、既存のプロジェクトをURPからHDRPに変更しますので、「プロジェクトを実際にアップグレードする方法」を実行しました。新しくプロジェクトを作る場合は「はじめに:HDRP を使用して最初のプロジェクトを作成する」ですね。
 

HDRPパッケージをインストールする

Package Managerを実行します。
 
公式サイトによると「Post Processingを使っていれば削除する」とのことですが、いまのプロジェクトではインストールしていませんでした。
 
次に、「Project Settings -> Player -> Other Settings -> Rendering -> Color Space」の設定が「Linear」になってることを確認します。
 
最後に、「High Definition RP」パッケージをインストールします。今日時点の最新バージョンは「7.5.3」でした。
 
しばらく待ちます。結構時間がかかりますね。
 

HDRPアセットファイルを作る

インストールが終わると、「HD Render Pipeline Wizard」というウィザード画面が表示されました。
設定がおかしいところを表示してくれるらしい。便利。
 
次に、「HD レンダーパイプラインアセット」を作って設定していきます。
Projectウィンドウで右クリックし、「Create -> Rendering -> High Definition Render Pipeline Asset」を選択します。
 
Project Settings -> Graphics」に移動して、「Scriptable Render Pipeline Settings」欄に先ほど作成した「High Definition Render Pipeline Asset」ファイルをD&Dで設定します。
 
 
設定が変わった瞬間に画面表示が変わりました。
いつものピンク色ですね。だいぶん慣れましたよ。
 
設定を変更して、正しい表示に直していきます。
 

ウィザードのエラーを直す

ウィザードで「HDRP + VR」タブに切り替えてみると、エラー表示が残ってました。
Fix」ボタンを押すと良い感じに設定変更してくれるので、ボタンを押していきます。
 
default sceneを作るか?と聞いてきたので、とりあえず「Create One」を押します。
 
だいぶんエラーが減ってきましたね。
 
 

XR Plug-in Managementを設定する

Fixボタンを押してるうちに、「レガシーなVRシステム」の代わりに新しい「XR Plug-in Management」がインストールされたようです。少し設定変更しておきましょう。
 
Project Settings -> XR Plug-in Management」で、「initialize XR on Startup」と「Oculus」にチェックが入ってることを確認します。
 
更に、「XR Plug-in Management -> Oculus」の設定で、「Stereo Rendering Mode」が「Single Pass instanced」になっているかを確認しておきます。
 
エラーがすべて無くなりました!
 
これで、HDRPの基本設定は完了です。
 


(2) マテリアルのシェーダーを変更する

ここからは、マテリアルに設定されているシェーダーを「HDRPで使えるシェーダー」に変更していきます。
 

自動的に変更してみる

地面と空以外はすべてピンク色です。
 
まずは、一括変更ができないか試してみます。
 
Edit -> Render Pipeline -> Upgrade Project Materials to High Definition Materials」をクリックします。
 
Proceed」ボタンを押して実行します。
 
若干変わった気がしますが、ダメっぽいですね。
公式サイトでは「プロジェクト内のすべての標準 Lit/Unlit シェーダーが HDRP Lit/Unlit マテリアルに変換されます。」とあるので、URPシェーダーが設定されてるいまの状態では一括変換できなかったのかも知れません。
 

手動でHDRP/Litシェーダーに変える

仕方ないですので、手動でシェーダーを変更していきましょう。
 
設定するシェーダーは「HDRP/Lit」です。
その他にも、Decal、LitTessellation、TerrainLit、Unlitなどがありますね。マテリアルの種類によって使い分けするのが良さそうです。
 
体部分に色が付きました。
 
全身のシェーダーを変更するとこんな感じに。
シェーダーは変更できましたが、キャラクターが灰色ですね。
 
以前の記事でURPに変更した時は、最初からある程度の色が付いてたり、テクスチャ画像が表示されてましたが、少し状況が違うようです。
 

テクスチャ画像を設定する

テクスチャ画像の設定が消えてるので、「Surface Inputs -> Base Map」でファイルを設定し直します。めんどくさい。。。
ですが、画像ファイルを設定しても、灰色のままで変わりません。
 
Surface Inputs -> Metallc」の値を 0 → 1 に変更すると、テクスチャ画像の色が見えてきました。
少しメタルっぽい質感ですが。
 
Smoothness」の設定を 0.5 → 0 に変更すると、良い感じになりました。
MetallcとSmoothnessの設定が逆のような気もしますが、とりあえずこれで行きましょう。
 

地道に設定していく

設定方法が分かりましたので、他のマテリアルにも設定していきます。
 
目が表示されると、少し安心してきました。
 
テクスチャ画像の設定が引き継がれていればもう少し楽なのですが。。。
 
一通り設定してみました。
ぱっと見た感じでは問題無さそうですね。
 

(3) Terrainの地面と建物のシェーダーを変更する

キャラクターは設定できましたので、他の部分を設定していきましょう。
 

Terrainの地面を設定する

Terrainで使ってるマテリアルのシェーダーを「HDRP/TerrainLit」に変更します。
 
HDRP/Lit」との差異は分かりませんが、Terrainという名前が付いてるのでこちらにしました。
設定変更すると、何か地面に白い板が現れました。草っぽい?
 

建物を設定する

次は、建物のオブジェクトです。
 
シェーダーを「HDRP/Lit」に変更して、
 
テクスチャ画像を設定していきます。
 
窓の透明部分は「Aplha Clipping」にチェックを入れると透過してくれました。
URPに変更した時と同じですね。
 

やはりテクスチャ画像の再設定が面倒

家の中もやっていきます。
 
少しずつ、色が見えてきましたよ。
 
一つ一つのオブジェクトに対して、使っているテクスチャ画像のファイル名を調べて、設定しなおすのはかなり面倒ですね。
しかもノーマルマップも設定するのでなおさらです。なんか良い方法ないんですかね。
 


(4) Terrainの木・草とその他オブジェクトを設定する

他の部分も設定していきましょう。
 

エラーが出てるのが気になる

Terrainの設定を見ていると、草(Paint Details)でエラーが出てるのが気になります。
The Current render pipeline does not support Detail shaders」らしい。さすがに「HDRPではTerrainの草画像が使えない」ということでは無いと思いますが。。。
 
他の画像ファイルに変更しても、エラーは消えませんでした。
このエラーが無くならない限りは、草は四角の板のままですね。。。
 

Terrainの木を調整する

草は放置して、木のマテリアルのシェーダーを変更します。
すると、木が見えてきました。色がおかしい?
 
葉っぱが見えませんので、「Surface Type」で、Opaque → Transparent に変更します。
 
オブジェクトが透過処理されて、葉っぱが見えてきました。
ですが、もう一息な感じです。
 

Alpha Clippingと数値調整する

Alpha Clipping」にチェックを入れると、葉っぱがクッキリと表示されるようになりました。
 
更に、「Threshold」の値を 0.5 → 0.525 に変更してみると、余分な部分も透明になりました。
「どこまで透明で表示するか」の閾値のようですね。
 
この「木のオブジェクト」はLOD対応ですので、すべてのレベル(LOD0,1,2)で同じように設定します。
葉っぱの量が少ない気がしますが、とりあえずは表示されるようになりました。
 

橋のオブジェクトを修正する

どんどんやっていきましょう。次は桟橋ですね。
 
複数のマテリアルを使ってると、めんどくささが倍増します。
 

街灯のオブジェクトを修正する

街灯です。
 
 
ガラス部分を透過表示してるので、中のろうそくも見えてますね。
 
ランタンも設定しました。
 

木の設定を間違ってた

ここで、Terrainの木の設定が間違ってることに気づきました。
 
木の色が灰色なのは、テクスチャ画像として「ノーマルマップのファイル」を設定していたからでした。
 
やっと緑が見えましたよ。
葉っぱが少ないのは変わらずです。
 

(5) HDRPの設定を確認しつつ試す

マテリアルのシェーダーを一通り修正しました。
 

いまの状態

現状を確認しておきましょう。
キャラクターの見た目は、URPから大きくは変わっていない気がします。
 
足元を見てみると、白いもやのような表示になりました。
これは、Post Processingの「Bloom」の効果でしょうか。URPにもPost Processing設定はありましたが、HDRPではデフォルト状態でオンになってるようですね。
 

カメラの方向で明るさが違う

どうやら、カメラの方向で明るさが変わるようです。
 
上から → 下から にカメラを移動してみました。
上から見るとかなり明るい。
 
水平にすると、明るさが減ってきました。
 
 
空が見えるくらい見上げると、かなり落ち着いたトーンになります。
なんとなくですが現実世界のカメラのように、レンズに入る光の量で絞り?を変更してる感じ。リアルですね。
 

アンチエイリアシングを有効にする

動作確認として「VR(Oculus Link経由)」でも見てたのですが、ドットが粗くジャギーが目立つのが気になりました。
 
アンチエイリアシング設定を探したところ、カメラのInspector内にありました。
Camera -> General -> Anti-aliasing」を「Temporal Anti-aliasing (TAA)」に変更します。
 
かなりジャギー感が無くなりました。
 
静止画像では分かりにくいので拡大してみました。
 
やはりかなり効果があるようです。
この設定は必須ですね。
 

ライト設定を確認する

Lightingタブの設定で「Mixed Lighting -> Lighting Mode」を見てみると、これまで選択していた「Subtractive」が使えなくなってました。
とりあえず、Shadowmaskに変更しておきましょうか。
 

HDRP Default Settingsで設定を変更してみる

HDRP全体の設定は、「HDRP Default Settings」や「HDRenderPipelineAsset」などで行います。
 
設定値を作って上書きすることもできるようですが、今回は「HDRP Default Settings」でデフォルト設定自体を変更することにしました。
 
例えば、「Ambient Occulusion」をオフにしてみると、影表現の一部が無くなります。
 
Bloom」をオフにすると、白い光表現が消えました。
 
Sky – > Type」を「Physically Based Sky」に変えてみました。
見た目がかなり変わりますね。
 

Exposureの数値を小さくする

ここで、カメラ的な「Exposure(露出)」設定を見つけました。
 
上から見た時が少し明るすぎたので、数値を 11 → 3 に変更すると落ち着いた感じになりました。
 
同じ設定で、下から見上げた場合を比べてみます。
 
こちらも暗くなると思いましたが、むしろ少し明るくなったような。
これで行きましょう。
 

ビルボード表示がおかしい

ここまでの設定でTerrain関係のも見てきましたが、ビルボード表示を改善する方法は見つかりませんでした。
 
白い四角では殺風景ですので、いったん非表示にしておきましょう。今回は「Detail Distance」の値を 0 にすることで対応しました。
 
木のビルボードが表示されないのはどうしようもないですね。
本来であれば、山の上はビルボードの木が表示されてるはずなんですけどね。
 


(6) 影やその他設定を調整する

もう少し設定を詰めておきます。
 

Generate Lightingする

一通りのマテリアル設定などは完了してますので、この段階で一度、ライトマップのデータを更新しておきましょう。
 
Lightingタブで「Generate Lighting」ボタンをクリックしてしばらく待つと、色の見え方が自然になりました。
やっと地面の色が以前の色に近づいてきましたよ。
 

Shadowの解像度を変える

Directional LightオブジェクトのInspectorで、「Shadows -> Shadow Map -> Resolution」に影の解像度設定があります。
 
Custom(512)の場合。
 
High(1024)の場合。影がくっきり見えます。
 
Ultra(2048)です。更にキレイになりました。
このプロジェクトでは High(1024)にしておきましょう。
 

Metallicの値を小さくする

キャラクターの服などを見ていると、影の出方が弱い気がします。何かないかと探したところ、最初の方で設定した「Surface Inputs -> Metallic」の値を小さくすると見え方が変わることが分かりました。
 
まずは設定値が 1 の場合。
 
これを 0.5 に変更すると、影が見えてきました。
値を大きくするとキャラクターが明るくなり、それで影が消えていたようです。デフォルト値は 0 なので 1 は大きすぎたのかも知れません。
 
キャラクターのオブジェクトの場合、0.75くらいにしておきましょうか。
やや落ち着いた感あります。
 

光の強さを変更する

光の強さは、ライト設定の「Emission -> Intensity」で変更できるようです。
 
値を 3.14 → 7 に変更すると、光が強くなって影が強調されました。
 

現状を確認する

だいぶん設定してきましたので、再度現状を確認しておきます。
 
上から見た時に明るすぎるのもだいぶん直りました。
 
髪の毛の陰影が少し濃い気がします。
ノーマルマップの値は 1 なんですけどね。
 
スカートや足の影の感じはとても自然。もう少し明るい方が見やすいかも知れませんね。
 
下から見上げると、光が飛んだような印象になります。
これはこれでリアルな感じ。
 
ふと思ったのですが、URPでもポストプロセスでBloomなどを設定すると、こんな見た目に近づく気がしました。
またやってみよう。
 
スカートを取って、パンツの見た目も確認しておきましょう。
 
ノーマルマップのシワも表示できてます。
問題なさそうですね。
 

建物などのMetallicも変える

建物やその他のオブジェクトについても、Metallicの値を変更しておきます。
 
1 → 0.5 にしてみました。
明るさが抑えられましたね。
 
建物の中です。
 
Ambient Occulusion」による影がしっかり出てる気がします。
 
桟橋です。
 
良いですね。
やはり値は小さめが良いようです。
 

Contact Shadowsはオフで

キャラクターの体や服に当たる影が少ないので、設定を探して見ました。
 
Shadows -> Contact Shadows -> Enable」ですかね。。
 
チェックを入れると影がでました。立体感ありますね。
 
ですが、角度によっては影の当たり方が不自然?な感じがしましたのでオフにしました。
不自然というか、影がくっきり出すぎてる感じでしょうか。スムースにする設定があると良いのですが。
 

影が丸いのをとりあえず回避する ※[3/9] 解決しました

[2021/03/09追記]
影が丸い問題ですが、やっと解決しました!
原因は「カメラの画角(FOV)の数値が小さくなっていたから」でした。
 
Hierarchyで「OVRCameraRig -> TrackingSpace -> CenterEyeAnchor」を選択し、Inspectorで「Camera -> General -> Field of View」の値を確認してみると、 26.99147 というとても小さい数値になっていました。Unityのデフォルト値は 60 らしい。シェーダーをURPに切り替えた頃から「影が丸い問題」が発生してたんですが、何かのはずみで値を変えてしまったのでしょうね。この数値を 60 に戻すと、どこを見ても影がキレイに出るようになりました。
実は数か月間、問題が解決せずに悩んでたのですが直って本当に良かったですよ。
 
ですので、ここで暫定対策としていた「Max Distance」もいまはチェックオンで使ってますよ。
 
地面を見ていると、建物の影が丸い。というか切り取られて表示されてるような感じです。
 
HDRP Default SettingsのShadowsに「Visualize Cascades」ボタンがあったので押してみます。
 
影のカスケード設定が視覚化されました。これは分かりやすい!
どうやら、丸い領域を3つくらいつなげていて、その中だけに影を表示しているようです。負荷を下げるためだと思いますが、いまの設定では不自然すぎます。
 
Max Distance」のチェックを外します。
 
この設定は本来はオンにする必要がありますが、暫定的な対策としてオフにします。
他に良い設定があると思いますが、まずはこれで。
 
これで一通りの設定ができました!
 

(7) 動画で確認する

動画で確認してみましょう。
いつものように、Oculus Linkで実行して、OculusMirrorに映った動画をキャプチャしました。
 

腕を伸ばす動作

【Unity】HDRPをVRで試す #1 腕を伸ばす動作
光と影の状態は、やや下から見上げた時が良さそうです。
 
【Unity】HDRPをVRで試す #2 腕を伸ばす動作(近くから)
髪の毛の線がやや強く出てますね。もう少し弱くしたい。
 

膝に手をつく動作

【Unity】HDRPをVRで試す #3 膝に手をつく動作
顔の雰囲気がリアルな感じです。この感じをURPでも出してみたい。
 
【Unity】HDRPをVRで試す #4 膝に手をつく動作(近くから)
アップしてみました。質感がフィギュアっぽくもあります。
 

キックする動作

【Unity】HDRPをVRで試す #5 キックする動作
キックなどの速い動作の場合、残像が残りやすいようです。
 
【Unity】HDRPをVRで試す #6 キックする動作(後ろから)
後ろから見てみました。Terrainの地面と木に残像が残りやすいようです。青色を透過した水面では、そんなに残像が出てない気もしますね。
 

太もも付近の影の状態を確認

【Unity】HDRPをVRで試す #7 太もも付近の影の状態を確認
太もも付近の影は「Ambient Occulusion」でしょうか。自然な影になってます。
 
【Unity】HDRPをVRで試す #8 太もも付近の影の状態を確認(後ろから)
影の密集具合によっては、やや濃く出る場合もあるようです。
 
【Unity】HDRPをVRで試す #9 太もも付近の影の状態を確認(後ろから2)
この影もURPで出せたら良いですね。
 
【Unity】HDRPをVRで試す #10 太もも付近の影の状態を確認(歩く動作)
オブジェクトが素早く動く場合でも、ちゃんと影が出てます。良いですね。
 


(8) 良いところと気になるところ

今回HDRPを試してみて、良いところと気になるところがありました。
 

良いところ

  • 光や影の感じが良い。ポストプロセスの効果も大きいのですが、本物のカメラで見たような空気感がありました。
今回はざっと設定しただけですが、もう少し設定を進めるとかなりリアルになりそうな予感はあります。奥が深いですね。
 

気になるところ

  • マテリアルのテクスチャ画像の変更がかなり面倒。URPの場合は、画像ファイルは同じのが設定されてたので楽でした。
  • Terrainの草がおかしい。Detail shadersに対応していない?
  • Terrainの木のビルボードが表示されない。HDRP用の画像ファイルとかあるんでしょうか。
  • テクスチャがもっとキレイに見えると思ってた。高画質なテクスチャを使えばもっとリアルになるかも。
  • 空の雲が表示されない。どこかに設定があるはず。
  • アンチエイリアシングをオンにすると残像が残りやすい。ポストプロセスの影響かと思いましたが違うらしい。
  • キャラクターに当たる影を自然にしたい。スムース的な何かがあれば。
シェーダー変更時にテクスチャ画像が維持されないのはつらかった。
 

まとめ 

UnityのHDRPをVRで試してみました。
 
光や影の雰囲気がとても良いのと、Bloomなどのポストプロセスを試すこともできて、大変良い勉強になりました。まだ気になるところはありますが、いつでもHDRPに切り替えられることが分かりましたので、HDRP対応のシェーダーやアセットが増えた時にまた試してみたいと思います。
 
スポンサーリンク

コメント

  • トラックバックは利用できません。

  • コメント (0)

  1. この記事へのコメントはありません。

ブログの女の子を作る #61 頭を小さくして頭身を上げる【Blender,Unity】

ブログの女の子を作る #63 URPのポストプロセスでSSAOの影を試す【Unity】

最近のコメント

だーしゅ
IT関係のお仕事してます。
VRは楽しいですね。

[当ブログについて]