简单模式和组合模式的兰亭黑字体对比结论
先给数据对比和结论会让文章显得更有价值。
简单模式的兰亭黑字体(GBK编码),7MB,才22026个字,如下两图。
组合模式的兰亭黑字体(GB18030编码),2MB,共35727个字。如下两图。
两者的Unity真机Android进行Profile结果,如下两图。
构建apk包结果,如下两图。
真机体验和进行Profile,两者并无明显显示差异、cpu time/gpu time并无明显差别。
结论也就是说,换成组合模式的兰亭黑后,我们多了CJK3国语言,多了10000多个字,却反倒节省了5MB内存和2MB外存!!!
什么是简单模式字体、什么是组合模式字体
简单模式下的每一个字,都以字为单位进行矢量描述。如下图。
组合模式下的每一个字,会进行部件拆分,以部件为单位进行矢量描述,不同的字公用某些部件。如下图。
因为中文出现非常多公用的偏旁部首,所以,部件共享,为中文省下了异常多的矢量描述。
更进一步的具体原理可参考Composite glyphs and functions - Microsoft。
至于性能差异不大的原因个人推测主要两个:
-
在Unity中文字运行时都是bake到纹理进行展示的。
- 简单模式组合模式的消耗主要集中在矢量转位图,至于组合模式的部件索引、部件偏移这两个额外处理,可以实现得几乎可以忽略不计。