现代化 UI

现代化 UI

现代桌面图形应用框架与底层3D图形引擎

基础库

logo

Modern UI by Icyllis Milica

描述:

Modern UI(由 Icyllis Milica 开发)是一个桌面应用程序框架,专为独立的 2D 和 3D 渲染软件开发而设计。它利用现代 3D 图形 API 和技术,提供高性能的实时渲染。此外,Modern UI 改进并优化了 Google Android 使用的一组功能,以及其自有的支持国际化的文本引擎。

Modern UI for Minecraft 是一个基于 Modern UI Core Framework 和 Modern UI Core Extensions 的 Minecraft 模组。它在 Minecraft 环境中提供 Modern UI 引导程序,并基于 Forge/Fabric 提供模组 API,以便在 Minecraft 中创建强大的图形用户界面。

对于客户端,按 Ctrl+K 或 ⌘+K(默认)打开操作中心屏幕以配置 Modern UI。(注意,您可以滑动偏好设置屏幕来配置字体)

此模组还包含一个专为 Minecraft 设计的强大文本布局引擎和文本渲染系统。该引擎提供了处理 Unicode 文本的适当方法,并让您在任何比例下(2D/3D)都能获得更易读的文本。具体来说:

  • 实时预览和重新加载 TrueType/OpenType 字体
  • 更好的字体回退实现
  • 抗锯齿文本和 FreeType 字体提示
  • 在 2D/3D 中使用改进的 SDF 文本渲染(也支持批量渲染)
  • 计算设备空间中的精确字体大小以进行原生字形渲染
  • 使用 Google Noto Color Emoji,并支持所有 Unicode 15.1 表情符号(2023 年 9 月 12 日)
  • 可配置的双向文本启发式算法
  • 可配置的文本阴影和原始字体大小
  • Unicode 换行和 CSS 换行及断词
  • 快速、精确且异步的 Unicode 文本布局计算
  • 更快、更节省内存的字形矩形打包算法
  • 使用真实的灰度纹理(每像素 1 字节,而 Minecraft 为 4 字节)
  • 兼容 OptiFine、Sodium(Rubidium)、Iris(Oculus)及许多模组
  • 兼容 Minecraft 的 JSON 字体定义(位图字体、TTF 字体)

此外,此模组还提供了许多用于提升游戏性能和游戏体验的实用功能。目前,我们拥有:

  • 更改屏幕背景颜色
  • 对屏幕背景图像应用高斯模糊
  • 屏幕背景的淡入动画
  • 更多窗口模式:全屏(无边框)、最大化(无边框)
  • 窗口不活动(失去焦点)和最小化时限制帧率并降低主音量
  • 打开背包时暂停单人游戏
  • 将 GUI 缩放选项更改为滑动条并提供提示文本
  • 当 Minecraft 加载并到达主菜单时播放“叮”的声音
  • 在原版的选择列表和 Forge 的滚动面板中启用平滑滚动
  • 按“C”键缩放,与 OptiFine 相同
  • 所有文本字段支持撤销/重做(Ctrl+Z/Ctrl+Y)和 Unicode 字素/单词迭代器
  • 播放本地音乐,允许进度条定位和查看频谱
  • 在聊天中支持 Discord/Slack/GitHub/IamCal/JoyPixels 表情符号快捷码
  • 精美的工具提示样式
    • 选择圆角边框或普通边框(带阴影效果)
    • 添加标题分隔并控制标题行间距
    • 自动换行和超出屏幕时自动垂直滚动
    • 居中标题行,支持从右到左布局方向
    • 精确定位工具提示到像素网格(平滑移动)
    • 更改背景颜色和边框颜色(支持渐变和动画)

核心特性:

  • 多图形 API 的 2D 图形库
  • 着色语言的中间表示和抽象语法树
  • 符号距离函数和矢量图形渲染
  • 图像后处理效果
  • 快速矩阵和向量计算
  • 图像格式转换
  • 动画和过渡框架
  • 事件循环和多线程框架
  • 文本整形和复杂文本布局引擎
  • MVVM 和生命周期处理
  • 自动 RTL(从右到左)UI 布局
  • Markdown(CommonMark)渲染支持

