Modern UI by Icyllis Milica
说明:
Modern UI(由 Icyllis Milica 开发)是一个桌面应用程序框架,专为独立的 2D 和 3D 渲染软件开发而设计。它利用现代 3D 图形 API 和技术,以高性能提供实时渲染。同时,Modern UI 还改进并优化了一组 Google Android 所使用的功能,以及其自有的一套支持国际化的文本引擎。
Minecraft 版 Modern UI 是一个基于 Modern UI Core Framework 和 Modern UI Core Extensions 的 Minecraft Mod。它在 Minecraft 环境中提供 Modern UI 引导程序,以及基于 Forge/Fabric 的 Modding API,用于在 Minecraft 中创建强大的图形用户界面。
对于客户端,默认按下 Ctrl+K 或 ⌘+K 可打开 Action Center 界面来配置 Modern UI。(注意:你可以左右滑动 Preferences 界面来配置字体)
此 Mod 还包含一个专为 Minecraft 设计的强大文本布局引擎和文本渲染系统。
该引擎为处理 Unicode 文本提供了合适的方法,并让你在任意缩放下、2D/3D 中都能获得更易读的文本。具体包括:
- 实时预览和重载 TrueType/OpenType 字体
- 更好的字体回退实现
- 抗锯齿文本和 FreeType 字体微调
- 在 2D/3D 中使用改进的 SDF 文本渲染(也使用批量渲染)
- 在设备空间中精确计算字体大小,以进行原生字形渲染
- 使用 Google Noto Color Emoji,并支持全部 Unicode 15.1 Emoji(2023 年 9 月 12 日)
- 可配置的双向文本启发式算法
- 可配置的文本阴影和原始字体大小
- Unicode 换行以及 CSS line-break 与 word-break
- 快速、精确且异步的 Unicode 文本布局计算
- 更快且更节省内存的字形矩形打包算法
- 使用真正的灰度纹理(每像素 1 字节,而 Minecraft 为 4 bpp)
- 兼容 OptiFine、Sodium(Rubidium)、Iris(Oculus)以及许多其他 Mod
- 兼容 Minecraft 的 JSON 字体定义(位图字体、TTF 字体)
此外,此 Mod 还提供了许多可提升游戏性能和游玩体验的实用功能。目前包括:
- 更改界面背景颜色
- 对界面背景图像应用高斯模糊
- 界面背景淡入动画
- 更多窗口模式:全屏(无边框)、最大化(无边框)
- 当窗口未激活(失焦)或最小化时,降低帧率上限并淡出主音量
- 打开背包时暂停单人游戏
- 将 GUI 缩放选项改为滑块并提供提示文本
- 当 Minecraft 加载完成并进入主菜单时播放“Ding”提示音
- 为原版 Selection List 和 Forge Scroll Panel 启用平滑滚动
- 按下 “C” 进行缩放,效果与 OptiFine 相同
- 为所有文本框提供撤销/重做(Ctrl+Z/Ctrl+Y)以及 Unicode 字素簇/单词迭代器
- 播放本地音乐,支持拖动进度和查看频谱
- 在聊天中支持 Discord/Slack/GitHub/IamCal/JoyPixels emoji shortcodes
- 更美观的工具提示样式
- 可选择圆角边框或普通边框(带阴影效果)
- 添加标题分隔线并控制标题行间距
- 超出屏幕时自动换行并自动垂直滚动
- 标题行居中,支持 RTL 布局方向
- 将工具提示精确定位到像素网格(平滑移动)
- 更改背景颜色和边框颜色(支持渐变和动画)
核心特性:
- 支持多种图形 API 的 2D 图形库
- 着色语言的中间表示与 AST
- 符号距离函数与矢量图形渲染
- 图像后处理效果
- 快速矩阵与向量计算
- 图像格式转换
- 动画与过渡框架
- 事件循环与多线程框架
- 文本整形与复杂文本布局引擎
- MVVM 与生命周期处理
- 自动 RTL(从右到左)UI 布局
- 支持 Markdown(CommonMark)渲染
Minecraft 的 Modern Text Engine:
- 支持彩色 Emoji,使用 Google Noto Color Emoji 15.1,基于 Unicode 15.1 Emoji 列表;
- 支持聊天中的 Emoji shortcode,例如
:rofl: 转换为“笑得满地打滚”,支持 Discord 和 Slack shortcode;
- 你可以使用 TTF 或 OTF 字体,配置字体基础大小、设置基线偏移,并设置是否移除文本阴影;
- 可缩放矢量图形,自动切换分辨率级别(最高 96px),支持原生(非合成)粗体和斜体渲染;
- 支持在 3D 世界中使用距离场文本渲染,同时在 2D GUI 中锐化字体图集;这增强了先前的一项功能:
*在任意缩放下平滑渲染所有字符(例如远处的告示牌,或 GUI 中很小的文字)
- 支持多层文本、多个段落联合布局、流式布局算法,并引入快速布局缓存;
- 支持快速数字替换、高精度布局与对齐,并平滑绘制快速变化的数字(固定宽度);
- 支持 mip-mapping、抗锯齿、线性采样与超采样抗锯齿(SSAA);
- 更好且更高效的 BiDi 文本段落布局(例如阿拉伯语、意第绪语);使用锐化字体图集;
- 可配置的 BiDi 文本启发式算法,以更准确地控制文本方向;支持修复无效代理对;
- 使用 HarfBuzz 文本整形,支持组合字符渲染,如泰语、天城文、孟加拉文和泰米尔文;
- 支持字素簇分割,支持 Unicode 换行算法;
- 支持基于上下文和区域设置的单词分割与换行;
- 支持像素风字体渲染,支持固定分辨率级别,支持像素对齐;
- 支持位图替换,可平滑渲染快速变化的数字,支持 emoji 渲染;
- 优化布局算法,在 GUI 中绘制文本时可将你的 FPS 提升约 10%
- 使用灰度像素存储纹理,降低 GPU 内存占用
- 减少不必要的 RAM 占用,并大幅减少对象创建
自定义字体
默认按下 Ctrl+K 或 ⌘+K 打开 Action Center,进入 Preferences,将界面滑动到第二页,你就会看到字体设置。
- Preferred font family 是你最希望使用的字体。它可以是操作系统字体,也可以是 TrueType/OpenType 字体(集合)文件。
- Fallback font families 会在 preferred font family 不可用时使用。
Modern Text Engine:
Modern UI 遵循 Minecraft 的 JSON 字体定义,但会忽略字形提供器类型 legacy_unicode 和 unihex。上文提到的 Modern UI 字体族将作为 Minecraft 字体的后备字体族。在 Default Font Behavior(位于 Preferences > Text Layout)中,你可以选择从 Minecraft 默认字体(minecraft:default)中移除某些字形提供器。若要避免使用原版 ASCII 字体,只需将其设为 Keep Other。请注意,只有在你未启用 Force Unicode Font 时,此选项才有效。如果你想使用原版 Unicode 字体,只需下载 GNU Unifont 的 OTF 版本。
Minecraft 附加功能:
- 支持设置窗口模式,例如无边框全屏、无边框窗口;
- GUI 界面背景淡入动画与双通道高斯卷积模糊效果,可配置背景渐变颜色;
- 平滑圆角工具提示样式,支持 RTL 布局,可配置背景和边框颜色;
- 游戏加载完成时播放 “ding” 音效;
- 支持打开背包时暂停游戏;
- 全新的 GUI 缩放算法和滑块式 GUI 缩放控件(不再局限于偶数,兼容 OptiFine);
- 为原版和 Forge 滚动面板添加平滑滚动;
- 异步网络处理器;服务器自动关闭;
- 所有功能都可在配置文件或 Action Center 界面(默认快捷键 Ctrl+K)中配置
Fabric 版 Modern UI 移除了一些功能(相较于 Forge 版):
- 类似 OptiFine 的缩放、在 GUI 中隐藏准星
- 导出更多调试信息、崩溃报告扩展
与 Caxton 文本渲染技术的对比
Caxton mod 以其 MSDF 文本渲染而闻名,你可以在 Caxton 和 Modern Text Engine 之间进行选择。
相同点:
- 两者都使用 HarfBuzz 文本整形
- 两者都支持 Unicode 文本处理
- 两者都支持 Unicode 换行和字素簇分割
- 两者都兼容 Iris 的光栅渲染模式
- 两者都有高效的矩形打包算法,并且都优于 Mojang 的实现
不同点:
- Caxton 使用更新版本的 HarfBuzz,而我们使用较旧版本(随 JDK 17 一同打包,在 JDK 21 中已更新)
- Caxton 使用多通道 SDF,放大文本时更锐利,而我们的渲染会更圆润
- 我们兼容 OptiFine,而 Caxton 不兼容
- 我们支持彩色 emoji,而 Caxton 不支持
- 我们支持 FreeType 字体微调,而 Caxton 从未支持过,字体微调对低分辨率显示器很有帮助
- 我们支持在屏幕空间中对原生字形图像进行完美采样,这非常适合 2D 渲染
- 我们支持单通道 SDF 文本渲染,无需额外 GPU 资源,我们始终使用 1bpp 纹理
- 我们拥有适用于缩小文本的智能 SDF 采样方法,而 Caxton 没有
- 无需等待 MSDF 纹理生成,你只需点击一下就能在游戏中切换字体
- 我们支持多种文本方向启发式和换行策略
- 我们不使用额外的原生库,因此 Modern UI 可以在 macOS 上运行
- 我们的布局性能略高于 Caxton,并且占用更少 RAM
Mod 集成与兼容性:
兼容(你应当注意):
OptiFine, Sodium, Iris, Create, AoA3
如果启用了 Shaders,Use Modern Text Shaders in 3D 会自动禁用,否则会导致发光文本的描边不可见。
具有类似功能、可被替代的 Mods:
- Blur (ver 1.15 ~ 1.21.8; 原因:功能完全覆盖,优化更好)
- Blur mod 声称使用高斯模糊,但我发现它实际上使用的是双通道盒式模糊。而 Modern UI 提供真正的单通道 Gaussian Blur,效果优于 Blur mod。
- Controlling (ver 1.15; 原因:实现方式不同)
- TipTheScales (ver 1.15 ~ 1.21.8; 原因:实现方式不同)
- Inventory Pause (ver 1.18 ~ 1.21.1; 原因:实现方式不同)
- Emojiful (ver 1.18 ~ 1.21.1; 原因:我们自 3.5.0 起支持彩色 emoji 渲染;此外,Emojiful 代码质量非常差,会在各处破坏你的游戏;你可能会遇到游戏卡死、显存占用过高、渲染异常,以及大量性能与 Mod 兼容性问题)
- Borderless Window (ver 1.18 ~ 1.21.4; 原因:实现方式不同)
- Ding (ver 1.18 ~ 1.21.4; 原因:实现方式不同)
- SmoothScrollingEverywhere (ver 1.18 ~ 1.19; 原因:实现方式不同)
- FPS Reducer (ver 1.18 ~ 1.21.8; 原因:实现方式不同)
冲突与解决方案:
- Emojiful (ver 1.16 ~ 1.21.1; 不建议使用 Emojiful;如果你必须使用,请通过配置界面或 bootstrap properties 禁用 Modern UI 文本引擎)
- Legendary Tooltips (ver 1.16 ~ 1.21.4; 解决方案:通过配置界面禁用 Modern UI tooltip)
- FeyTweaks (ver 1.18 ~ 1.21.1; 解决方案:在 FeyTweaks 的 mixin config 中禁用 TextRendererMixin)
- SmoothScrollingEverywhere (ver 1.18 ~ 1.19; 解决方案:通过配置界面禁用 Modern UI 平滑滚动)
- Caxton (ver 1.18 ~ 1.21.8; 解决方案:通过配置界面或 bootstrap properties 禁用 Modern UI 文本引擎)
- ImmediatelyFast (ver 1.18 ~ 1.21.8; 解决方案:
for 1.18 ~ 1.21.4: 禁用 ImmediatelyFast 的 hudbatching、fontatlasresizing 和 fasttext_lookup;否则你可能会遇到随机游戏崩溃;
for 1.21.6 ~ 1.21.8: 禁用 ImmediatelyFast 的 avoidredundantframebuffer_switching)
- Untranslated Items (ver 1.18 ~ 1.21.4; 解决方案:通过配置界面禁用 Modern UI 文本组件缓存)
支持的 MC 版本:
- 持续维护中:1.21.8, 1.21.7, 1.21.6, 1.21.1, 1.21, 1.20.1, 1.20
- 即将停止支持:1.21.4
- 不再支持:1.21.3, 1.21.2, 1.20.6, 1.20.4, 1.20.2, 1.19.4, 1.19.2, 1.18.2, 1.18.1, 1.18, 1.17.1, 1.16.5, 1.16.4, 1.16.3, 1.16.2, 1.16.1, 1.15.2, 1.14.4
本页中的所有说明均适用于 Minecraft 1.20.1 及以上版本。较旧版本中可能缺少某些功能。
PC 要求(与 Minecraft 原版相同)
有些人不愿意使用 Modern UI,因为他们认为 Modern UI 的电脑配置要求很高。实际上,只要你能运行 Minecraft 原版,你就一定能运行 Modern UI。除非你忘了更新你的 GPU 驱动。
- 操作系统:Windows 8.1+、带 X11 或 Wayland 的 Linux、macOS
- 架构:x64 或 arm64
- GPU:GeForce 210 或更高
- GPU 驱动:OpenGL 3.3+ 或 Vulkan 1.1+,越高越好
- Java:Java 17+,越高越好
常见问题:
Q:Default Font Behavior 和 Force Unicode Font 有什么区别?
A:首先,Modern UI 始终会将 Unicode 字体重定向到 Modern UI 默认字样。Default Font Behavior 在 1.19+ 中默认为 KEEP ALL,此时 Minecraft 默认字体仍会用于 ASCII 字符。KEEP OTHER 表示不再使用 Minecraft 默认字体,但附加字体,例如某些小游戏地图中的字体,仍然可用。这与 Force Unicode Font(IGNORE ALL)不同。
Q:Modern UI 的开销高吗?会降低应用性能吗?
A:不会,Modern UI 对 CPU、GPU、RAM 和 VRAM 占用没有显著影响。这是因为 Modern UI 本身优化良好,同时它还提供了许多新的功能与效果。Modern UI 框架以比基于 Chromium 的应用更高效而闻名。
对于低端电脑,界面模糊效果可能会成为性能杀手,因为 Minecraft 原版不允许对渲染目标生成 mipmap。即便如此,Modern UI 提供的模糊效果仍然比一个叫做 Blur 的 mod 快得多。
Q:如何禁用对原版的所有改动?我不想要这些功能。
A:只有 GUI 缩放算法和一些底层代码无法配置,其他任何功能都可以在 Action Center 界面(默认快捷键 Ctrl+K)或配置文件(gameDir/config/ModernUI/)中禁用,因为 Modern UI 本质上是一个框架。
Q:这是一个纯客户端 Mod 吗?我需要在服务器上安装它吗?
A:自 MC 1.19.2 起,已经没有理由再在服务器上安装此 mod 了。所有服务端功能都已弃用,并改为通过 Forge API 和 Fabric API 实现。
Q:如何开始基于 Modern UI 开发我的 mod?
A:该项目仍处于早期阶段,规范仍在编写中。你可以查看 JavaDoc。示例包括 Modern UI 本身(Action Center)和 Flux Networks。如果你有任何问题,欢迎加入我们的 Discord 服务器。
问题反馈:所有 issue 报告都应提交到 GitHub issue tracker。
欢迎加入我的 Discord Server 参与讨论并提出建议。