hyoromoのブログ

最近はVRSNS向けに作ったものについて書いています

雑なUniversalRenderPipeline(UniversalRP)のShader対応

f:id:hyoromo:20191014171742j:plain
UniversalRenderPipeline(旧LightweightRenderPipeline)でテンプレートプロジェクトを作成し、そこに既存プロジェクトやAssetStoreのMaterialを持ってくるとピンクになってしまいます。
今回はそれを雑に対応した話を書きます。

環境

  • Windows10
  • Unity2019.3.0b6
  • UniversalRP v7.12

URP対応での対応順

以下の3ステップ行う事になり、下に行くほどコストが掛かります。なお、「雑な」なので今回は2止まりです。

  1. Unity標準ShaderをUniversalRP標準Shaderに置き換え
  2. Shader内のTags置き換え
  3. Shader書き直し
1.Unity標準ShaderをURP標準Shaderに置き換え

f:id:hyoromo:20191014172043j:plain
Materialで使用しているShaderがUnity標準のStandardやDiffuse Shaderの場合、Unityが用意してくれている変換ツールでUniversalRP対応Shaderに置き換える事が出来ます。

  1. UnityEditor上部のツールからEditor
  2. Render Pipeline
  3. Universal Render Pipeline
  4. 以下のどちらかを選択。前者がプロジェクト全体、後者が選択中のMaterialのみを対象とします
    Upgrade Project Materials to UniversalRP Materials
    Upgrade Selected Materials to UniversalRP Materials

例えばStandardはLit、DiffuseはSimpleLitに置き換わります。見た目の問題がある場合はMaterial propertyを見直します。
たまに置き換えてくれない事があるので、その時は手作業で「Universal Render Pipeline」以下にある元Shaderに近そうなShaderに切り替えてください。その際、Textureが外れるのでParameterから付け直しをお忘れなく。

2.Shader内のTags置き換え

Unity標準以外のShaderに関してはノータッチです。都合よくShaderの中身を書き換えてくれないため、地道に修正していきます。
一つずつ修正したりShaderGraphで書き直すのはかなり手間...ですが、Shader内のTagsを置き換えるだけで済むケースもあります。

例えば
Tags { "LightMode" = "ForwardBase" }

Tags{"LightMode" = "UniversalForward"}
とする

対象となるのはForwardBaseForwardAddの2種類で、どちらもUniversalForwardに置き換えます。
ただし、Unity2019.2まではUniversalRPはLWRP名称なので、TagはUniversalForwardではなくLightweightForwardを使用する必要があります。

3.Shader書き直し

使っていたShader自体を書き直す or ShaderGraphで書き直す。
上手いやり方があればいつかブログで書くかもしれません。

追記

2019/11/24

Unity2019.2でのTag置き換え方法について本文中に追記しました。