ブログの女の子を作る #53 URPを導入して建物やTerrainのシェーダーを変更する【Unity】
前回の記事では、縞パン向けにUV展開して、いろんなテクスチャ画像でパンツの柄を増やしてみました。
最近、Unityの「Shader Graph」機能を使えば、コードを書かずにGUI操作でシェーダーを作れることを知りました。これを使えば、オブジェクト表面の質感を改善できそうです。
さっそく試そうと思いましたが、Shader Graphを使うには「レンダーパイプライン(シェーダーのモード?)」を「ビルトインレンダリングパイプライン」から「SRP(Scriptable 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
・CPU:AMD Ryzen 7 3700X
・グラボ:ASUS ROG-STRIX-RTX2060S-O8G-GAMING
・Meta 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)
この記事へのコメントはありません。