tanaka's Programming Memo

プログラミングについてのメモ。

古いプロジェクトをUnity2020へアップデートした時のWebGLビルドのエラー

古いプロジェクトを2020LTSにバージョンアップした後にWebGLでビルドしようとすると、Post ProcessingのFinalPass関連で以下のような2つのエラーに遭遇しました。

Shader error in 'Hidden/PostProcessing/FinalPass': Input signature parameter  (1-based Entry 3) type must be a scalar uint. at line 44 (on gles)

Compiling Vertex program with STEREO_INSTANCING_ENABLED
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_COLORSPACE_GAMMA UNITY_LIGHTMAP_FULL_HDR
Disabled keywords: FXAA FXAA_LOW FXAA_KEEP_ALPHA FXAA_NO_ALPHA STEREO_DOUBLEWIDE_TARGET UNITY_NO_DXT5nm UNITY_ENABLE_NATIVE_SHADOW_LOOKUPS UNITY_METAL_SHADOWS_USE_POINT_FILTERING UNITY_NO_SCREENSPACE_SHADOWS UNITY_PBS_USE_BRDF2 UNITY_PBS_USE_BRDF3 UNITY_NO_FULL_STANDARD_SHADER UNITY_HARDWARE_TIER1 UNITY_HARDWARE_TIER2 UNITY_HARDWARE_TIER3 UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_HALF_PRECISION_FRAGMENT_SHADER_REGISTERS UNITY_LIGHTMAP_DLDR_ENCODING UNITY_LIGHTMAP_RGBM_ENCODING UNITY_VIRTUAL_TEXTURING UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION UNITY_ASTC_NORMALMAP_ENCODING SHADER_API_GLES30
Error building Player: Shader error in 'Hidden/PostProcessing/FinalPass': Input signature parameter  (1-based Entry 3) type must be a scalar uint. at line 44 (on gles)

Compiling Vertex program with STEREO_INSTANCING_ENABLED
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_COLORSPACE_GAMMA UNITY_LIGHTMAP_FULL_HDR
Disabled keywords: FXAA FXAA_LOW FXAA_KEEP_ALPHA FXAA_NO_ALPHA STEREO_DOUBLEWIDE_TARGET UNITY_NO_DXT5nm UNITY_ENABLE_NATIVE_SHADOW_LOOKUPS UNITY_METAL_SHADOWS_USE_POINT_FILTERING UNITY_NO_SCREENSPACE_SHADOWS UNITY_PBS_USE_BRDF2 UNITY_PBS_USE_BRDF3 UNITY_NO_FULL_STANDARD_SHADER UNITY_HARDWARE_TIER1 UNITY_HARDWARE_TIER2 UNITY_HARDWARE_TIER3 UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_HALF_PRECISION_FRAGMENT_SHADER_REGISTERS UNITY_LIGHTMAP_DLDR_ENCODING UNITY_LIGHTMAP_RGBM_ENCODING UNITY_VIRTUAL_TEXTURING UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION UNITY_ASTC_NORMALMAP_ENCODING SHADER_API_GLES30

シェーダーコードを見るとpragmaのラベルで未定義のがあるような感じでした。

解決法

Player Settings の WebGL の Other Settings 欄にある Auto Graphics API のチェックを外して、WebGL 1.0やWeb2.0を一度削除して、また設定することで直りました。

ざっくり、以下手順の一例です。

  • UnityのEditorメニューから Project Settings を開いて Player を選択(Fileメニュー > Build Settings > Player Settingsでも可)
  • WebGL の Other Settings を開く
  • Auto Graphics APIのチェックを外す
  • Graphics APIs 欄にあるWebGLの設定を削除
  • Graphics APIs 欄の右下の + をクリックして設定を追加しなおす

以上です。