(仅支持 Linux ,特别地,也支持 Bash On Windows )
Minecraft 渲染 Unicode 文字的思路是把0x00000000
到0xFFFFFFFF
的每个文字都做成材质贴图,按照高 16 位进行分割,形成assets/minectaft/textures/font/unicode_page_ff.png
这样的图片,每个文字都是方格的;
为了解决文字宽度不同的问题,设置了一个文件(assets/minecraft/font/glyph_sizes.bin
)来保存对应图像的水平坐标区间,采用一个字节来保存(高 4 位保存 xMin ,低 4 位保存 xMax ,当然精度方面也就只有 4 位了,但是考虑到 mc 的马赛克性质,确实足够用了),这些字节直接按照 Unicode 值作为文件中位置。
这种方法的确不是完美方法,因为 Unicode 中的好多特性都不能实现(比如 RTL ,组合字符等等)——但是,对于一款游戏而言,这种处理可以说是比较好的了。
研究完原理之后,我就直接手撸了一个字体材质生成器——当然不是直接生成.zip
形式的字体包,不过也差不多了,只需要指定输出文件(glyph_sizes.bin
)和材质输出目录就可以输出,如果需要打包成材质包的话,还需要补全目录结构和pack.mcmeta
文件。
glyoh_sizes.bin
文件,以支持非等宽字体。注意:没有禁止超高分辨率图像的生成,所以可以生成超出 Minecraft 渲染极限的材质——显然大于等于16384x 的材质包是没有意义的(除了用于测试电脑性能)。
效果预览:( Inziu Iosevka SC 字体, 1024x )
PS:显然采用类似技术输出 Unicode 文字的游戏应该挺多的,但是想不通为啥都 2016 年了,还有好多游戏中文显示不了的(不说输入问题了,就说输出的),然后想到 ASCII 总共才 256 个字符,差不多就想通了。。。。。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.