美文网首页unity优化UnityUnity教程合集
在Unity项目中的简单模式字体和组合模式字体

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

作者: DonaldW | 来源:发表于2015-08-18 23:32 被阅读1775次

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

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

    简单模式的兰亭黑字体(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. 简单模式组合模式的消耗主要集中在矢量转位图,至于组合模式的部件索引、部件偏移这两个额外处理,可以实现得几乎可以忽略不计。

    相关文章

      网友评论

      • 灵魂重新:话说这个组合模式的字体是肿么来的,求思路
      • 54d14480ed0b:作者可否提供一下ttf的下载,尤其是组合的。
      • 31f23a3cab12:学习了。

        我们使用微软雅黑,2.9M。
      • 24c946424a4f:这个“组合模式”字库是你通过“简单模式”转换的还是现成的啊?
        转换的话用的什么工具,现成的话到哪里可以找到。
        我用FontCreator看了几个字库没发现“合成字形属性”面板,这表示这个字库不是“组合模式”吧?
        在线等~~~ :kissing_heart:
      • KramerZhang:似乎不是每种字体都可以如此操作,比如雅黑字体中通过将『扌』和『非』两子部件整体缩放组成『排』时,效果和原来简单类型的『排』有一些细微差异。
      • KramerZhang:请教一个问题:
        比如『排』,可以由字库中的『扌』和『非』两个独立文字组成,但是『扌』和『非』组合成『排』的过程,子部件可能需要进行位置及大小的调整,并且每一种字体中子部件具体调整值可能不一样。

        按照FontCreator的文档中说明定义文字组合方式的数据在CompositeData.xml中,请问有无机器的方式针对具体字体生成CompositeData.xml,或者是否方便透露本文中兰亭黑字体的CompositeData.xml是怎样的生产流程,谢谢。
      • KramerZhang:收获大大,非常感谢。
      • ab766d330490:原来字体大小还有这种玄虚

      本文标题:在Unity项目中的简单模式字体和组合模式字体

      本文链接:https://www.haomeiwen.com/subject/zyqgqttx.html