原因分析:模型坐标OS转为屏幕坐标CS后,在光栅化时,CS刚好命中屏幕像素坐标,在计算像素包含关系时就可能会(有人说因为浮点,我感觉还有GPU算法,求解)漏掉,造成间隙而露出一条线的背景。
解决方法:在shader对所有CS进行偏移(其实可以只偏移命中部分,但if判断反而更消耗,而且偏移后效果可接受)
代码(修改自Universal Render Pipeline/2D/Sprite-Lit-Default,黄色部分为修改内容):
Varyings CombinedShapeLightVertex(Attributes v)
{
Varyings o = (Varyings)0;
o.positionCS = TransformObjectToHClip(v.positionOS);
float r = 1 / _ScaledScreenParams.x;
float t = o.positionCS.x / r;
o.positionCS.x = floor(t) * r + r * 0.1;
r = 1 / _ScaledScreenParams.y;
t = o.positionCS.y / r;
o.positionCS.y = floor(t) * r + r * 0.1;
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
float4 clipVertex = o.positionCS / o.positionCS.w;
o.lightingUV = ComputeScreenPos(clipVertex).xy;
o.color = v.color;
return o;
}