Unity RenderTexture 当作为 Camera.targetTexture 时,在某些安卓手机或模拟器无法显示或出现错乱 以及粒子无法正常显示

参考:

关于 RenderTexture 半透明粒子特效无法显示以及后续各类神奇问题的终极解决方案(大概)_半透明特效用rt有问题-CSDN博客

【Unity Shader】半透明特效在RenderTexture上的显示问题-CSDN博客

shader之——最常用的Blend_blend srcalpha one-CSDN博客

 

今天打包的时候遇到一个坑,就是用RenderTexture的时候,在某些手机上会显示黑屏,一查发现这是某些安卓设备才会出现的BUG(奇怪的是那台测试机是鸿蒙系统,懂的都懂)

解决方法也很简单,就是不能用RenderTexture资源,而改成动态代码创建即可解决这个BUG

同时解决了另一个RenderTexture的BUG,就是用RT的时候,Camera里的粒子物体,在RT上显示不正常,解决方法,例子的材质改成用 Moblile/Particels/Additive
另一个问题,除了粒子,发现diffuse之类的cutout材质,如果背后没有其他可渲染物体,则会直接看不见,怀疑是跟shader层级以及cutout的设置有关,目前暂时不知道怎么解决,好在pbr的standard材质里的cutout能正常渲染出来

using UnityEngine;
using UnityEngine.UI;

public class Test:MonoBehaviour{

public RawImage rawImage;
public Camera cam;

private RenderTexture m_renderTexture;

private void Start(){
m_renderTexture=new RenderTexture(512,512,16,RenderTextureFormat.ARGB32);

rawImage.texture=m_renderTexture;
cam.targetTexture=m_renderTexture;
//必须为 CameraClearFlags.SolidColor或CameraClearFlags.Depth,CameraClearFlags.Nothing 时会不显示
cam.clearFlags=CameraClearFlags.SolidColor;

//CameraClearFlags.SolidColor时会有背景色,需要设置背景色透明
Color color=cam.backgroundColor;
color.a=0f;
cam.backgroundColor=color;
}
}

 

注意:Camera.clearFlags 必须为 CameraClearFlags.SolidColor或CameraClearFlags.Depth,CameraClearFlags.Nothing 时会不显示
CameraClearFlags.SolidColor:会有背景色,需要设置Camera背景色为透明
CameraClearFlags.Depth:不会清除上一次渲染的内容,会出现重叠花屏
使用以上方法将粒子系统制作的特效显示在 UI 时,需要注意粒子系统 Renderer 栏下的 Material、TrailMaterial 使用的 Shader ,在 Unity2019.4.28f1c1 使用 Legacy Shaders/Particels/Additive 的粒子特效无法实现背景透明,改成 Moblile/Particels/Additive
原文地址:https://www.cnblogs.com/kingBook/p/14160483.html

 

 

rt的问题:
1.鸿蒙跟部分安卓,电脑上正常,打包后黑屏
2.如果相机渲染无背景,即要渲染出透明背景的RT,半透明的部分会显示不正常
3.解决了上面的可以渲染半透明的背景后,有的图片在正常相机视角下看正常,在RT下看就变成黑色了(用不着A通道并且被填满,colormaskrgb,把A裁剪掉)
4.渲染出来的半透明部分颜色偏淡
5.RT的颜色是16位而不是24位时,由于位数不够导致的显示异常

如果美术给的要有透明效果的图片不存在A通道(一般是用黑色当背景),只有RGB,
则Alpha Source选From Gray Scale,从输入纹理 RGB 值的平均值生成 Alpha。否则默认用Input Texture Alpha,即用纹理自带的。

depth buffer要选24,否则有些东西可能会显示异常,例如那个假影子,就变成怪怪的,像多个多边形组合一样


Blend One OneMinusSrcAlpha 效果最好,但是背景图较亮的时候,特效也会变亮,要注意下
参考:https://blog.csdn.net/baicaishisan/article/details/79072127

posted @ 2023-08-28 12:14  JeasonBoy  阅读(722)  评论(0编辑  收藏  举报