使用后处理Alpha通道丢失的问题

使用后处理Alpha通道丢失的问题

1)使用后处理Alpha通道丢失的问题
​2)ParticleSystem的Trail Material为空时运行会自动创建一个默认材质
3)C#使用中文进行枚举时, 是否会产生性能相关的问题
4)C#脚本存在未引用的命名空间,打包报错提示命名空间不存在UnityEditor


这是第275篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)

Rendering

Q:我们项目有一个模型相机投射到RT上,然后放在RawImage上,现在这个相机需要开启后处理Post Processing。只针对角色添加的Tone Mapping和Bloom效果,问题是开启后,RawImage背景变黑了,把UI背景图遮住了,应该是需要让持有RT的RawImage做混合,网上看了一堆混合的公式,都无法完成混合,背景混合对了,模型混合就不对,整个模型被混合的发黑。请问有相关的解决方案吗?

应该是开启Post Processing后模型相机的SolidColor的Alpha值就无效了。把相机的背景色也加到了RenderTexture里。

A1:解决方法:UberPost: //return half4(color, 1.0); return half4(color, SAMPLE_TEXTURE2D_X(_SourceTex, sampler_LinearClamp, uv).a);

感谢题主ZJS@UWA问答社区提供了回答

A2:我在非URP项目试了一下,也存在上述的SolidColor的透明通道会无效的问题。从下图FrameDebugger中,可以看到:Copystd.shader的输入是一张Alpha不全为1的图(除了模型处的a为1,其它背景处a都为0),但是输出图的Alpha全部为1,通过查询源码,确定不是Shader的问题,而是输出的targetRT(_TargetPool0)的格式(B10G11R11)决定了它不包含Alpha信息,所以输出图永远不会有透明通道的信息。

我的解决方法很简单,就是用自己写的Shader。效果如下,其中红棕色是UIImage背景,胶囊体是目标模型。总结一点就是,一个后处理Shader只要在确保原有功能的基础上仍能保持原图的Alpha信息不变,理论上就是可以的。

感谢孟@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/6189ef43d8413e18eb09b3b5


Rendering

Q:Particle的Trail Material为空时运行会自动创建一个默认材质,请问有什么方法解决?

A1:可以排查下有没有类似操作,有Material的get操作就会变成实例化的材质球。

感谢小ben@UWA问答社区提供了回答

A2:在2020.3.16版本没有发现这个问题,不知道用的是什么Unity版本?在2020.3.16版本不勾选Trails模块,就不会有Trail Material。

感谢范世青@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/618b8a48d8413e18eb0bef92


Scripting

Q:项目使用C#语言开发,战斗模块使用了大量的中文枚举,不知道是否会产生什么风险问题,查阅了部分资料也没有结果。

public enum TTT
{
  我 = 0,
  是 = 1,
  程 = 2,
  序 = 3,
  员 = 4,
}

A1:雨松之前提过一个方案加属性来实现可以编辑器上显示中文,代码中仍然用英文,网上能搜到。

感谢Knight-132872@UWA问答社区提供了回答

A2:可参考:《Unity3D研究院之多语言用中文做KEY(七十五)》

感谢Xuan@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/618a6ca6d8413e18eb0a75d2


Scripting

Q:【打包】C#脚本存在未引用的命名空间,打包报错了提示命名空间不存在UnityEditor。引用到Editor命名空间的脚本(即使未使用),也未放到Editor文件夹下时,会引发打包报错问题。

A1:UnityEditor这个库只能在Editor下运行,是打包不出去的。我看你也没有引用到,直接删除即可。

感谢萧小俊@UWA问答社区提供了回答

A2:如果是Editor上专用的建议放到Editor文件夹里,如果运行时也需要可以加UNITY_EDITOR宏来隔绝。

感谢Knight-132872@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/618c82e5d8413e18eb0d29e2

20211115
更多精彩问题等你回答~

  1. Unity增量打包AssetBundle没变化的资源也会被重新打包
  2. 在模型有UV2的情况下开启Generate Lightmap UVs
  3. 如何实现AAB包的增量更新

封面图来源于:Awesome Unity Shader
关于炫酷的Unity3D Shader。
https://lab.uwa4d.com/lab/5b563be1d7f10a201fd8beeb


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)