Minecraft 的现代文本引擎:

  • 支持彩色表情符号,使用 Google Noto Color Emoji 15.1,基于 Unicode 15.1 表情符号列表;
  • 支持聊天中的表情符号快捷码,例如 :rofl: 表示大笑,支持 Discord 和 Slack 快捷码;
  • 您可以使用 TTF 或 OTF 字体,配置字体基础大小,设置基线偏移,并设置是否去除文本阴影;
  • 可缩放矢量图形,自动切换分辨率级别(最高 96px),原生(非合成)粗体和斜体渲染;
  • 支持 3D 世界中的距离场文本渲染,但在 2D GUI 中锐化字体图集;这增强了以前的功能:   *在任何比例下平滑渲染所有字符(例如当您远离标牌时,或 GUI 中非常小的文本)
  • 支持多层文本,一起布局多个段落,流式布局算法,并引入快速布局缓存;
  • 支持快速数字替换、高精度布局和对齐,以及平滑绘制快速变化的数字(固定宽度);
  • 支持 mipmapping、抗锯齿、线性采样和超采样抗锯齿(SSAA);
  • 更好、更高效地布局双向文本段落(例如阿拉伯语、意第绪语);使用锐化的字体图集;
  • 可配置的双向文本启发式算法,以更精确地控制文本方向;支持修复无效的代理对;
  • 使用 HarfBuzz 文本整形,支持组合字符渲染,如泰语、天城文、孟加拉语和泰米尔语;
  • 支持字素簇断开,支持 Unicode 换行算法;
  • 支持基于上下文和区域设置的断词和换行;
  • 支持像素化字体渲染,支持固定分辨率级别,支持像素对齐;
  • 支持位图替换,快速变化的数字平滑渲染,支持表情符号渲染;
  • 优化布局算法,在 GUI 中绘制文本时将 FPS 提高约 10%
  • 使用灰度像素存储纹理,减少 GPU 内存使用
  • 减少不必要的 RAM 使用量并大大减少对象创建

自定义字体

按 Ctrl+K 或 ⌘+K(默认)打开操作中心,转到偏好设置,滑动屏幕到第二页,您将看到字体设置。

  • 首选字体族是您最想要的。它可以是操作系统字体或 TrueType/OpenType 字体(集合)文件。
  • 当首选字体族不可用时,使用回退字体族。

现代文本引擎:
Modern UI 遵循 Minecraft 的 JSON 字体定义,仅忽略字形提供程序类型 'legacy_unicode' 和 'unihex'。上述提到的 Modern UI 字体族将作为 Minecraft 字体的回退字体族。默认字体行为(在偏好设置 > 文本布局中)为您提供了从 Minecraft 默认字体(minecraft:default)中移除某些字形提供程序的选项。要避免使用原版 ASCII 字体,只需将其设置为保留其他。请注意,此选项仅在您未启用强制 Unicode 字体时有效。如果您想使用原版 Unicode 字体,只需下载 GNU Unifont 的 OTF 版本。

Minecraft 的附加特性:

  • 支持设置窗口模式,如全屏无边框、窗口无边框;
  • GUI 屏幕背景淡入动画和 2 遍高斯卷积模糊效果,可配置背景渐变颜色;
  • 平滑圆角工具提示样式,支持 RTL 布局,可配置背景和边框颜色;
  • 游戏加载时播放“叮”的声音效果;
  • 支持打开背包时暂停游戏;
  • 新的 GUI 缩放算法和滑块 GUI 缩放控件(不限于偶数,兼容 OptiFine);
  • 为原版和 Forge 滚动面板添加平滑滚动;
  • 异步网络处理器;服务器自动关闭;
  • 所有功能均可通过配置文件或操作中心屏幕配置(默认快捷键 Ctrl+K)

Modern UI for Fabric 移除了一些功能(与 Forge 版本相比):

  • 类似 OptiFine 的缩放,隐藏 GUI 中的准星
  • 转储更多调试信息、崩溃报告扩展

 

与 Caxton 文本渲染技术的比较

Caxton 模组以其 MSDF 文本渲染而闻名,您可以在 Caxton 和现代文本引擎之间进行选择。

相似之处:

  • 两者都使用 HarfBuzz 文本整形
  • 两者都支持 Unicode 文本处理
  • 两者都支持 Unicode 换行和字素簇断开
  • 两者在光栅渲染模式下兼容 Iris
  • 两者都有高效的矩形打包算法,优于 Mojang 的

不同之处:

  • Caxton 使用较新的 HarfBuzz,而我们使用较旧的(捆绑在 JDK 17 中,而 JDK 21 中已更新)
  • Caxton 使用多通道 SDF,渲染放大文本更清晰,而我们则渲染过度圆润
  • 我们兼容 OptiFine,而 Caxton 不兼容
  • 我们支持彩色表情符号,而 Caxton 不支持
  • 我们支持 FreeType 字体提示,而 Caxton 从不支持,字体提示有助于低分辨率显示器
  • 我们支持完美采样屏幕空间中的原生字形图像,非常适合 2D 渲染
  • 我们支持单通道 SDF 文本渲染,无需额外的 GPU 资源,我们始终使用 1bpp 纹理
  • 我们有智能 SDF 采样方法用于缩小文本,而 Caxton 没有
  • 无需等待 MSDF 纹理生成,只需单击即可在游戏中切换字体
  • 我们支持各种文本方向和换行策略
  • 我们不使用额外的原生库,因此 Modern UI 可在 macOS 上运行
  • 我们的布局性能略高于 Caxton,并且使用更少的 RAM

模组集成与兼容性:

兼容(您应该注意):

