合著者&特别感谢 @duli
敬告
虽然本贴本身是全年龄的,但本帖间接或模糊提到了一些非全年龄内容,可能令人不快,请自行选择是否阅读。
开端
最近想玩某款新出的黄油,虽然作者有发过可能会出中文版,但似乎没了下文。苦等很多天以后发现网上出现了所谓的“汉化优化版”很快啊,我下载下来一看。
啊这,不就是用了我之前玩某款游戏熟悉的 XUnity.AutoTranslator (Unity 游戏自动翻译与替换)[以下简称自动翻译插件]嘛。
九折,他的游戏还是老版本,翻译是繁体还没有几句话。
既然如此,不如自己动手(而且官方还提供了英文版)。
初识
根据我之前玩 ???3D2 的经历,大约的确是所有 Unity 游戏都可以用 BepInEx 进行魔改吧。
熟练打开我熟悉的 BepInEx (Unity 和 .NET 游戏的插件和模组框架) ,定睛一看,这款游戏使用的是 IL2CPP 还得最新测试版的 BepInEx 6.0.0 才能安装,测试版就测试版咯。
安装 XUnity.AutoTranslator-BepInEx-IL2CPP [以下简称B版翻译器]版! 工作正常~
迅速配置好自动翻译插件,兴高采烈打开游戏
Oh! Xhit! 满屏幕的 口口口 □□□
这款游戏没有中文字库!但是那个“汉化优化版”怎么就能显示呢?
:(
Google 了一番 Unity 口口口怎么办,好像都是要下载 Unity 才行。
最后翻到了 I18NFont4UnityGame,试了一下好像要自己构建才行 pass。
又研究了一番自动翻译配置文件,原来自动翻译插件早就考虑到了
readme 里面有这么一行
啊哈,作者还提供了用于替换的字体 TMP_Font_AssetBundles.zip 芜湖,这就是 Unity 游戏翻译终极解决方案罢!
起飞
就是字体有一点点丑
深入
突然想起了还有反和谐模组要装,很快啊,在我不知道什么网站 f95zone 找到了反和谐模组,打开压缩包一看,嗯?
这插件是基于 MelonLoader 的?[以下简称西瓜] 让我 Google 一下。原来是另一款 Unity IL2CPP 游戏的插件和模组框架,这下麻烦了。有没有别的方法呢?
又打开反和谐模组研究了一番,这反和谐模组默认打包用的竟然不是纯血的,而是 BepInEx 使用 BepInEx.MelonLoader.Loader [以下简称套娃插件]插件套娃了 MelonLoader。
这样啊,那直接安装套娃插件,再安装反和谐不就成了!
很快啊,又安装好了,进游戏一看,我的翻译怎么没了???
啊这,是西瓜还是套娃的问题呢?
只能每个组合都试试咯。
幸好 XUnity.AutoTranslator 提供了MelonLoader 版 [以下简称西瓜版翻译器],BepInEx 卸载! MelonLoader 安装!
啊这,所有组合都有问题
这不 Google 一番解决方案…………
你猜我找到了什么?已经有人研究过了(这游戏真火)还顺便找到了翻译过的文本
原来西瓜版翻译器不支持字体替换功能啊。
他居然去修改游戏本体文件了,No No No 这不够优雅,不符合我们的气质。
我们需要更优雅的解决方案。
既然什么办法都试过了,那没办法,只能向上游反馈咯
大致看了一眼没有相关的 Issue,于是我反手就交了一个 Issue。
交完 Issue 的第二天,我又仔细研究了一下有没有相关的 Issue,您猜怎么着?
还真有,#248 已经报告过了,而且作者发布了一个修复版!(这游戏真的火)
啪的一下,安装修复版插件,Wow 所有功能工作正常!有一点点报错但不影响。
终于,第一次进入了游戏,等待我们的……
还是 口口口
岂可修!作者提供的字库不全啊!
再起
好吧好吧,我装 Unity 自己制作 TextMesh Pro 字体包还不行吗。
Unity 安装! 作者在 #182 提供了生成方法,我也通过 Google 在奇怪的论坛(建议别去)找到了详细方法。
西瓜的启动控制台中写明了这游戏是用 2020.03.24f 版做的,我也装了同样的版本。
至于字体嘛,当然是用开源好看的思源黑体。
随便一翻操作,很快嘛,作者怎么说要半小时。结果发现进游戏一个字也没有,好吧,原来还得选字体范围。
看了眼教程,再搜索了一下,发现得选 Unicode 码块,于是我选了个 CJK 码块。
这里记录了所有 Unicode block (区段/码块)
https://zh.wikipedia.org/wiki/Unicode區段
Oh Xhit 没想到这玩意构建这么慢的,台式不在身边,这小笔记本太弱了。
好,找群友帮忙去了 5900HX 还不是美汁汁。感谢 @duli
你不会想到,这之后,居然折腾了整整 3 天。
我们遇到了各种报错,各种 BUG,数不清的问题……
这个码块输进去他那怎么报错了呢? 我这怎么没事呢?(多了一组重复的,你能找出来吗)
各种匪夷所思的问题,什么网络太差、什么开局报错等数不尽的问题……
换了各种版本,试了各种组合……
产出了第一个版本:
emmmm 又是一番调试……
这时候还好,产出一个版本只要大约 30 分钟。
终于,我们产出了可用的第一个版本:
噗噗,还是没有全角符号。
于是我们组合了更全的码块
这总超级无敌全了吧,
西卡西,这么多的字符,配合低效率的 TextMesh Pro,简直就是灾难,毕竟英文就那么几个字符嘛。
如你所见,15.8 万个字符,在 5900HX 上用了约 3 个小时才生成,而我们的字体在这个码块内只有 4.3 万个字符。
很可惜,我们没有精力去排除我们的字体没有的码块了。
这之后,又是各种加载到游戏中不显示字……
好耶,是第二个可用版本:
这一次该有的字符它都有了,但是,它太细了……
又是一番研究,研究了 TextMesh Pro、研究了 AssetBundle Manager、研究了各种字体格式(这个之后单独发一篇)……
无论怎么选它都只能使用 ExtraLight 字重。
省略研究内容 5000 字。
我们搞明白了 TextMesh Pro 3.0.6 是不支持设置字重的!
而 TextMesh Pro 3.2.0 才开始支持设置一个字体包中的字重,可变字体还是不支持。
于是我们安装了 TextMesh Pro 3.2.0-pre.3 但这之后导出的字体没有一个能用的。
当然,我们在研究的时候不会这么有条理,报错也不打一处来,这我们几乎是最后才知道的。
好了,这下 TextMesh Pro 3.2.0 用不了,我们只好去拆字体。
然后把所有语言的普通版拆出来,合成到一个。
在这里找到了拆包的软件(fc2 不是那个啥吗,这研究又是另一回事了)
但我们在合成时遇到了一点小问题,搜索的时候遇到了“我把思源黑体和 Inter 字体合并了 —— Sinter 字体”
文中提到:
啊哈 CJK 部分不正是我们想要的,但找到文末,没有下载地址,也没有作者留的公众号地址。
嗯?
原来是一个垃圾采集站,那没事了。
用文章标题在 Google 进行搜索,找到了一个站酷地址,但很可惜,打开就是
(其实去掉 m. 就行了,但是他们没对电脑访问手机版做处理也挺拉的)(谷歌比较喜欢用手机 UA 去爬)
在谷歌快照里找到了“原文链接”,而这指向的是一个公众号网页…… 是的,公众号是不能被普通的搜索引擎搜索的,必须要在微信里才能搜索到…… 而小程序的本质,不过是 HTML5 页面……
顺便送你们一句话,虽然这句话主要是针对“屏蔽网址链接问题”,而不是可搜索互联网。
终结
回到正题。
于是乎,56 分钟后(用 Linux 效率高了点)我们生成了 TextMesh Pro 的 Sinter 字体,这个字体就是前文提到的 Inter + Source Han Sans CJK 的混合体。
6 天的探索之旅似乎结束了,也是时候发布了。
许可证
Inter 字体、Source Han Sans (思源黑体)字体、Sinter 均采用 SIL OPEN FONT LICENSE Version 1.1 许可证,即允许 “分发、复制、嵌入、衍生作品”
我们的 TextMesh Pro 字体同样使用此许可证,如果您能在使用时提到这个网页就更好了。
发布版 1
基于 Sinter 字体。
发布版 2
基于 Source Han Sans 字体。
我们重新研究了合并方式,发现普通的合并方式并不会跳过已有字体,而是进行叠加。
于是我们决定从头开始,直接从源码构建(居然有 21 G),使用 afdko 配合仓库里提供的命令,直接构建。
注:此版本有 Unicode 共用码表使用日文字形优先的问题,比如“复”字。
2024-01-02 更新
发布版 3 NotoSansSC_sdf32_optimized_12k
基于 Noto Sans CJK Simplified Chinese 字体。
使用了最高质量的 Optimized + SDF32 可以看到在 5900HX 上用了 338.91 小时才生成,足足跑了半个月。
Google 官方描述包含 44806 个字符,可以看到已经几乎包含此字体内所有字符了。
文件名中的年份是打包版本。
一些说明
首先
TMP 字体制作流程
1.下载 Unity
2.导入 font.ttf
3.打开 Text Mesh Pro 的 Font Asset Creator 功能
4.生成字体 asset
5.生成完成后点击保存,得到 font SDF.asset
6.使用 AssetBundles 打包得到的 font SDF.asset
7.得到 font、font.manifest
8.不带后缀的 font 就是我们要的文件
经测试发现,打包 TMP 字体的 Unity 版本必须小于或等于游戏的 Unity 版本,且和生成 font.asset 的版本无关,生成一次 font.asset 可以用任意版本 Unity 打包。
虽然生成的 TMP 字体可以用其他版本打包,但是版本间存在不兼容现象,可能打包不了或者打包了用不了。
如何使用
打包 TMP 字体的 Unity 版本必须小于或等于游戏的 Unity 版本,否则无法正常加载。
注意:
1.阅读 XUnity.AutoTranslator 的说明。
2.把字体丢到游戏根目录
3.调整 Config.ini 的
不要
后话
之前提到的 翻译过的文本 提供处似乎成立了汉化组? 还换了新的仓库。
甚至还提供了了字体,但他们提供的 RiccaV13 的效果嘛……
也许什么时候我会把这个字体提供给他们?
小知识
思源系列字体是 Adobe 与 Google 所领导开发的开放源代码字体家族中的泛 CJK 字体,目前已有思源黑体与思源宋体两种字体,涵盖了简体中文、繁体中文、日文和韩文在内的所有文字。
Adobe 发布的思源家族字体叫做 Source Han Sans(思源黑体)和 Source Han Serif(思源宋体)。
而 Google 发布的思源家族叫做 Noto Sans(思源黑体)与 Noto Serif(思源宋体),把它们纳入了 Google 的 Noto 字体家族中,仅字重称呼不同。
电脑无法显示的字体,会出现空白的方格(□),这些方格又称为 “tofu”“豆腐”。
而 Noto 字体的目的就是要消灭这些豆腐(意即尽可能地补上缺少的字符),所以“Noto”一词其实源自于“No more tofu”(不再有豆腐)。
今天 Noto 字体家族一共涵盖 800 种语言及 110,000 多个字符。
2024/1/2 更新
虽然没有人回复,不过我们生成的字体已经出现在了各种汉化包内。
最近下了一个汉化包,赫然发现是我们生成的字体,这种深藏功与名的感觉也挺不错。
于是决定小小更新一下。
之前我们使用的 Source Han Sans 只给了各个语言的 Unicode 码块,所以我们的 Unicode 码块都是乱找的。
最近看到了 Google 的 Noto Sans,之前没太理解 Noto Sans 为什么只有西方字体,原来 Noto Sans 是模块化的,有什么北美版、CJK 版等等。
这里记录了所有版本:https://github.com/notofonts/noto-docs/tree/main/docs/specimen
而这里记录了包含字符的 Unicode 码块:https://github.com/notofonts/noto-docs/blob/main/docs/specimen/NotoSansCJKsc.md
还得是 Google 的文档详细一点。
然后请 ChatGPT 3.5 把上述文字表述转换成了 Unicode 16 进制码块,得到以下码块:
其实 GPT 还是不靠谱,有错误的码块,比如重复的 2A700-2B73F。
人工复核如下:
然后为了得到最高质量的 TMP 字体,重新研究了所有参数及源代码,无数次内存泄漏溢出,生成了无数个版本。
经过了很多天的排列组合发现 SDF32 是质量最高的,其次是 16,要想字体不太难看 (放超级大写轮眼级),Sampling Point Size 得提高到 50,Padding 最好是 Sampling Point Size 的 1/10。
但是如果开到 50 那么 8192 的贴图只能放下 2 万个左右的字符(30/3 8192x 约能装下 4 万多个字符,40/4 能装下 3 万多个字符)。
查看 TMP 源代码发现控制贴图大小是是一个数组,于是简单魔改了 TextMesh Pro 使其支持生成 16384x16384 的贴图(后面改成 12288x12288 了),并在游戏内测试了可以支持。
然后呢发现如果在 Sampling Point Size 开启 Auto Sizing 的话,TMP 会迭代最多 16 次来找到最佳值,大大减慢速度,所以最好是手动输入。
于是最后使用了最高质量的 50/5 Optimized + SDF32 来生成,Optimized 可以说是超级无敌慢了,在 5900HX 上用了 338.91 小时才生成,足足跑了半个月。
Google 官方描述包含 44806 个字符,可以看到已经几乎包含此字体内所有字符了。
得到以下结论:
最后生成的字体放在上面下载章节了,欢迎下载。
还偶然发现了 天珩字库,其中的“天珩全字库 TH-Tshyn”号称有 Unicode 15.1 以内的所有字符,包括但不限于表情符号(多数为黑白色),也是特别猛,不过是由多个字体拼接而来。
但是现在一个 TTF 中只能有 65535 个字形,所以这个超级字体包是由多个 TTF 组成的,TextMeshPro 和 XUnity.AutoTranslator 并不能处理。
“天珩手机字库 TH-Feon”倒是是单文件的,号称完美支持 Unicode 15.0 中几乎所有 9 万余汉字,不过感觉没有什么必要。
Did you get anything from here?
Welcome to share!
敬告
虽然本贴本身是全年龄的,但本帖间接或模糊提到了一些非全年龄内容,可能令人不快,请自行选择是否阅读。
开端
最近想玩某款新出的黄油,虽然作者有发过可能会出中文版,但似乎没了下文。苦等很多天以后发现网上出现了所谓的“汉化优化版”很快啊,我下载下来一看。
啊这,不就是用了我之前玩某款游戏熟悉的 XUnity.AutoTranslator (Unity 游戏自动翻译与替换)[以下简称自动翻译插件]嘛。
九折,他的游戏还是老版本,翻译是繁体还没有几句话。
既然如此,不如自己动手(而且官方还提供了英文版)。
初识
根据我之前玩 ???3D2 的经历,大约的确是所有 Unity 游戏都可以用 BepInEx 进行魔改吧。
熟练打开我熟悉的 BepInEx (Unity 和 .NET 游戏的插件和模组框架) ,定睛一看,这款游戏使用的是 IL2CPP 还得最新测试版的 BepInEx 6.0.0 才能安装,测试版就测试版咯。
安装 XUnity.AutoTranslator-BepInEx-IL2CPP [以下简称B版翻译器]版! 工作正常~
迅速配置好自动翻译插件,兴高采烈打开游戏
Oh! Xhit! 满屏幕的 口口口 □□□
这款游戏没有中文字库!但是那个“汉化优化版”怎么就能显示呢?
:(
Google 了一番 Unity 口口口怎么办,好像都是要下载 Unity 才行。
最后翻到了 I18NFont4UnityGame,试了一下好像要自己构建才行 pass。
又研究了一番自动翻译配置文件,原来自动翻译插件早就考虑到了
readme 里面有这么一行
代码:
OverrideFontTextMeshPro = ; 考虑改用 FallbackFontTextMeshPro。更新文本组件时覆盖用于文本的字体。注意:仅适用于 TextMeshPro
啊哈,作者还提供了用于替换的字体 TMP_Font_AssetBundles.zip 芜湖,这就是 Unity 游戏翻译终极解决方案罢!
起飞
就是字体有一点点丑
深入
突然想起了还有反和谐模组要装,很快啊,在我不知道什么网站 f95zone 找到了反和谐模组,打开压缩包一看,嗯?
这插件是基于 MelonLoader 的?[以下简称西瓜] 让我 Google 一下。原来是另一款 Unity IL2CPP 游戏的插件和模组框架,这下麻烦了。有没有别的方法呢?
又打开反和谐模组研究了一番,这反和谐模组默认打包用的竟然不是纯血的,而是 BepInEx 使用 BepInEx.MelonLoader.Loader [以下简称套娃插件]插件套娃了 MelonLoader。
这样啊,那直接安装套娃插件,再安装反和谐不就成了!
很快啊,又安装好了,进游戏一看,我的翻译怎么没了???
啊这,是西瓜还是套娃的问题呢?
只能每个组合都试试咯。
幸好 XUnity.AutoTranslator 提供了MelonLoader 版 [以下简称西瓜版翻译器],BepInEx 卸载! MelonLoader 安装!
- 组合1:套娃插件+西瓜版翻译器 → 根本不工作
- 组合2:套娃插件+B版翻译器 → 翻译功能不工作
- 组合2:纯血 Bepinex → 没有反和谐
- 组合3:纯血西瓜 → TextMeshPro 字体替换功能不工作(口口口)
啊这,所有组合都有问题
这不 Google 一番解决方案…………
你猜我找到了什么?已经有人研究过了(这游戏真火)还顺便找到了翻译过的文本
原来西瓜版翻译器不支持字体替换功能啊。
他居然去修改游戏本体文件了,No No No 这不够优雅,不符合我们的气质。
我们需要更优雅的解决方案。
既然什么办法都试过了,那没办法,只能向上游反馈咯
大致看了一眼没有相关的 Issue,于是我反手就交了一个 Issue。
交完 Issue 的第二天,我又仔细研究了一下有没有相关的 Issue,您猜怎么着?
还真有,#248 已经报告过了,而且作者发布了一个修复版!(这游戏真的火)
*这个 Issue 的质量太太太太差了! 大家一定要学会优雅地报告啊~
*有时候大家还是要学会向上游反馈问题,自己埋头苦干有可能久久没有结果,而上游则可以很快帮你解决。这个时代联系上游是很容易的,但一定要注意优雅反馈,提供充足的信息。
啪的一下,安装修复版插件,Wow 所有功能工作正常!有一点点报错但不影响。
终于,第一次进入了游戏,等待我们的……
还是 口口口
岂可修!作者提供的字库不全啊!
再起
好吧好吧,我装 Unity 自己制作 TextMesh Pro 字体包还不行吗。
Unity 安装! 作者在 #182 提供了生成方法,我也通过 Google 在奇怪的论坛(建议别去)找到了详细方法。
西瓜的启动控制台中写明了这游戏是用 2020.03.24f 版做的,我也装了同样的版本。
至于字体嘛,当然是用开源好看的思源黑体。
随便一翻操作,很快嘛,作者怎么说要半小时。结果发现进游戏一个字也没有,好吧,原来还得选字体范围。
看了眼教程,再搜索了一下,发现得选 Unicode 码块,于是我选了个 CJK 码块。
代码:
4E00-9FFF,3400-4DBF,20000-2A6DF,2A700–2B73F,2B740–2B81F,2B820–2CEAF,F900-FAFF,2F800-2FA1F,0000-052F,2E80-2EFF,3000-4DBF,4E00-9FFF,AC00-D7AF
这里记录了所有 Unicode block (区段/码块)
https://zh.wikipedia.org/wiki/Unicode區段
Oh Xhit 没想到这玩意构建这么慢的,台式不在身边,这小笔记本太弱了。
好,找群友帮忙去了 5900HX 还不是美汁汁。感谢 @duli
你不会想到,这之后,居然折腾了整整 3 天。
我们遇到了各种报错,各种 BUG,数不清的问题……
代码:
20-7E,A0-FF,2000-200F,2012-2022,2026,202A-2030,2032-2034,2039-203A,203C,203E,2044,205E,206A-206F,20AC,2122,25A1,4E00-9FFF,3400-4DBF,20000-2A6DF,2A700–2B73F,2B740–2B81F,2B820–2CEAF,F900-FAFF,2F800-2FA1F,0000-052F,2E80-2EFF,3000-4DBF,4E00-9FFF,AC00-D7AF
这个码块输进去他那怎么报错了呢? 我这怎么没事呢?(多了一组重复的,你能找出来吗)
各种匪夷所思的问题,什么网络太差、什么开局报错等数不尽的问题……
换了各种版本,试了各种组合……
产出了第一个版本:
emmmm 又是一番调试……
这时候还好,产出一个版本只要大约 30 分钟。
终于,我们产出了可用的第一个版本:
噗噗,还是没有全角符号。
于是我们组合了更全的码块
代码:
4E00-9FFF,3400-4DBF,20000-2A6DF,2A700–2B73F,2B740–2B81F,2B820–2CEAF,F900-FAFF,2F800-2FA1F,2E80-FE4F,FF00-FFEF,2E80-2EFF,3000-303F,31C0-31EF,2F00-2FDF,2FF0-2FFF,3100-312F,31A0-31BF,3040-309F,30A0-30FF,31F0-31FF,AC00-D7AF,1100-11FF,3130-318F,2800-28FF,3200-32FF,3300-33FF,2700-27BF,2600-26FF,FE10-FE1F,FE30-FE4F,0000-052F,2E80-2EFF,3000-4DBF,AC00-D7AF,2F800–2FA1F,9FA6–9FB3,9FB4–9FBB,9FBC–9FC2,9FC3,9FC4–9FC6,9FC7–9FCB
这总超级无敌全了吧,
西卡西,这么多的字符,配合低效率的 TextMesh Pro,简直就是灾难,毕竟英文就那么几个字符嘛。
如你所见,15.8 万个字符,在 5900HX 上用了约 3 个小时才生成,而我们的字体在这个码块内只有 4.3 万个字符。
很可惜,我们没有精力去排除我们的字体没有的码块了。
这之后,又是各种加载到游戏中不显示字……
好耶,是第二个可用版本:
这一次该有的字符它都有了,但是,它太细了……
又是一番研究,研究了 TextMesh Pro、研究了 AssetBundle Manager、研究了各种字体格式(这个之后单独发一篇)……
无论怎么选它都只能使用 ExtraLight 字重。
省略研究内容 5000 字。
我们搞明白了 TextMesh Pro 3.0.6 是不支持设置字重的!
而 TextMesh Pro 3.2.0 才开始支持设置一个字体包中的字重,可变字体还是不支持。
于是我们安装了 TextMesh Pro 3.2.0-pre.3 但这之后导出的字体没有一个能用的。
当然,我们在研究的时候不会这么有条理,报错也不打一处来,这我们几乎是最后才知道的。
好了,这下 TextMesh Pro 3.2.0 用不了,我们只好去拆字体。
然后把所有语言的普通版拆出来,合成到一个。
在这里找到了拆包的软件(fc2 不是那个啥吗,这研究又是另一回事了)
但我们在合成时遇到了一点小问题,搜索的时候遇到了“我把思源黑体和 Inter 字体合并了 —— Sinter 字体”
文中提到:
“言归正传,这次字体合并的内容,是把 Inter 字体里所有字符都合入到思源黑体中,而思源黑体只保留 CJK 部分 (即中日韩文字以及相关标点) ,其余如阿拉伯数字,英文字母等都由 Inter 来代替。这样在中英混排的时候,就无需来回切换字体,实现一步到位。”
啊哈 CJK 部分不正是我们想要的,但找到文末,没有下载地址,也没有作者留的公众号地址。
嗯?
“声明:本站所有文章,如无特殊说明或标注,均来源于互联网,本站只做文章收集和发布。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。”
原来是一个垃圾采集站,那没事了。
用文章标题在 Google 进行搜索,找到了一个站酷地址,但很可惜,打开就是
An unexpected error has occurred.
(其实去掉 m. 就行了,但是他们没对电脑访问手机版做处理也挺拉的)(谷歌比较喜欢用手机 UA 去爬)
在谷歌快照里找到了“原文链接”,而这指向的是一个公众号网页…… 是的,公众号是不能被普通的搜索引擎搜索的,必须要在微信里才能搜索到…… 而小程序的本质,不过是 HTML5 页面……
不得不说,某些国内互联网企业真的很恶心,到处搞孤岛,丝毫没有一点互联网精神。张小龙你 因特网不能搜索还叫因特网吗? 你 是不是又要重新发明互联网,制造互联网孤岛很有意思吗?
顺便送你们一句话,虽然这句话主要是针对“屏蔽网址链接问题”,而不是可搜索互联网。
工信部、国家网信办相继召开会议,聚焦“屏蔽网址链接问题”,推动互联网产业互联互通已成国家意志,各方必须达成共识:互联互通是互联网高质量发展的必然路径。
终结
回到正题。
于是乎,56 分钟后(用 Linux 效率高了点)我们生成了 TextMesh Pro 的 Sinter 字体,这个字体就是前文提到的 Inter + Source Han Sans CJK 的混合体。
6 天的探索之旅似乎结束了,也是时候发布了。
许可证
Inter 字体、Source Han Sans (思源黑体)字体、Sinter 均采用 SIL OPEN FONT LICENSE Version 1.1 许可证,即允许 “分发、复制、嵌入、衍生作品”
我们的 TextMesh Pro 字体同样使用此许可证,如果您能在使用时提到这个网页就更好了。
发布版 1
基于 Sinter 字体。
- Unity:2020.3.24f1
- TextMesh Pro:3.0.6
- AssetBundles-Browser:1.7.0
- 字体:Sinter( Inter + Source Han Sans CJK) 1.00
- 字重:Normal
- 字符数:30546(包含)/158625(生成范围)
- 不准确字符范围:简体中文、繁体中文、韩文、日文、英文、符号
- 贴图大小:8192x8192
- 许可证:SIL OPEN FONT LICENSE Version 1.1
- 链接:https://mega.nz/folder/YiIHkILI#qhKBRGWsJx_W4hlzowDwsA
发布版 2
基于 Source Han Sans 字体。
我们重新研究了合并方式,发现普通的合并方式并不会跳过已有字体,而是进行叠加。
于是我们决定从头开始,直接从源码构建(居然有 21 G),使用 afdko 配合仓库里提供的命令,直接构建。
注:此版本有 Unicode 共用码表使用日文字形优先的问题,比如“复”字。
- Unity:2020.3.24f1
- TextMesh Pro:3.0.6
- AssetBundles-Browser:1.7.0
- 字体:Source Han Sans CJK (Version 2.004 hotconv 1.1.0 makeotfexe 2.6.0)
- 字重:Normal
- 字符数:43687(包含)/158625(生成范围)
- 不准确字符范围:简体中文、繁体中文、韩文、日文、英文、符号
- 贴图大小:8192x8192
- 许可证:SIL OPEN FONT LICENSE Version 1.1
- 链接:https://mega.nz/folder/YiIHkILI#qhKBRGWsJx_W4hlzowDwsA
2024-01-02 更新
发布版 3 NotoSansSC_sdf32_optimized_12k
基于 Noto Sans CJK Simplified Chinese 字体。
- Unity:2018.4.36f1
- TextMesh Pro:1.4.1 魔改 12k
- AssetBundles-Browser:1.7.0
- 字体:Noto Sans CJK SC (版本 Google 没写、链接)
- 字重:Regular
- 字符数:44766(包含)/106240(生成范围)
- 不准确字符范围:简体中文、繁体中文、韩文、日文、英文、符号
- 贴图大小:12288x12288
- 许可证:Open Font License
- 链接:https://mega.nz/folder/YiIHkILI#qhKBRGWsJx_W4hlzowDwsA
使用了最高质量的 Optimized + SDF32 可以看到在 5900HX 上用了 338.91 小时才生成,足足跑了半个月。
Google 官方描述包含 44806 个字符,可以看到已经几乎包含此字体内所有字符了。
文件名中的年份是打包版本。
一些说明
首先
TMP 字体制作流程
1.下载 Unity
2.导入 font.ttf
3.打开 Text Mesh Pro 的 Font Asset Creator 功能
4.生成字体 asset
5.生成完成后点击保存,得到 font SDF.asset
6.使用 AssetBundles 打包得到的 font SDF.asset
7.得到 font、font.manifest
8.不带后缀的 font 就是我们要的文件
经测试发现,打包 TMP 字体的 Unity 版本必须小于或等于游戏的 Unity 版本,且和生成 font.asset 的版本无关,生成一次 font.asset 可以用任意版本 Unity 打包。
虽然生成的 TMP 字体可以用其他版本打包,但是版本间存在不兼容现象,可能打包不了或者打包了用不了。
如何使用
打包 TMP 字体的 Unity 版本必须小于或等于游戏的 Unity 版本,否则无法正常加载。
注意:
- OverrideFontTextMeshPro 会覆盖所有字体,某些特效字体会导致显示错乱,请注意。这是无法解决的。
- FallbackFontTextMeshPro 只会才缺字时才替换,由于不可能和作者用的资源一样,所以肯定会丑,这也是没办法的事。
1.阅读 XUnity.AutoTranslator 的说明。
2.把字体丢到游戏根目录
3.调整 Config.ini 的
FallbackFontTextMeshPro=
或 OverrideFontTextMeshPro=
指向字体目录(根目录直接写文件名)。不要
FallbackFontTextMeshPro=
和 OverrideFontTextMeshPro=
都填一样的,否则只会应用 Fallback ,你只应该填其中一个。后话
之前提到的 翻译过的文本 提供处似乎成立了汉化组? 还换了新的仓库。
甚至还提供了了字体,但他们提供的 RiccaV13 的效果嘛……
也许什么时候我会把这个字体提供给他们?
使用 Google 吧,至少使用 Bing。使用百毒的话,也许下辈子也找不到这些东西,倒是百毒随便搜个什么都能跳出来色情联想词,不愧是第一大 X 网。
小知识
思源系列字体是 Adobe 与 Google 所领导开发的开放源代码字体家族中的泛 CJK 字体,目前已有思源黑体与思源宋体两种字体,涵盖了简体中文、繁体中文、日文和韩文在内的所有文字。
Adobe 发布的思源家族字体叫做 Source Han Sans(思源黑体)和 Source Han Serif(思源宋体)。
而 Google 发布的思源家族叫做 Noto Sans(思源黑体)与 Noto Serif(思源宋体),把它们纳入了 Google 的 Noto 字体家族中,仅字重称呼不同。
电脑无法显示的字体,会出现空白的方格(□),这些方格又称为 “tofu”“豆腐”。
而 Noto 字体的目的就是要消灭这些豆腐(意即尽可能地补上缺少的字符),所以“Noto”一词其实源自于“No more tofu”(不再有豆腐)。
今天 Noto 字体家族一共涵盖 800 种语言及 110,000 多个字符。
2024/1/2 更新
虽然没有人回复,不过我们生成的字体已经出现在了各种汉化包内。
最近下了一个汉化包,赫然发现是我们生成的字体,这种深藏功与名的感觉也挺不错。
于是决定小小更新一下。
之前我们使用的 Source Han Sans 只给了各个语言的 Unicode 码块,所以我们的 Unicode 码块都是乱找的。
最近看到了 Google 的 Noto Sans,之前没太理解 Noto Sans 为什么只有西方字体,原来 Noto Sans 是模块化的,有什么北美版、CJK 版等等。
这里记录了所有版本:https://github.com/notofonts/noto-docs/tree/main/docs/specimen
而这里记录了包含字符的 Unicode 码块:https://github.com/notofonts/noto-docs/blob/main/docs/specimen/NotoSansCJKsc.md
还得是 Google 的文档详细一点。
Noto Sans CJK SC contains 65,535 glyphs, 23 OpenType features, and supports 44,806 characters from 55 Unicode blocks: CJK Unified Ideographs, Hangul Syllables, CJK Unified Ideographs Extension A, CJK Unified Ideographs Extension B, CJK Compatibility Ideographs, Hangul Jamo, CJK Compatibility, Halfwidth and Fullwidth Forms, Kangxi Radicals, Enclosed CJK Letters and Months, Enclosed Alphanumeric Supplement, Box Drawing, CJK Radicals Supplement, CJK Unified Ideographs Extension E, Katakana, Hangul Compatibility Jamo, Hiragana, Latin Extended Additional, Latin-1 Supplement, Basic Latin, Enclosed Alphanumerics, Mathematical Operators, Hangul Jamo Extended-B, Cyrillic, Enclosed Ideographic Supplement, CJK Compatibility Ideographs Supplement, CJK Symbols and Punctuation, Miscellaneous Symbols, Greek and Coptic, CJK Unified Ideographs Extension C, Bopomofo, Geometric Shapes, CJK Strokes, General Punctuation, CJK Unified Ideographs Extension D, Block Elements, CJK Compatibility Forms, Latin Extended-A, Hangul Jamo Extended-A, Bopomofo Extended, Miscellaneous Technical, Small Form Variants, Arrows, Latin Extended-B, Letterlike Symbols, Katakana Phonetic Extensions, Kanbun, Ideographic Description Characters, Vertical Forms, Spacing Modifier Letters, Dingbats, Combining Diacritical Marks, Miscellaneous Symbols and Arrows, Alphabetic Presentation Forms, CJK Unified Ideographs Extension F.
Noto Sans CJK SC 包含 65535 个字形、23 个 OpenType 特性,并支持来自 55 个 Unicode 块的 44806 个字符:CJK 统一表意文字、谚文音节、CJK 统一表意文字扩展 A、CJK 统一表意文字扩展 B、CJK 兼容表意文字、谚文字母、CJK 兼容、半角和全角形式、康熙部首、围绕的 CJK 字母和月份、围绕的字母数字补充、方框绘图、CJK 部首补充、CJK 统一表意文字扩展 E、片假名、兼容谚文字母、平假名、拉丁扩展附加、拉丁-1 补充、基本拉丁、封闭字母数字、数学运算符、谚文字母扩展 B、西里尔文、封闭表意符号补充、CJK 兼容表意文字补充、CJK 符号和标点、杂项符号、希腊文和科普特文、CJK 统一表意文字扩展 C、注音符号、几何形状、CJK 笔画、常规标点符号、CJK 统一表意文字扩展 D、块状元素、CJK 兼容形式、拉丁扩展-A、谚文字母扩展-A、注音符号扩展、杂项技术、小型形式变体、箭头、拉丁扩展-B、类似字母符号、片假名拼音扩展、刊文、表意描述字符、垂直形式、间距修饰字母、装饰符号、组合变音符号、杂项符号和箭头、字母表演示形式、CJK 统一表意文字扩展 F。(ChatGPT 3.5 翻译)
然后请 ChatGPT 3.5 把上述文字表述转换成了 Unicode 16 进制码块,得到以下码块:
代码:
4E00-9FFF,AC00-D7AF,3400-4DBF,20000-2A6DF,F900-FAFF,1100-11FF,3300-33FF,FF00-FFEF,2F00-2FDF,3200-32FF,2460-24FF,2500-257F,2E80-2EFF,2A700-2B73F,30A0-30FF,3130-318F,3040-309F,1E00-1EFF,0080-00FF,0020-007F,2460-24FF,2200-22FF,D7B0-D7FF,0400-04FF,1F200-1F2FF,2F800-2FA1F,3000-303F,2600-26FF,0370-03FF,2A700-2B73F,3100-312F,25A0-25FF,31C0-31EF,2000-206F,2B740-2B81F,2580-259F,FE30-FE4F,0100-017F,A960-A97F,31A0-31BF,2300-23FF,FE50-FE6F,2190-21FF,0180-024F,2100-214F,31F0-31FF,3190-319F,2FF0-2FFF,FE10-FE1F,02B0-02FF,2700-27BF,0300-036F,2B00-2BFF,FB00-FB4F,2B820-2CEAF
其实 GPT 还是不靠谱,有错误的码块,比如重复的 2A700-2B73F。
人工复核如下:
代码:
4E00-9FFF,AC00-D7AF,F900-FAFF,1100-11FF,3300-33FF,FF00-FFEF,2F00-2FDF,3200-32FF,1F100-1F1FF,2500-257F,2E80-2EFF,30A0-30FF,3130-318F,3040-309F,1E00-1EFF,0080-00FF,0000-007F,2460-24FF,2200-22FF,D7B0-D7FF,0400-04FF,1F200-1F2FF,2F800-2FA1F,3000-303F,2600-26FF,0370-03FF,3100-312F,25A0-25FF,31C0-31EF,2000-206F,2580-259F,FE30-FE4F,0100-017F,A960-A97F,31A0-31BF,2300-23FF,FE50-FE6F,2190-21FF,0180-024F,2100-214F,31F0-31FF,3190-319F,2FF0-2FFF,FE10-FE1F,02B0-02FF,2700-27BF,0300-036F,2B00-2BFF,FB00-FB4F,3400-4DBF,20000-2A6DF,2A700-2B73F,2B740-2B81F,2B820-2CEAF,2CEB0-2EBEF
然后为了得到最高质量的 TMP 字体,重新研究了所有参数及源代码,无数次内存泄漏溢出,生成了无数个版本。
经过了很多天的排列组合发现 SDF32 是质量最高的,其次是 16,要想字体不太难看 (放超级大写轮眼级),Sampling Point Size 得提高到 50,Padding 最好是 Sampling Point Size 的 1/10。
但是如果开到 50 那么 8192 的贴图只能放下 2 万个左右的字符(30/3 8192x 约能装下 4 万多个字符,40/4 能装下 3 万多个字符)。
查看 TMP 源代码发现控制贴图大小是是一个数组,于是简单魔改了 TextMesh Pro 使其支持生成 16384x16384 的贴图(后面改成 12288x12288 了),并在游戏内测试了可以支持。
然后呢发现如果在 Sampling Point Size 开启 Auto Sizing 的话,TMP 会迭代最多 16 次来找到最佳值,大大减慢速度,所以最好是手动输入。
于是最后使用了最高质量的 50/5 Optimized + SDF32 来生成,Optimized 可以说是超级无敌慢了,在 5900HX 上用了 338.91 小时才生成,足足跑了半个月。
Google 官方描述包含 44806 个字符,可以看到已经几乎包含此字体内所有字符了。
得到以下结论:
- 打包 TMP 字体的 Unity 版本必须小于或等于游戏的 Unity 版本,所以我们选择尽可能低的版本。
- 生成的 TMP 字体虽然可以用其他版本打包,但是版本间存在不兼容现象,可能打包不了或者打包了用 不了。
- TextMesh Pro 1.4.1 以前的版本 Linux 不支持,所以最低版本只能 1.4.1,Windows 跑太慢。
- TextMesh Pro 1.4.1 版本 8192x SDFS32 内存泄漏溢出 32G 内存也不够,要差不多 48G。
- TextMesh Pro 1.4.1 版本中 SDF32 渲染是单线程贼慢,但是 SDFAA 不是,所以很快。
最后生成的字体放在上面下载章节了,欢迎下载。
还偶然发现了 天珩字库,其中的“天珩全字库 TH-Tshyn”号称有 Unicode 15.1 以内的所有字符,包括但不限于表情符号(多数为黑白色),也是特别猛,不过是由多个字体拼接而来。
但是现在一个 TTF 中只能有 65535 个字形,所以这个超级字体包是由多个 TTF 组成的,TextMeshPro 和 XUnity.AutoTranslator 并不能处理。
“天珩手机字库 TH-Feon”倒是是单文件的,号称完美支持 Unicode 15.0 中几乎所有 9 万余汉字,不过感觉没有什么必要。
Did you get anything from here?
Welcome to share!
由版主最后编辑: