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

ブログの女の子を作る #53 URPを導入して建物やTerrainのシェーダーを変更する

 
前回の記事では、縞パン向けにUV展開して、いろんなテクスチャ画像でパンツの柄を増やしてみました。
 
最近、Unityの「Shader Graph」機能を使えば、コードを書かずにGUI操作でシェーダーを作れることを知りました。これを使えば、オブジェクト表面の質感を改善できそうです。
 
さっそく試そうと思いましたが、Shader Graphを使うには「レンダーパイプライン(シェーダーのモード?)」を「ビルトインレンダリングパイプライン」から「SRPScriptable Render Pipeline)」に切り替える必要があるようです。そしてSRP上で使えるのは、軽量な「URP(Universal Render Pipeline)」か高品質な「HDRP(High Definition Render Pipeline)」のいずれかとのこと。
少しややこしいですが、VR用途ならURPの方でしょうか。
 
 
けど、切り替えるとこれまで使ってきた「VRM/MToonシェーダー」が使えなくなるらしい。。。
いきなりShader Graphを使ってシェーダーを作るのは無理がありますので、まずはURP対応のシェーダーに切り替えるところから始めることにしました。
 
何か良いシェーダーが無いかと探してみると、「ユニティちゃんトゥーンシェーダー 2.0 / UTS2」のURP版UTS/UniversalToon」を見つけました!このシェーダーは機能がたくさんあるようなので、質感の向上も期待できそうですよ。
 
この記事では、まずはURPを導入して、建物やTerrainで作った地面・木をURP対応シェーダーに変更します。キャラクターで使っているVRM/MToonシェーダーは、次の記事でUTS/UniversalToonに変更しますよ。



開発環境

・Blender 2.90.1
・Unity 2019.4.13f1
・グラボ:ASUS ROG-STRIX-RTX2060S-O8G-GAMING
・Oculus Quest 2
・Oculus Link
 

(1) URPの導入と対応シェーダーのインストール

URPの導入方法は、以下のサイトを参考にさせていただきました。
 
URPとHDRPの違いなども分かりやすく説明されており、たいへん参考になりました!
 

「UTS/Universal」をダウンロードする

今回の記事ではまだ使いませんが、キャラクター用のURP対応シェーダー「UTS/Universal」をダウンロード/インストールしておきましょう。
 
まず、GitHub から UTS/Universal の最新ファイルをダウンロードします。
現在の最新は「UnityChanToonShaderVer2_Project-urp-2.2.0.zip」でした。
 
次に、先ほどのzipファイルを「適当なフォルダ」に展開しておきます。
 
[2020/11/10追記]
私の場合、デスクトップ上にzipファイルを展開し、インストール後に別のフォルダに移動したのですが、Unity起動時に「package.jsonが見つからない」的なエラーが発生しました。インストール時にファイル内容をコピーしてくれる思ってましたが、フォルダを消したり移動してはいけないのかも知れませんね。
今回は、Unityプロジェクト内のフォルダに「/Tools/UnityChanToonShaderVer2_Project-urp-2.2.0」として保存し、再度インストールすることで回避しました。

「UTS/Universal」をインストールする

Window -> Package Manager」を実行します。
 
左上の「+アイコン」をクリックして、「Add package from disk…」をクリックします。
 
展開したファイル内にある「package.json」を選択します。
 
インポート処理が実行されるので、しばらく待ちます。
 

「Universal RP」をインストールする

同じくPackage Managerで、「Universal RP」を選択して、インストールします。
現時点では、7.3.1と7.5.1がありましたが、Unity 2019.4では「7.3.1」の方が推奨っぽいので、こちらを選択しました。
 

設定ファイル的なものを作る

次に、UniversalRenderPipelineAssetという設定ファイル?的なものを作成していきます。
 
Project画面の適当な場所で右クリックして、「Create -> Rendering -> Universal Render Pipeline -> Pipeline Asset (Forward Renderer)」をクリックします。
 
・UniversalRenderPipelineAsset
・UniversalRenderPipelineAsset_Renderer
という2ファイルができましたね。
 

SRPを設定する

Edit -> Project Settings…」をクリックして、「Project Settings -> Graphics -> Scriptable Render Pipeline Settings」に先ほど作成した「UniversalRenderPipelineAsset」をD&Dします。
 
設定できました!
 

(2) 建物などのシェーダーを調整する

これでレンダーパイプラインが切り替わったワケですが、画面がすごいことになります。
 

そして世界は紫になった

いまの環境で使えなくなったシェーダーが紫(ピンク?)に変わってしまいました。
キャラクターを選択すると輪郭が出ますので、オブジェクトがちゃんと存在してることは分かります。
 
空はこれまで通り青色ですね。
別の仕組みで表示しているのでしょうね。
 
紫色を直していきましょう。
 

シェーダーの一括変更ツールを試す

キャラクターも気になりますが、まずは建物やTerrainの地面・木から修正していきましょう。
Unity側に「自動的にシェーダーを変更してくれるツール」が準備されてるので、まずはこれを試してみます。
 
Edit -> Render Pipeline -> Universal Render Pipeline -> Upgrade Project Materials to UniversalRP Materials」をクリックします。
 
マテリアルを上書きするので、実行前にバックアップ取ってね」という警告がでるので、問題なければ Proceedボタン をクリックします。
 
