Unity 版本:2022.3.17f1c1
系统环境:macOs
使用 Addressable 进行资源管理。
URP下,一个简单的按顶点差分顶点颜色的 shader。
Shader "Unlit/VertexPureColor"
{
Properties
{
// _MainTex ("Texture", 2D) = "white" {}
// _Color ("Color", Color) = (1,1,1,1)
}
SubShader
{
Tags {
"RenderType"="Opaque"
"RenderPipeline"="UniversalRenderPipeline"
}
LOD 100
Pass
{
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_instancing
#pragma multi_compile_fog
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
struct Attributes
{
float4 positionOS : POSITION;
float4 color : COLOR;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct Varyings
{
float4 positionHCS : SV_POSITION;
float4 color : COLOR;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
Varyings vert (Attributes v)
{
Varyings o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_TRANSFER_INSTANCE_ID(v, o);
o.positionHCS = TransformObjectToHClip(v.positionOS.xyz);
o.color = v.color;
return o;
}
half4 frag (Varyings i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
return i.color;
}
ENDHLSL
}
}
}
Addressable 的 Play Mode Script 使用 Use Asset Database 时一切正常。
但实际打包后,或 Addressable 的 Play Mode Script 使用 Use Existing Build 时会出现 shader 异常。
Frame Debugger 时可以看到 shader 替换到 InternalErrorShader。
补充1
在用 addressable 加载完毕 Material 后再进入场景。
结果依旧是粉色。
补充2
临时解决方案:将 shader 改用 Shader Graph 来进行编写即可。