[Unity] RenderTexture上不显示粒子
来源:互联网 发布:互穿网络聚合物 编辑:程序博客网 时间:2024/05/21 13:59
RenderTexture上不显示粒子
前两天看到群里有人发了一个问题,用一个相机将图像渲染到render texture上面,然后将这个rendertexture给UI中的Image显示出来,发现粒子效果没有出现。群里进行了讨论,也有大神把原因说了出来。
如下所示,粒子效果没有完整显示
可以看到代码中有如下语句
Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "PreviewType" = "Plane" }Blend SrcAlpha OneMinusSrcAlphaColorMask RGBCull 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信息就行了。
阅读全文
0 0
- [Unity] RenderTexture上不显示粒子
- 关于Unity 的 RenderTexture
- RenderTexture 不能正常显示
- unity animator 在 android 和ios上 不显示
- 如何在NGUI上显示粒子特效
- unity3D学习笔记之八 利用RawImage和RenderTexture在uGUI上显示Model
- UGUI之在UI上使用RenderTexture显示模型+AlphaBlend特效
- RenderTexture
- RenderTexture
- unity 模型导入不显示
- Unity Android 不显示阴影
- Unity将RenderTexture转化为Texture2D
- Unity使用RenderTexture进行截屏
- Unity将RenderTexture转化为Texture2D
- unity renderTexture 透明通道的问题
- unity调用系统的webview 显示活动公告 Scroll =“no” 在ios上不生效
- 只将unity的UI控件添加到iOS视图层上,不显示unity原生的背景(一)
- Unity粒子系统研究
- MySQL概览及sql语句的综述
- C++中的algorithm头文件
- JavaScript简单实例
- R-CNN之前的准备:Selective Search for Object Recognition
- 关于回调CallBack
- [Unity] RenderTexture上不显示粒子
- LWM2M协议调研
- 设计模式之六大原则——迪米特法则(LoD,LKP)
- 二叉树的建立、遍历等相关操作
- POJ 3125 Printer Queue
- 51nod 1116 K进制下的大数 利用同余式的乘法传递性质
- LWM2M开源协议栈——wakaama源代码分析
- java 数组的学习
- Nginx反向代理通过域名无法访问项目的解决办法