建物やベンチなど、一部のオブジェクトが見えるようになりました!
建物オブジェクトのシェーダーを確認してみると、「Universal Render Pipeline/Lit」に変わってました。これがURP版の標準的なシェーダーっぽいですね。
 
上から見てみると、ビルや道路のオブジェクトも見えてますね。
この調子で修正していきましょう。
 


(3) Terrainの地面のシェーダーを直す

まだ紫のままなのは、Terrainで作った地面や木のようですね。
次はこのシェーダーを変更していきましょう。
 
この作業では、こちらの記事を参考にさせて頂きました!
 

地面を直す

TerrainオブジェクトのInspectorで「Paint Terrainアイコン」をクリックすると、Setteings欄でシェーダーが確認できるのですが、表示だけで変更することができません。
困りました。
 
とりあえず、「Terrain Settingsアイコン」をクリックし、「Basic Terrain -> Material」の「Create…」ボタンをクリックしてみます。
 
この状態で、もう一度「Upgrade Project Materials to UniversalRP Materials」を実行してみます。
 
シェーダーは自動的に変更されませんでしたが、なぜかシェーダーを変更できるようになったので、「Universal Render Pipeline/Terrain/Lit」に変更しておきます。
 
地面が表示されるようになりました!
 

(4) Terrainの木のシェーダーを直す

次は、Terrainの木ですね。
 

木のオブジェクトを探す

シェーダーはマテリアル上、マテリアルはオブジェクト上で設定しますので、まずは木のオブジェクトを探しましょう。
 
TerrainオブジェクトのInspectorで「Paint Terrainアイコン」をクリックし、Trees欄にある「木のオブジェクト」を選択してから、「Edit Trees…」ボタンをクリックします。
 
Edit Tree」をクリックします。
 
オブジェクトの名前をクリックすると、
 
Project画面で、オブジェクト(プレハブ)の文字が一瞬大きくなります。
今回は「Broadleaf_Mobile」というプレハブを使ってたようですね。
 
Broadleaf_Mobileの中を見てみると、シェーダーが設定されてそうなプレハブが見つかりました。
 

シェーダーを変更する

それぞれのシェーダーを変更していきます。
 
・Broadleaf_Mobile_Billboard
→「Universal Render Pipeline/Nature/SpeedTree7 Billboard
 
・Broadleaf_Mobile_LOD0
・Broadleaf_Mobile_LOD1
・Broadleaf_Mobile_LOD2
→「Universal Render Pipeline/Nature/SpeedTree7
で設定してみました。
 
木が見えるようになりました!
 

草はProjectを保存したら直った?

で、次は「Terrainの草花」なんですが、
 
なんとなくProjectを保存(Ctrl+Sキー)すると、なぜか正しい表示になりました。
良く分かりませんが、何かが直ったのでしょう。
 

(5) その他のオブジェクトを直す

Terrainのシェーダーは直りましたので、その他も直していきましょう。
 

水面

水面には「VRWaterShader2」というアセットを使わせて頂いていたのですが、URPには非対応のようです。
 
とりあえず、シェーダーを「Universal Render Pipeline/Lit」に変更し、「Surface Inputs -> Base Map」で青色にしておきます。
 
更に、Alpha値を変更して、半透明にすると水っぽくなりました。
水面が動かないのでちょっと寂しいですが。。。
 
AQUAS 2020」という水面アセットを持ってるんですが、現時点ではURP対応してないらしい。
 
開発中らしいので、そのうち対応して頂けるかも知れませんね。
Attention: Support for scriptable render pipelines (URP & HDRP) is not currently available, but under development.
 

ランタン

ランタンは一部だけ紫になってました。
FX/Glass/Stained BumpDistort」というバンプ関係のシェーダーですね。ランタンの炎が揺れるのを表現してたあれでしょうか。
 
該当するシェーダーがありませんので、「Universal Render Pipeline/Lit」で。
とりあえず、紫は無くなりました。
 
先ほどの設定変更で、街灯も直りました。同じマテリアルを使っていたようですね。
 
この後に試したところ、「Universal Render Pipeline/2D/Sprite-Lit-Default」シェーダーにすると、ランタンや街灯のガラス面が透明にはなってくれました。炎が揺れないのは変わりませんが、こちらの方が少しはマシな感じです。また、URP対応のランタンとかを探してみたい。
 

家の窓

家の窓はシェーダーがおかしい、というよりは「透過処理が正しく動いていない」ですね。
 
Surface Typeを「Transparent」に変更すると、窓部分が透過するようにはなるのですが、屋根の表示がなんかおかしくなります。
 
オブジェクトの表示順がおかしいというか、必要ない個所を透過してるというか。
家の窓は、次回以降に再調査しましょう。
 

現在のすがた

こまでの作業で、Unity世界がこんな感じになりました。
なんとか見える状態になりました!
 


まとめ

今回は、URPを導入して、建物やTerrainで作った地面・木をURP対応シェーダーに変更しました。
 
未対応のシェーダーを使うと紫になるのは知ってましたが、ほぼすべてのオブジェクトが紫になると焦ります。。。
次はキャラクターですね。
 
次の記事に続きます。
 
スポンサーリンク

コメント

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

  • コメント (0)

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

ブログの女の子を作る #52 縞パン向けのUV展開とテクスチャ画像でパンツの柄を増やす

ブログの女の子を作る #54 MToonシェーダーからURP用UTS/UniversalToonに変更する (1) 基本設定編

最近のコメント

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

[当ブログについて]