Unity RenderTexture上不显示粒子效果的解决办法

发表于2018-04-17
评论0 1.07w浏览
RenderTexture上不显示粒子

有些在开发时可能会碰到这样一个问题,用一个相机将图像渲染到render texture上面,然后将这个rendertexture给UI中的Image显示出来,发现粒子效果没有出现。针对这个问题,下面就和大家介绍下RenderTexture上不显示粒子效果的解决办法。

如下所示,粒子效果没有完整显示


可以看到代码中有如下语句
Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "PreviewType" = "Plane" }
Blend SrcAlpha OneMinusSrcAlpha
ColorMask RGB
Cull Off Lighting Off ZWrite Off

这里要了解一个叫做Premultiplied Alpha的概念。也就是预先将alpha计算进RGB的值中。比如原来是(r,g,b,a), 通过Premultiplied Alpha变为(ar,ag,ab,a)。Premultiplied Alpha的作用一个是减少后期计算,还有一个更重要的作用是进行Texture Filtering:

GPU专用的纹理格式,比如 PVR、ETC 一般在生成纹理都是默认 Premultiplied Alpha 的,这些格式一般是GPU硬解码,引擎用CPU处理会很慢。

原因在于默认的粒子效果使用到的shader中使用了ColorMask RGB,所以只有RGB三个通道的值被存入了缓冲,而没有写入A通道的值, 所以我们得到的texture其实没有粒子的alpha信息,由於使用了ZWrite Off,所以也没有粒子的深度信息,当我们把这张纹理拿出来显示的时候,由于某些粒子所在位置alpha值为0,所以通过alpha预存得到的RGBA值是(0, 0, 0, 0),所以最后也就看不到颜色了。

对用的解决办法是将shader中的ColorMask RGB改为ColorMask RGBA,写入粒子的alpha信息就行了。
来自:https://blog.csdn.net/rickshaozhiheng/article/details/76014602

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

0个评论