UI抗锯齿不生效原因

栏目: 后端 · 发布时间: 5年前

内容简介:这是第160篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。UWA 问答社区:answer.uwa4d.comUWA QQ群2:793972859(原群已满员)

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

UWA 问答社区:answer.uwa4d.com

UWA QQ群2:793972859(原群已满员)

本期目录:

  • UI抗锯齿不生效原因
  • 自定义uv4数据信息
  • Profile下Assets>Shader占用内存过大
  • StaticBatchingUtility
  • 大量使用委托的+=和-=导致产生内存碎片

UI

Q:不管是UGUI还是NGUI,只要控制的UI设置了旋转,边缘就有明显的锯齿。设置里打开8倍抗锯齿也没效果。看了网易的《非人学园》里面的界面,很多应该也是旋转的,并没有锯齿。

UI抗锯齿不生效原因

“Thanks for raising this issue. In unity 5.6 we made a change to how the backbuffer / msaa / hdr works. A side effect of this is that the backbuffer is never created with MSAA enabled, we go via an intermediate render texture. In the example you have sent the canvas is set to ‘screen space overlay’. This means that is renders directly into the ‘final’ buffer (in this case the frame buffer).

The normal scene camera is set to have MSAA enabled, if you change the camera mode to Screen Space - Camera and render them into the camera (last step via sorting layers), then MSAA will work as they will not be rendered direct into the backbuffer but into the intermediate render texture.”

意思是,如果你的Canvas选择的是默认的ScreenSpace-Overlay,那么就不会走MSAA的那个buffer,而是直接写入到“final” buffer中。

UI抗锯齿不生效原因

所以解决办法就是使用Screen Space-Camera的方式。

除了开抗锯齿之外,如果图片是静态的,就是不会旋转的。只是这个角度,不想开MASS可以考虑让UI直接出图成斜的,OverDraw高一些,不过不用抗锯齿了。

另外建议题主关注下开了抗锯齿之后的字体效果,有可能没有那么“锐利”了。

感谢贾伟昊@UWA问答社区提供了回答,欢迎大家转至社区交流: https://answer.uwa4d.com/question/5cdbf4102b27907cff754b6b

Model

Q:目的:想将自定义的模型法线信息存储到uv4中。

想法:在资源后处理脚本OnPostprocessModel(GameObject)方法中将法线信息压缩到0~1中存储到uv4里面,然后Shader中将uv4存储的法线信息解压回-1~1区间里。

测试方法:压缩之后的信息在Shader中是错误,只会发生在SkinnedMeshRenderer 中,MeshRenderer一切正常,怀疑SkinnedMeshRenderer设置uv4信息的时候底层做了处理。

测试结果:法线信息不压缩直接存储到uv4中,不同FBX模型压缩算法不同,目前检测出两套压缩算法,但是根据什么实用不同的压缩算法是未知的。

UI抗锯齿不生效原因

模型法线:

UI抗锯齿不生效原因

使用解压算法1的效果,下图1为不同模型使用解压算法1的效果,但是使用解压算法2显示正常。

UI抗锯齿不生效原因
图1 不同模型使用解压算法1的效果
UI抗锯齿不生效原因
图2 使用解压算法2的效果

另外的模型使用解压算法2的效果:

UI抗锯齿不生效原因

使用正常的解压算法的效果 (-1,1) 压缩至0~1再解压回来的效果:

总结:因为我们的模型使用了tangent来做法线贴图的处理,normal和tangent都被占用了,想在uv4上存储自定义的信息发现SkinnedMeshRenderer上的Mesh无法正确设置color、uv4的信息。

请问大家有办法在uv4上存储正确的信息吗?为什么存储的信息会有多种的解压方式?压缩uv4数据的原理和依据是什么?

A:是因为SkinnedMeshRenderer会对normal和tangent进行蒙皮处理,而color和uv4不会。你可以参考法线贴图的原理,在color通道存切线空间的法线,然后在Shader里面转换一下就好了。

