在Unity项目中的简单模式字体和组合模式字体

简单模式和组合模式的兰亭黑字体对比结论

先给数据对比和结论会让文章显得更有价值。

简单模式的兰亭黑字体(GBK编码),7MB,才22026个字,如下两图。

简单模式的兰亭黑字体,7MB

简单模式的兰亭黑字体,22026个字,7MB

组合模式的兰亭黑字体(GB18030编码),2MB,共35727个字。如下两图。

组合模式的兰亭黑字体,2MB
组合模式的兰亭黑字体(GB18030编码),2MB,共35727个字

两者的Unity真机Android进行Profile结果,如下两图。


Unity真机Android进行Profile,简单模式的兰亭黑占用内存7MB
Unity真机Android进行Profile,组合模式的兰亭黑占用内存2MB

构建apk包结果,如下两图。

简单模式的兰亭黑占用外存212MB

组合模式的兰亭黑占用外存210MB

真机体验和进行Profile,两者并无明显显示差异、cpu time/gpu time并无明显差别。

结论也就是说,换成组合模式的兰亭黑后,我们多了CJK3国语言,多了10000多个字,却反倒节省了5MB内存和2MB外存!!!

什么是简单模式字体、什么是组合模式字体

简单模式下的每一个字,都以字为单位进行矢量描述。如下图。


简单模式的“侣”字,“侣”字一个整体进行矢量描述

组合模式下的每一个字,会进行部件拆分,以部件为单位进行矢量描述,不同的字公用某些部件。如下图。


组合模式的“握”字,拆分为“提手旁”和“屋”两个部件,每个部件单独进行矢量描述

因为中文出现非常多公用的偏旁部首,所以,部件共享,为中文省下了异常多的矢量描述。

更进一步的具体原理可参考Composite glyphs and functions - Microsoft

至于性能差异不大的原因个人推测主要两个:

  1. 在Unity中文字运行时都是bake到纹理进行展示的。


    某个时刻被bake到运行时纹理里的文字
  2. 简单模式组合模式的消耗主要集中在矢量转位图,至于组合模式的部件索引、部件偏移这两个额外处理,可以实现得几乎可以忽略不计。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,284评论 25 708
  • CSS编码规范 1 前言 CSS 作为网页样式的描述语言,在百度一直有着广泛的应用。本文档的目标是使 CSS 代码...
    Top_Chenxi阅读 168评论 0 0
  • 我是2013年办的信用卡。 当时一个同事有个招商银行的朋友,有一天这人趁着中午休息的时间,到办公室把公司几个没信用...
    一对er阅读 395评论 0 0
  • 信息全球化时代,除了可以让我们可以用最快的速度找到想要的资讯之外,也让我们这个社会变得更加浮躁,社会竞争激烈,谁想...
    花影桐阅读 955评论 0 0
  • 01 还是会在无数个日夜想起你,就像这样,看着你曾留给我的那些只言片语,对着电脑敲打一些跟你有关的文字。 ...
    伊水若阅读 274评论 0 5