简介
Modern UI 旨在创造比原版更加精致的 UI,包括外观,动画效果,全新的渲染引擎,文字布局引擎及性能优化,使 UI 更加动态化,并且更加容易操作。
不过追其本源,Modern UI 是一个用来开发独立桌面应用程序的 UI 框架。许多结构与 Android 类似,但其实现是大不相同的。
Modern UI 使用自制渲染引擎 Arc 3D,支持多线程渲染,渲染性能非常高。文字布局引擎使用 Unicode 规范,使用 HarfBuzz,拥有很好的国际化能力。
注意
在游戏中按 Ctrl+K 打开 Modern UI 操作中心,你可以在偏好设置中配置大部分功能,注意这个页面可上下左右滑动。
如果你使用的是 1.16.5 或更低的游戏版本,请注意你的 Java 版本,如果你使用官方启动器或者 CurseForge 启动器,请更新 Java 并在启动参数里修改 Java 目录。
Minecraft 1.16 需要 Java 11~15,Minecraft 1.15 需要 Java 8~15。Minecraft 1.18 及以上的版本和原版一样,需要 Java 17。
Modern UI 3.8 版本起(MC 1.18.2),得益于新渲染引擎Arc 3D,Modern UI 可根据实际运行环境选择最佳渲染方式,最低可兼容至 OpenGL 3.3。而 MC 1.16 需要 OpenGL 4.3。
文本引擎
现代化文本引擎为 Minecraft 提供高质量文本渲染、分辨率无关外框字体、彩色表情符号、以及正确的 Unicode 文本处理和布局支持。
支持颜色表情符号,使用 Google Noto Color Emoji 15.1,基于 Unicode 15.1 Emoji List;
可以使用TTF或OTF字体,可配置字体基准大小,可设置基线偏移,可设置阴影渲染,可实时预览切换;
超高清晰度,自动切换分辨率等级(最高为 96 号字体),原生粗斜体渲染;
在任何比例下平滑绘制字体,可以在2D界面和3D世界中使用距离场(SDF)渲染;
支持屏幕空间抗锯齿和 FreeType 字体微调,支持 Mipmap,可自动根据矩阵计算实际字号;
支持原版像素风格位图字体,支持原版所有文字样式,超高速文本布局缓存,支持布局拼接;
自动对齐像素网格,有效避免文字边缘过于模糊或者过于锋利(锯齿);
更好并更加高效地布局混合双向(BiDi)文本段落(例如阿拉伯语 Arabic,意第绪语 Yiddish);
可设置双向文本方向启发式算法,更精确地控制文字方向;支持修复无效代理对(Surrogate Pair);
使用 HarfBuzz 文本整形,支持连字体渲染,如天城文 Devanagari,孟加拉语 Bengali,泰米尔语 Tamil,泰语 Thai;
支持字素簇分断算法(Grapheme Cluster Break),支持 Unicode 分行算法,根据语境与语言进行字词分断、换行;
更好的字体回退实现,自动分配字体,支持变体选择,自动调整行高;
提供更快、更省显存的矩形压缩算法,用于实时生成字体图册;
支持异步与并发文本布局,分离布局计算与渲染,保证线程安全;
支持 CommonMark、HTML 语法,支持任何自定义嵌入内容,支持不同的区域设置;
优化迭代算法,优化布局算法,在 GUI 中渲染文字时大约能提升 10% 的帧率;
使用真正的 Alpha 遮罩图存储纹理,减少显存占用;减少不必要的内存占用,大量减少每帧的对象创建。
功能
提供动画效果和转场动画等;使用 Shader 直接绘制圆角矩形,环形,扇形等图形;减少了 CPU 计算并提高了 GPU 性能;
将"物品"统计信息划分为物品和方块选项卡,并且所有统计信息都可以实时更新;
所有滑块选项仅在停止拖动时应用更改;(例如,更改渲染距离时减少滞后)
更智能的按键绑定设置和更智能的按键冲突检测;按键绑定搜索功能并筛选所有冲突并定位到它们;
移动到文本字段/文本区域时,鼠标光标将更改为“丨”的形状;
详情信息查看 CurseForge 主页,Modrinth 主页,GitHub 主页,Discord 服务器。
附加功能
支持窗口模式切换,如全屏无边框、最大化无边框;
在窗口失焦和最小化时限制帧率和主音量淡出;
支持聊天栏中输入表情符号简码,例如 :rofl: 为笑得满地打滚;支持 Discord/Slack/GitHub/IamCal/JoyPixels 简码;
为所有本文输入框增加撤销/重做(Ctrl+Z,Ctrl+Y)支持,支持所有语言的词语选择(按住Ctrl+键盘左右键);
播放本地音乐,允许跳转到指定位置并查看频谱;
按C键实现与OptiFine一样的缩放效果;
GUI 淡入动画和背景虚化效果(高斯卷积),可设置背景渐变色;
平滑圆角工具提示框样式,支持 RTL 布局,可设置背景和边框渐变颜色,标题居中,自动换行,超出屏幕自动上下滚动;
工具提示可配置圆角半径,阴影半径,阴影强度,标题分隔线;工具提示颜色可根据物品名称和稀有度;
游戏启动后播放“叮”提示音,支持打开物品栏时暂停游戏;
改进界面尺寸设置(滑块组件,改进算法,摆脱偶数比例的限制,兼容 OptiFine);
为原版和 Forge 滚动面板添加平滑滚动功能;
Fabric 版移除了一些功能(相较于 Forge 版)
PS:由于 Modern UI 功能非常多,请前往 CurseForge 和 Modrinth 以及 Discord 了解最新动态。
与 Caxton 文字渲染技术的比较
Caxton 模组以它的 MSDF 文字渲染出名,你可以在 Caxton 和现代文本引擎间做出选择。
共同点:
都使用 HarfBuzz 文本整形
都支持 Unicode 文字处理
都支持 Unicode 换行和字素簇分断
都在光栅模式下兼容 Iris
都有高效的矩形压缩算法,远比 Mojang 的好
不同点:
Caxton 使用较新的 HarfBuzz 版本,而我们使用的较旧的(与 JDK 17 捆绑,在 JDK 21 中更新)
Caxton 使用多通道距离场(MSDF),渲染更加锐利的放大的文字,而我们渲染放大的文字会过度圆角化
我们兼容 OptiFine,而 Caxton 不兼容
我们支持彩色表情符号,而 Caxton 不支持
我们支持 FreeType 字体微调,而 Caxton 永远不会支持它,字体微调在低分辨率显示器上有所帮助
我们支持屏幕空间中原生字形图像的完美采样,这是 2D 渲染的理想情况
我们能够在不增加显存占用的前提下支持单通道距离场(SDF)文字渲染,我们总是用1字节每像素的纹理
我们有对缩小的文字有智能 SDF 采样方法,而 Caxton 没有(Caxton 离远了且视角移动时,文字会闪烁)
我们不需要等待 MSDF 纹理生成,你可以在游戏中一键、瞬间切换字体
我们支持多种文字方向算法和换行策略
我们不使用额外的本机库,所以可以直接运行在 MacOS 操作系统和非 x86_64 的计算机上而无需手动编译源代码
我们有比 Caxton 略高的布局性能,使用更少内存
模组联动与兼容性
取代模组(Modern UI 包含这些模组的功能):
界面背景模糊(Blur) (1.15 到 1.20,全功能覆盖,更好的优化)
Controlling (仅 1.15)
TipTheScales (1.15 到 1.20,仅Forge,另一种实现)
Inventory Pause (1.18 到 1.20,另一种实现)
Emojiful (Modern UI 3.5.0 已支持彩色 Emoji 渲染;注意,Emojiful 会摧毁你的游戏,造成游戏卡死、高显存占用、卡顿和兼容性问题)
无边框全屏(Borderless Window) (1.18 到 1.20,另一种实现)
界面进入提醒(Ding) (1.18 到 1.20,另一种实现)
平滑滚动(SmoothScrollingEverywhere) (1.18 到 1.19,另一种实现)
FPS减速器(FPS Reducer) (1.18 到 1.20,另一种实现)
冲突模组(和解决方案):
Emojiful (1.16 到 1.20,不推荐使用;若必须使用 Emojiful,通过配置界面或启动属性关闭 Modern UI 的现代文本引擎)
传说工具提示(Legendary Tooltips) (1.16 到 1.20;通过配置界面关闭 Modern UI 的现代工具提示)
FeyTweaks (1.18 到 1.20;关闭 FeyTweaks Mixin 配置里的 TextRendererMixin)
平滑滚动(SmoothScrollingEverywhere) (1.18 到 1.19;通过配置界面关闭 Modern UI 的平滑滚动)
Caxton (1.18 到 1.20;通过配置界面或启动属性关闭 Modern UI 的现代文本引擎)
ImmediatelyFast (1.18 到 1.20;禁用 ImmediatelyFast 的 hud_batching、font_atlas_resizing 和 fast_text_lookup,否则有概率引发崩溃)
物品名称双语同屏(Untranslated Items)(1.18 到 1.20;关闭 Modern UI 文本引擎的文本组件缓存,这会略微降低性能)
需要注意的模组:
已知兼容:OptiFine,Sodium,Iris,Create,AoA3
光影启动时,Modern UI的“在3D世界中使用现代文字着色器”会自动禁用。
经典状态条(Classic Bars):该模组颜色插值计算有误,导致血量条的不透明度为2(应该为0或255),无法渲染;Modern UI 3.10.1 已强行让它按照完全不透明来渲染,但其RGB值仍是错的。
JEI药水效果(Just Enough Effect Descriptions):这是JEI/REI的渲染问题,其提前渲染并使用深度测试,导致背景片元丢失;可将 Modern UI 工具提示->边框样式->圆角化关闭来尽可能掩盖该渲染问题,但最好还是不使用JEI药水效果。
机械动力(Create):当显示带工程师护目镜的提示框时,工程师护目镜图标会覆盖一定文本;这是机械动力假定了空格的宽度为4,事实上空格的宽度随字体而变化。例如在 Modern UI 默认字体下,空格宽度明显小于4,导致缩进不够,文字被覆盖。
常见问题解答
本模组需要在服务端装吗?
对于 MC 1.19.2 及以上的版本,Modern UI 是纯客户端模组,安装在服务端上没有任何效果,也不会崩溃。对于 MC 1.18.2 且 Modern UI 为 3.10.1.1 或以上的版本,则一般不需要在服务端安装。对于更早的版本,如果你只是想用 Modern UI 自身的客户端功能,则不需要在服务端安装。但如果有其它依赖于 Modern UI 的 Mod 安装在了服务端,而 Modern UI 没有安装在服务端,大部分功能将不可用。使用非官方或与服务端差距过大的版本可能无法进入服务器。
会出 Fabric 版本吗?
Fabric 是轻量级 API,并不推荐。目前提供 MC 1.20.1+ 的 Fabric 版本,且相较于 Forge 版本缺失一些功能。
额外说明:Caxton 拥有此模组的部分功能(告示牌文本更清晰等等?)。
为什么 1.18.2 以上字体是红的?
这应该是你的显卡驱动有问题。如果你有独显,请确保你使用独显启动游戏。请确保你在NVIDIA/AMD/Intel官网上手动下载并安装最新的显卡驱动,不要使用系统预装或自动更新的驱动。只要是2010年以后生产的显卡并更新到最新的驱动都没有问题。已知2009年生产的入门级显卡GeForce 210可以正常运行。对于Intel Gen7显卡(Intel三代处理器),由于没有正确的硬件支持,且在2020年被Intel中止支持,没有解决方案。
MC 1.18.2 以上如何在手机端使用?
在Pojav Launcher使用Mesa Gallium Zink驱动在Vulkan上运行。
为什么 1.16.5 没有 xxx …
因为其版本已停止支持,请使用最新的游戏版本。目前只更新 1.18.2 以上的版本。
本模组使用的许可协议是什么?
ModernUI 和 ModernUI-MC 的源码和二进制形式都是 LGPL-3.0-or-later。
技术讨论群(限高端玩家、开发者、和渲染技术爱好者):993254209
游戏截图