感谢一天到头困来的@UWA问答社区提供了回答,欢迎大家转至社区交流: https://answer.uwa4d.com/question/5cdee73aac715e7d04c40c3c

Editor

Q:在Profile下看到Assets>Shader内存占用很大,并且有很多是项目中没有使用的,但是有引用的数量,详情是Shader asset has been edited and not yet saved to disk。请问这种情况是因为在编辑器下,还是确实有问题?

UI抗锯齿不生效原因

A:首先要确定来源,来源无非两种,Editor下和RunTime下。

如何排除Editor?

1、最有效的方式是打包AssetBundle,进行真机测试。你看到的资源都是RunTime产生的。

2、如果暂时无法进行真机测试,可以根据右侧的Referenced By来查看依赖关系,只有被依赖的资源才会使用到,Shader大部分依赖于material。

3、减少Editor资源干扰,有效的两种方式:

  • 重启Unity,保持Editor环境干净,减少由于操作产生的资源残留。
  • 不要在Editor下选中某一特定资源,以免出现Asset冗余的表现。
感谢郑骁@UWA问答社区提供了回答,欢迎大家转至社区交流: https://answer.uwa4d.com/question/5ce36e50ac715e7d04c40cd0

DrawCall

Q:StaticBatchingUtility的官方文档有这么一句话:

IMPORTANT: only objects with the same material can be batched, thus it is useful to share as many textures/material as you can.**

相同的材质才能batched,但是事实上我看见Profiler里是把多个不同材质的小Mesh 合成了有一个Combine Mesh Unity的合并规则是什么 ?这样有什么问题吗?只是生成了一个Mesh但是batched还会有多个?对性能有什么影响吗?

A:题主可以观察一下那个Combined Mesh,里面包含了很多SubMesh,然后对应的其实就是原始的那些小Mesh。

Static batching在不同的版本有两种DrawCall合并机制:

1、运行时合并,可见的、相同材质的那些SubMesh的index buffer,作为一次DrawCall提交;

2、运行时排序,把可见的、相同材质的那些SubMesh连续进行DrawCall提交。

前一种直接减少了DrawCall数,后一种只是减少了Render State的切换,但省下了index buffer的合并开销。

总之对性能基本上是显著提升,但前提就是那句话:

IMPORTANT: only objects with the same material can be batched, thus it is useful to share as many textures/material as you can.**

该回答由UWA提供,欢迎大家转至社区交流: https://answer.uwa4d.com/question/5cd3a3ede08a260abaf02366

Script

Q:经过测试每次委托的Delegate.Combine和Delegate.Remove都会产生内存碎片,这种委托的使用有什么更好的方式吗?

A1:每次都会分配52B左右的堆内存(该值与OS相关),所以建议控制其调用次数即可,量不大没啥关系。

该回答由UWA提供

A2:可以使用链表保存委托,把对委托的+=和-=转换为对委托链表的Add和Remove。

感谢自然妙有猫仙人@UWA问答社区提供了回答,欢迎大家转至社区交流: https://answer.uwa4d.com/question/5ce4c1a62b27907cff754c5d

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

官网:www.uwa4d.com

官方技术博客:blog.uwa4d.com

官方问答社区:answer.uwa4d.com

官方技术QQ群:793972859(原群已满员)

封面图来源: UnrealEngine--PrototypeMenuSystem

使用虚幻引擎中的蓝图创建的主菜单系统(v4.20)。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

智能时代

智能时代

吴军 / 中信出版集团 / 2016-8 / 68.00

大数据和机器智能的出现,对我们的技术发展、商业和社会都会产生重大的影响。作者吴军在《智能时代:大数据与智能革命重新定义未来》中指出,首先,我们在过去认为非常难以解决的问题,会因为大数据和机器智能的使用而迎刃而解,比如解决癌症个性化治疗的难题。同时,大数据和机器智能还会彻底改变未来的商业模式,很多传统的行业都将采用智能技术实现升级换代,同时改变原有的商业模式。大数据和机器智能对于未来社会的影响是全方......一起来看看 《智能时代》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器