unity3d-jp / UnityChanToonShaderVer2_Project

UnityChanToonShaderVer2 Project / v.2.0.9 Release

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

URP用UTSシェーダー利用時、「Contribute Global Illumination」がオンになったオブジェクトが一つでも存在すると、invalid subscript 'vertexSH' が発生する

darsh-amaotolog opened this issue · comments

commented

いつもは、Oculus Quest 2(Oculus Link、Windowsビルド)でUnityを使っております。
以下の記事のようにUTSを使わせて頂いていたのですが、10日ほど前にビルド時にエラーが発生していることに気づきました。
https://amaotolog.com/vr/63

検証のため、新規プロジェクトで試したところ、その際はエラーは発生しませんでした。

これまで作ってきたプロジェクト(1年ほど前に作成)の何かがおかしいと考え、新たなプロジェクトにすべてのアセットやスクリプトを移行することにしました。
その移行作業の途中で、「Contribute Global Illumination」にチェックが入ったオブジェクトが一つでも存在していると、エラーになることが分かり、今回の質問をさせて頂きました。

以下に、再現方法を記載しておりますので、ご確認いただけると幸いです。

■開発環境
・Unity 2019.4.15f1
・CPU:AMD Ryzen 7 3700X
・グラボ:ASUS ROG-STRIX-RTX2060S-O8G-GAMING
・UTS/UniversalToon Ver.2.2.0
[ビルド設定]
・ビルドのPlatform(PC,Mac & Linux Standalone)
・Scripting Backend:IL2CPP
・API Compatibility Level:.NET 4.x ※.NET Standard 2.0でも試しましたが結果は同じでした
[その他]
・「Other Settings -> Rendering -> Auto Graphics API for Windows」のチェックを外し、「Direct3D11」を明示的に指定したり、他の項目(VulkanやOpenGLES3などを選択してみましたが、結果は同じでした。

■検証1
(1) 新しいプロジェクトを「Universal Render Pipeline」で作成する。
(2) 「UnityChanToonShaderVer2_Project-urp-2.2.0」をインポートする。
(3) hierarchyで「Main Camera」と「Directional Light」を残し、サンプルの「Post-process Volume」と「Example Assets」は削除する。
(4) Materialを新規作成し、シェーダーをUTSに変更する。設定はそのまま。
(5) hierarchyでオブジェクト(Cube)を新規作成し、(4)のMaterialを設定する。
(6) CubeのInspectorで「Mesh Renderer -> Lighting -> Contribute Global Illumination」にチェックを入れる。
(7) 「Lighting」タブで、「Auto Generate」にチェックが入っているため、自動的に「Generate Lighting」が実行される。
※手動で実行してもエラーは発生しました。

すると、UTSでエラー発生する。

al010819

Shader error in 'Universal Render Pipeline/Toon': invalid subscript 'vertexSH' at /Unity/UnityChanToonShaderVer2_Project-urp-2.2.0/Runtime/Shaders/UniversalToonBodyDoubleShadeWithFeather.hlsl(41) (on d3d11)

Compiling Fragment program with LIGHTMAP_ON FOG_EXP2 _MAIN_LIGHT_SHADOWS _SHADOWS_SOFT _MAIN_LIGHT_SHADOWS_CASCADE _ENVIRONMENTREFLECTIONS_OFF _IS_PASS_FWDBASE _IS_TRANSCLIPPING_OFF _IS_ANGELRING_OFF _IS_CLIPPING_OFF _EMISSIVE_SIMPLE
Platform defines: UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_RGBM_ENCODING

■検証2
(1) 検証1の(1)と同じ。
(2) 検証1の(2)と同じ。
(3) hierarchy内で「Post-process Volume」のみを削除する。
(4) 検証1の(4)と同じ。
(5) 検証1の(5)と同じ。
この時、Cubeの「 Contribute Global Illumination」はチェックなしです。
(6) 「Lighting」タブで、「Auto Generate」にチェックが入っているため、自動的に「Generate Lighting」が実行される。
※手動で実行してもエラーは発生しました。
(7) 「Build Settings -> Build」ボタンをクリックして、ビルドする。

すると、UTSでエラーが発生する。
al010820

Shader error in 'Universal Render Pipeline/Toon': invalid subscript 'vertexSH' at /Unity/UnityChanToonShaderVer2_Project-urp-2.2.0/Runtime/Shaders/UniversalToonBodyDoubleShadeWithFeather.hlsl(41) (on d3d11)

Compiling Fragment program with LIGHTMAP_ON FOG_EXP2 _MAIN_LIGHT_SHADOWS _SHADOWS_SOFT _MAIN_LIGHT_SHADOWS_CASCADE _ADDITIONAL_LIGHTS _ADDITIONAL_LIGHT_SHADOWS _ENVIRONMENTREFLECTIONS_OFF _IS_PASS_FWDBASE _IS_TRANSCLIPPING_OFF _IS_ANGELRING_OFF _IS_CLIPPING_OFF _EMISSIVE_SIMPLE
Platform defines: UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_RGBM_ENCODING

[補足]
・サンプルアセットの「Example Assets -> Workshop Set -> Drywall Panel」などで、「 Contribute Global Illumination」のチェックが入っているようです。

■補足
・#62で「Invalid subscript 'vertexSH'」が投稿されておりますが、状況が異なる可能性を考え、新たに投稿させて頂きました。
・シェーダーでReimportするとエラーは無くなりますが、ビルドするとエラーが再発します。
・「Oculus Integration」アセットなどが影響していると思いましたが、インポートしていない状態でも発生しました。(今回の検証内容)
・最終目的はVR環境(※)で使う事が目的ですが、現象切り分けのため、今回の検証内容とさせて頂きました。
※「Virtual Reality Supported(非推奨設定)」か「XR Plug-in Management(+Oculus)」
・UTSエラーが発生した場合でも、Unityエディター上では正しく表示されているようです。ただ、ビルド時にエラーとなるため、exe起動した際には正しく動作しませんでした。
・今回のエラーが発生した「いつも使っているUnityプロジェクト」では、自分で作成したキャラクターでは「Contribute Global Illumination」はチェックオフですが、Terrainや購入した建物アセットでは「Contribute Global Illumination」のチェックがオンとなっておりました。

commented

先日、質問させていただいてから調査を進めておりました。
試しに別のシェーダー(RealToon)に切り替えてたところ、そのシェーダーでもビルド時に正しく動作しない現象が発生しました。(シェーダー自体のエラーは無し)
更に調査したところ、ビルド時の設定ミス(Addressable Assets Systemのビルド漏れ)を見つけました。
シェーダーが原因と思い込んでおりましたが、これが正しく動作しない原因でした。大変失礼しました。

現在は、シェーダーを「UTS/UniversalToon Ver.2.2.0」に戻しております。
ビルド時に invalid subscript 'vertexSH' エラーが発生するのは変わりませんが、シェーダーの見た目的には特に問題が無いようですので、このまま使わせていただこうかと思っております。

クローズいたします。