关于字体:对于字体裁剪生僻字的做法
1)对于字体裁剪生僻字的做法2)协程中yield return CoFunction()和yield return StartCoroutine(CoFunction())的区别3)Unity切换场景时对技能特效首次开释卡顿4)《SLG手游的制作与优化》中Shadowmap优化的疑难 这是第324篇UWA技术常识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地把握和学习。 UWA社区主页:answer.uwa4d.comUWA QQ群:465082844 FontQ:咱们我的项目中应用的中文字体TTF文件大于10MB,于是采纳了通用的裁剪生僻字的做法,把字体中低频应用的字形数据删掉了,然而我的项目又有取名相干的需要,并且在玩家取名实现后无论是大厅主界面还是战斗界面都有显示玩家名字的需要,那么在这种状况下有什么办法既能兼容玩家取名一些被裁剪掉的生僻字,又可能无效升高字体TTF Asset内存的做法呢? 我的意思并不是指升高字体图集的大小,而是升高原字体TTF文件的大小。 A:我有个思路题主能够思考试一下: 首先是一个前提,就是TMP图集的内存优化做法:是我参考了UWA DAY 2022中的议题《Unity移动游戏性能优化案例剖析》结尾左右的一个分享。简略来说,就是在游戏我的项目中应用TMP计划时,很多时候内存中会用到一张4096x4096分辨率的Alpha格局的动静图集纹理,内存占用高达32MB。优化形式就是将罕用字符构建为4096x4096的一张动态图集,并通过代码替换纹理、设置压缩格局(如ASTC8x8),则内存降至仅4MB。此时再应用一张512x512的动静图集作为它的Fallback,就能解决生僻字需要了。 基于上述的做法,咱们还晓得TMP中打动态图集后是能够解除对TTF文件的援用的,没有援用,也就不必打进包体、加载进内存;但问题在于,那张小的、用来解决生僻字的动静图集还是要援用TTF能力在运行时生成。那么,咱们就能够思考反向裁剪,也就是只把TTF里的曾经打进动态图集里的常用字裁剪掉而保留生僻字,再把这个解决过的TTF资源作为那张动静图集的援用对象。 通过下面这一系列操作,字体图集纹理和TTF文件的内存占用应该都升高了,同时实践上能达成题主的性能需要。 感激Faust@UWA问答社区提供了答复 ScriptQ:请问协程中yield return CoFunction()和yield return StartCoroutine(CoFunction())有什么区别? 针对以上问题,有教训的敌人欢送转至社区交换分享 PerformanceQ:在切换场景时对技能特效用缓存池提前做了缓存,进入场景后首次开释仍然卡顿,这是为什么呢? A1:首次特效开释的卡顿往往与Shader编译有关系,能够尝试收集Shader变种并提前Warmup一下。感激该用户匿名@UWA问答社区提供了答复 A2:比拟全面的预加载应该模仿实在环境下的播放流程,因而能够在切场景Loading期间,创立一个长期Camera,随后将须要预加载的资源全副在Camera后面播放一下,并调用Camera.Render: 对于特效Prefab,在对象池里实例化,并在Camera视线里实例化并播放一帧,同时调用Camera.Render强制渲染,再回收到对象池。对于Animator和Animation,Animator.Update(1.0)调用Animation.Sample模仿播放一遍,如果有动画事件,确保动画事件关联的特效和声音也在预加载列表里。对于AudioClip,调用PlayOneShot并静音。其余资源按需解决。按以上步骤解决后,下次在实在场景播放时,不会再有任何耗时的逻辑步骤,个别不会再呈现卡顿了。 感激漂泊猫咪2@UWA问答社区提供了答复 ShadowQ:对于UWA DAY 2022系列课程中《SLG手游的制作与优化》的疑难: Shadowmap改良里说能够在生成和承受时把WorldToLightMatrix的计算去掉,这个是怎么做到的?就算不转到光空间也得转到其余空间,怎么都得有矩阵运算得出shadowCoord,而且矩阵乘法是几个MAD,即便顶点很多,vs里跟其余形式比会有很大差别? A:首先,顶点的投影点是在程度面上的,顶点和投影点的绝对关系是比较稳定的,在WorldSpace是这样,在CameraSpace中也是如此。 其次,改良算法中的投影点的偏移计算是产生在CameraSpace中的,所以: 顶点自身MVP计算,是会计算到ViewSpace也就是CameraSpace下的viewPos;光线方向V,在CameraSpace下,是能够提前算一遍的,CPU一帧算一次就好;顶点到投影点的间隔是很容易通过类似三角形算进去的,而且这个比值是固定的,其实就是光线和地立体夹角A的,1/sinA;而A也是能够提前就晓得的,CPU一帧计算一次就好;晓得偏移长度和方向V,是很容易算出偏移的,那么也就很容易算出在ViewSpace下的投影点的地位;到这里,看起来很多步骤(次要是思考过程),其实就是一个MAD的事件;我只想晓得投影点的UV(即Shadowmap的ShadowCoord),所以Projection的过程其实就是一个MAD的事件;依据类似三角形的成像原理,Shadowmap中写入的是顶点在地立体上的Y值;到当初为止VS过程中,一共只用了两个MAD,而一个矩阵运算是四个MAD(不同写法指令不一样)。再次,生成和接管都须要通过这样的计算。 最初,从PPT中最初的性能比照来看,性能的晋升是有的,相差也不算很大,低端机上体现更为显著一点,有1.5ms左右的差距,高端机上差距并不算显著。 它带来对Shadowmap利用率的进步,而导致应用更低Shadowmap Size达到雷同的成果,对于高配机器来说,收益可能更大一点。 感激Jessica@UWA问答社区提供了答复 封面图来源于《SLG手游的制作与优化》课程 明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在UWA问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。 官网:www.uwa4d.com官网技术博客:blog.uwa4d.com官网问答社区:answer.uwa4d.comUWA学堂:edu.uwa4d.com官网技术QQ群:465082844