内置管线转urp管线 对自定义shader修改后出现同shader物体互相判断为遮挡;试了rederFeature也是遮挡(按着官网的解释看着就不行)
模型分为 头发; 脸; 武器; 躯干;用的材质的shader都是同一个
上图 内置管线shader 男女之间,模型自身之间 不判断为遮挡
上图 urpshader 男女之间,模型自身之间 判断为遮挡
内置管线 shader
SubShader
{
Tags { "RenderType" = "Opaque" "Queue" = "Geometry" }
Pass //被遮挡显示纯色
{
Blend SrcAlpha OneMinusSrcAlpha //混合
ZTest GEqual //深度更大时
ZWrite off
v2f vert(appdata v)
{
//变换到裁剪空间输出
}
fixed4 frag(v2f i) : SV_Target
{
return _MaskColor; //直接显示纯色
}
}
Pass //正常显示模型
{
Tags { "LightMode" = "ForwardBase" }
//就是 贴图采样
}
}
urp shader
SubShader
{
Tags { "RenderPipeline" = "UniversalPipeline" "RenderType" = "Opaque" "Queue" = "Geometry"}
Pass //被遮挡显示纯色
{
Tags{"LightMode" = "SRPDefaultUnlit" } //不给lightMode 默认也是这个
Blend SrcAlpha OneMinusSrcAlpha
ZTest GEqual
ZWrite off
HLSLPROGRAM
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
v2f vert(appdata v)
{
//变换到裁剪空间输出
}
half4 frag(v2f i) : SV_Target
{
return _MaskColor;
}
ENDHLSL
}
Pass
{
Tags {"LightMode" = "UniversalForward"}
HLSLPROGRAM
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" //计算光照
//采样输出
ENDHLSL
}
}
试了各种renderType renderQueue pass的搭配 甚至是pass的顺序; renderFeature也尝试了各种 已经是乱来了 还是没解决问题 :D