使用后处理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问答社区提供了回答,欢迎大家转至社区交流:
【打包】C#脚本存在未引用的命名空间,打包报错了提示 命名空间不存在UnityEditor. -- UWA问答:帮助开发者找到更好的答案


Rendering

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

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

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

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

感谢范世青@UWA问答社区提供了回答,欢迎大家转至社区交流:
【打包】C#脚本存在未引用的命名空间,打包报错了提示 命名空间不存在UnityEditor. -- UWA问答:帮助开发者找到更好的答案


Scripting

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

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

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

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

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

感谢Xuan@UWA问答社区提供了回答,欢迎大家转至社区交流:
【打包】C#脚本存在未引用的命名空间,打包报错了提示 命名空间不存在UnityEditor. -- UWA问答:帮助开发者找到更好的答案


Scripting

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

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

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

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

感谢Knight-132872@UWA问答社区提供了回答,欢迎大家转至社区交流:
【打包】C#脚本存在未引用的命名空间,打包报错了提示 命名空间不存在UnityEditor. -- UWA问答:帮助开发者找到更好的答案

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

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

封面图来源于:Awesome Unity Shader
关于炫酷的Unity3D Shader。
Awesome Unity Shader -- UWA开源库:帮助开发者发现更好的解决方案


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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值