一个Bug
今天QA报了一个渲染相关的bug:一个用了 扭曲 效果的翅膀特效在场景相机下显示正常,但是在UI相机上却有问题,截图如下:
![](https://i-blog.csdnimg.cn/blog_migrate/8969b9bc75f52ca9b23cf0b282d20a48.png)
扭曲背景 上下颠倒 了。
Bug的修正
这里用的 扭曲shader 是我们的美术同学从他们前项目搬过来的,代码很简单:
- 用 GrabPass 抓取当前屏幕做为扭曲背景。
- 添加 UV扰动 后再采样屏幕背景,即可达到扭曲效果。
问题是,这里采样 GrabTexture 的时候用的是 screenUV 而非 grabUV,代码如下:
顶点着色器:
o.screenPos = ComputeScreenPos (o.pos);
像素着色器:
float2 sceneUVs = (i.screenPos.xy / i.screenPos.w) + (_Value * diffuseTex.a * float2(diffuseTex.r, diffuseTex.g) * i.vertexColor.a);
half4 sceneColor = tex2D(_GrabTexture, sceneUVs);
修正这个问题很简单,把 ComputeScreenPos 换成 ComputeGrabScreenPos 即可,修正后的代码如下:
顶点着色器:
o.screenPos = ComputeGrabScreenPos (o.pos);
调整完之后就正常了,如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/3226cd02dc6b4e3bb0ebfa794b2c7f45.png)
关于ComputeScreenPos和ComputeGrabScreenPos的差别
修正容易,但是搞清楚 Compute