OptiFine、Sodium、Iris、Create、AoA3
如果启用了着色器,在 3D 中使用现代文本着色器 将自动禁用,这可能导致发光文本的轮廓变得不可见。

具有相似功能的模组将被替换:

  • Blur (版本 1.15 ~ 1.21.8;原因:功能完全覆盖,优化更好)
    • Blur 模组声称使用高斯模糊,但我发现它实际上使用 2 遍盒式模糊。而 Modern UI 提供真正的 1 遍高斯模糊,优于 Blur 模组。
  • Controlling (版本 1.15;原因:另一种实现方式)
  • TipTheScales (版本 1.15 ~ 1.21.8;原因:另一种实现方式)
  • Inventory Pause (版本 1.18 ~ 1.21.1;原因:另一种实现方式)
  • Emojiful (版本 1.18 ~ 1.21.1;原因:自 3.5.0 起我们支持彩色表情符号渲染;此外,Emojiful 的代码质量很差,并在各处破坏您的游戏;您可能会遇到游戏冻结、高 VRAM 使用、渲染故障以及许多性能和模组兼容性问题)
  • Borderless Window (版本 1.18 ~ 1.21.4;原因:另一种实现方式)
  • Ding (版本 1.18 ~ 1.21.4;原因:另一种实现方式)
  • SmoothScrollingEverywhere (版本 1.18 ~ 1.19;原因:另一种实现方式)
  • FPS Reducer (版本 1.18 ~ 1.21.8;原因:另一种实现方式)

冲突与解决方案:

  • Emojiful (版本 1.16 ~ 1.21.1;不建议使用 Emojiful;如果必须使用,请通过配置屏幕或引导属性禁用 Modern UI 文本引擎)
  • Legendary Tooltips (版本 1.16 ~ 1.21.4;解决方案:通过配置屏幕禁用 Modern UI 工具提示)
  • FeyTweaks (版本 1.18 ~ 1.21.1;解决方案:在 FeyTweaks 的 mixin 配置中禁用 TextRendererMixin)
  • SmoothScrollingEverywhere (版本 1.18 ~ 1.19;解决方案:通过配置屏幕禁用 Modern UI 平滑滚动)
  • Caxton (版本 1.18 ~ 1.21.8;解决方案:通过配置屏幕或引导属性禁用 Modern UI 文本引擎)
  • ImmediatelyFast (版本 1.18 ~ 1.21.8;解决方案: 对于 1.18 ~ 1.21.4:禁用 ImmediatelyFast 的 hud_batching、font_atlas_resizing 和 fast_text_lookup;否则,您可能会遇到随机游戏崩溃; 对于 1.21.6 ~ 1.21.8:禁用 ImmediatelyFast 的 avoid_redundant_framebuffer_switching)
  • Untranslated Items (版本 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 需要较高的 PC 配置而不愿使用它。事实上,只要您能玩 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+,更高更好

常见问题:

问:默认字体行为和强制 Unicode 字体有什么区别?

答:首先,Modern UI 始终将 Unicode 字体重定向到 Modern UI 默认字体。在 1.19+ 中,默认字体行为是全部保留,然后 Minecraft 默认字体用于 ASCII 字符。保留其他意味着不再使用 Minecraft 默认字体,但额外的字体(例如某些小游戏地图中的字体)仍然可用。这就是与强制 Unicode 字体(忽略全部)的区别。

问:Modern UI 有很高的开销吗?Modern UI 会降低应用性能吗?

答:不会,Modern UI 对 CPU、GPU、RAM 和 VRAM 的使用没有显著影响。这是因为 Modern UI 本身优化良好,但同时,Modern UI 也提供了一堆新功能和效果。众所周知,Modern UI 框架比基于 Chromium 的应用更高效。 对于低端 PC,屏幕模糊效果可能影响性能,因为 Minecraft 原版不允许在渲染目标上生成 mipmap。即便如此,Modern UI 提供的模糊效果也比名为“Blur”的模组快得多。

问:如何禁用所有对原版的更改,我不想要这些功能。

答:只有 GUI 缩放算法和一些底层代码不可配置,任何其他功能都可以在操作中心屏幕(默认快捷键 Ctrl+K)或配置文件中禁用(游戏目录/config/ModernUI/),因为 Modern UI 本质上是一个框架。

问:这个模组是仅客户端模组吗?我需要在其服务器上安装吗?

答:自 MC 1.19.2 起,不再需要在服务器上安装此模组。所有服务器功能都已弃用,并已实现到 Forge API 和 Fabric API 中。

问:如何开始基于 Modern UI 开发我的模组?

答:该项目仍处于早期阶段,规范仍在编写中。您可以查看 JavaDoc。示例包括 Modern UI 本身(操作中心)和 Flux Networks。如有任何问题,欢迎加入我们的 Discord 服务器。

问题:所有问题报告都应发送到 GitHub issue 跟踪器。

加入我的 Discord 服务器进行讨论和提出建议。