我在使用URP扩展时遇到了shader编译错误:
Shader error in 'Universal Render Pipeline/Spine/Skeleton Lit': 'OUTPUT_SH': Too few arguments to a macro call. at /Users/MyUserName/Desktop/unity packages/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-SkeletonLit-ForwardPass-URP.hlsl(89)

Compiling Subshader: 0, Pass: ForwardLit, Fragment program with _RECEIVE_SHADOWS_OFF
Platform defines: SHADER_API_DESKTOP UNITY_ENABLE_DETAIL_NORMALMAP UNITY_ENABLE_REFLECTION_BUFFERS UNITY_LIGHTMAP_FULL_HDR UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BLENDING UNITY_SPECCUBE_BOX_PROJECTION UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS
Disabled keywords: FOG_EXP FOG_EXP2 FOG_LINEAR INSTANCING_ON SHADER_API_GLES30 UNITY_ASTC_NORMALMAP_ENCODING UNITY_COLORSPACE_GAMMA UNITY_FRAMEBUFFER_FETCH_AVAILABLE UNITY_HARDWARE_TIER1 UNITY_HARDWARE_TIER2 UNITY_HARDWARE_TIER3 UNITY_LIGHTMAP_DLDR_ENCODING UNITY_LIGHTMAP_RGBM_ENCODING UNITY_METAL_SHADOWS_USE_POINT_FILTERING UNITY_NO_DXT5nm UNITY_NO_SCREENSPACE_SHADOWS UNITY_PBS_USE_BRDF2 UNITY_PBS_USE_BRDF3 UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION UNITY_UNIFIED_SHADER_PRECISION_MODEL UNITY_VIRTUAL_TEXTURING _ADDITIONAL_LIGHTS _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHT_SHADOWS _DOUBLE_SIDED_LIGHTING _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MIXED_LIGHTING_SUBTRACTIVE _RECEIVE_SHADOWS _SHADOWS_SOFT _STRAIGHT_ALPHA_INPUT

Spine-Sprite-ForwardPass-URP.hlsl(215)也有同样的问题出现

我使用的unity版本:2023.1.6.f1c1
spine runtime和URP UMP版本:3.8
Universal RP版本:15.0.6

我并不懂得Shader的编写语法,但还是进行了一定的理解和修复尝试。这个错误的描述看起来像是宏“OUTPUT_SH”调用时赋予的参数过少,我简单检查了Lighting.hlsl中该宏的定义:OUTPUT_SH(absolutePositionWS, normalWS, viewDir, OUT) OUT.xyz = SampleProbeSHVertex(absolutePositionWS, normalWS, viewDir)

而出现问题的两个hlsl当中对OUTPUT_SH的调用是这样的:
OUTPUT_SH(normalWS.xyz, output.vertexSH);

看起来确实是缺少一些参数?但URP UMP似乎在4.2版本依旧保持了这样的状态。

好吧,比起讲述我的摸索和猜测过程,也许我只该问我要如何解决这两个错误?是升级我的spine runtime版本,回退URP版本还是进行某些修改?

Related Discussions
...

根据您提供的信息,您在使用 Spine URP 扩展时遇到了 shader 编译错误。这个问题似乎与 OUTPUT_SH 宏调用时参数不足有关。您当前使用的 Spine runtime 和 URP UMP 版本是 3.8,而 Unity 的 Universal RP 版本是 15.0.6。

要解决这个问题,您可以尝试以下步骤:

  1. 升级 Spine runtime 和 URP UMP 版本:考虑升级到最新的 Spine runtime 和 URP UMP 版本(例如 4.1 或 4.2-beta),因为这些版本可能已经修复了与新版本 Unity 和 URP 的兼容性问题。您可以从 Spine Unity 下载页面 获取最新版本。

  2. 检查和更新 Shader 代码:如果升级版本不适用,您可能需要手动更新 shader 代码以匹配新的 URP 版本的要求。根据您提到的 OUTPUT_SH 宏定义,您可能需要在调用时提供完整的参数列表。

  3. 回退 URP 版本:如果升级 Spine runtime 版本不方便,您可以尝试回退到与 Spine 3.8 版本更兼容的 URP 版本。

通过这些步骤,您应该能够解决 shader 编译错误的问题。

@JurassicTDLH Spinebot is correct, please note that you are using an incompatible version combination:

As listed on the download page, the Spine URP Shaders UPM package is not compatible with Unity 2023.1.6, and the respective Universal RP UPM package, where the OUTPUT_SH macro has frequently changed:

spine.urp-shaders 3.8 2021-03-04 - Unity 2019.3-2020.3
Compatible with spine-unity 3.8 from 2019-12-20 or newer and Unity 2019.3-2020.3.

Also the spine-unity 3.8 runtime package is incompatible with Unity 2023.1.6, as listed here.