Caxton
模组属性评比

距离显示结果还剩2票~

路过的这位少侠,你觉得这款Mod怎么样,可否愿意来评一评它呢?登录并评比
更新日志
  • 暂无日志..

历史编辑记录更多
    管理组

      暂无管理组..

    编辑组

      暂无编辑组..

    开发组申请

      暂无开发组..

    活跃
    开源

    Caxton

    0.0

    无人问津

    昨日指数: 56
    昨日平均指数: 73.183

    5.12万

    总浏览

    --

    资料填充率


    如何下载?
    • 概述

      Caxton 以 威廉·卡克斯顿(William Caxton) 的名字命名,这个模组添加了 TrueType 和 OpenType 字体支持。


      Caxton-第1张图片使用 Caxton 后的效果


      特点

      • 借助 MSDF 技术,呈现任何大小的清晰文本;

      • 真正的粗体和斜体字体;

      • 复杂文本呈现;

      • 不使用 AWT。

      当前限制

      • 目前不支持旧字体中的阿拉伯语整形(shaping)。在样式化和适当的双向文本处理的情况下使其工作非常复杂,因为我们不能使用 ICU4J 的 API。如果要正确呈现阿拉伯语文本,那么玩家将不得不在 Caxton 下使用支持阿拉伯语的字体。

      • 从字体生成 MTSDF 很费时间,加载 3 种语言大约需要 4 分钟。因此, Caxton 会将此操作并行化,并在首次完成后缓存结果。

      • 此外,Minecraft 中的许多 UI 元素对文本渲染做出了不正确的假设。让他们意识到双向文本(更不用说连字之类的东西了)将是一项重大任务,欢迎制作这一领域的补丁。

        • 针对此问题,已对 GUI 元素打了补丁,但无论其基本方向如何,显示的文本都会向左对齐。

      • 预估永不会支持字体微调(Font hinting)。

      模组/资源包兼容性

      有条件的兼容

      模组版本备注
      钠 (Sodium)非 0.5.5

      轮廓文本在使用 钠 0.5.5 时渲染会出错(GitHub

      ImmediatelyFast≥1.2.0

      禁用 Caxton 的 reuseTextRendererDrawer sortTextRenderLayers 选项(自动完成)

      Exordium全部

      禁用 Exordium 的告示牌缓冲功能(GitHub

      不兼容

      模组版本备注
      Iris Shaders全部

      Iris 不支持自定义核心着色器(GitHub);世界中使用 MSDF 字体的文本根本渲染不出来

      Emojiful全部Outright 替换了 Minecraft 的默认文本渲染器

      内存泄漏修复

      (Memory Leak Fix)

      ≤1.1.1
      VanillaIcecreamFix

      全部

      启动时与 Caxton 的 Fabric ASM 依赖项发生冲突(GitHub

      Porting Lib

      1.18.2 全部;

      1.19.2 可能全部

      与 Fabric API 的核心着色器GitHub注册 API 冲突(GitHub

      [AoA3]虚无世界3

      (Advent of Ascension 3)

      1.20.4-3.7.7

      不会崩溃,但 AoA 的轮廓文本不使用 MSDF 字体、AoA 的可滚动窗格组件不会

      隔断(clip)使用 MSDF 字体的文本(已计划制作兼容性附属模组)

      无法正确处理布局

      已知以下模组无法正确处理文本布局。它们应该不会让游戏崩溃,但这些模组的 GUI 元素可能会出现意外行为,并可能导致日志打印有关「不受支持的文本处理方法」的警告。

      模组版本备注
      IBE Editor全部

      使用自定义文本字段控件(widget),其克隆了原版 Minecraft 的大部分渲染代码(GitHub

      [REI]REI物品管理器

      (Roughly Enough Items)

      全部在某些控件中使用不受支持的方法(GitHub

      文本相关核心着色器资源包

      修改了文本相关的核心着色器的资源包(例如 Vanilla Tweaks 的“Dark UI”和“Transparent UI”资源包)需要经过修改才能兼容 Caxton 字体。

      操作系统支持

      Caxton 使用本地库(native library)来协助文本整形和 MSDF 生成。模组的预构建副本捆绑了该库适用于 x86_64 Windows 和 Linux 平台的版本。如果你在其他平台上玩游戏,那么你将不得不自己构建模组的副本。

      如果模组仍然无法识别你的平台,请在 config/caxton.json 中更改 rustTarget 设置,将其改为与你的平台对应的 Rust 平台的名称 之一,然后向作者这边报告问题。

      作者称家中没有 Mac,由于许可问题,无法为 macOS 构建二进制文件。

      如何使用

      Caxton 目前有两个内置的字体资源包。包含的第一个字体是 Inter,而第二个字体 是 Open Sans

      如果这些都不能满足你的需求,你可以通过资源包使用自己的字体。在分发包含字体文件的资源包之前,请阅读该字体的许可证,以确保你有权分发该字体。

      通过资源包添加字体

      Caxton 添加了一个 caxton 类型的字体提供器(font provider),它支持 regularbolditalicbold_italic 等键。每一个都可以被设置为一个标识符,其中 <namespace>:<path> 解析后指向字体文件 assets/<namespace>/textures/font/<path>。要指定其他选项,请使用如下对象,其中 file 键指定了路径:

      {  
        // 唯一必需的元素。
        "file": "<namespace>:<path>",  
        
        // 字体在默认大小基础上缩放的因数。
        // 如果该项为 1.0,字体缩放后,顶部(ascent)高度【即,与基线(Baseline)的距离】正好是默认位图字体的 7 个像素。
        // 在 Caxton 0.3.0 中添加。
        "scale_factor": 1.0,
        
        // 阴影偏移,是 memefont 像素大小的倍数。
        "shadow_offset": 1.0, 
        
        // 渲染文本在 X 轴和 Y 轴上的偏移量(以 memefont 像素为单位)。
        // 在 Caxton 0.4.4 中添加。
        "shift": [0.0, 0.0],
        
        // 一个 32 位的整型数字,其位被解释为 32 位浮点数,描述应用于字符的倾斜度。
        // 这可以用来在没有斜体变体的字体中模拟斜体,但如果有专用的斜体变体,最好还是使用专用的斜体变体。
        // 在 Caxton 0.5.6 中添加。
        "the_font_designer_couldnt_be_assed_to_make_an_italic_variant_so_slant_the_text": 0,
         
        // 一个 OpenType 特征标签的列表。语法见下文:
        // https://docs.rs/rustybuzz/0.6.0/rustybuzz/struct.Feature.html#method.from_str
        "features": [],
        
        // 仅影响栅格(raster)技术。MSDF 字体始终启用插值。
        // 如果设为 true,会对字形位图(glyph bitmap)中的纹素(texels)进行插值。
        // 在 Caxton 0.4.0 中添加。
        "blur": false
      }

      如果字体 JSON 文件中的 caxton_providers 键之中存在对象,且安装了 Caxton,则将使用该对象来代替 providers。这可用于加载 Caxton 字体,同时,在未安装 Caxton 的情况下也能进行回退。如果未指定 caxton_providers,将转而使用 providers

      你还可以添加 assets/<namespace>/textures/font/<path>.json 文件,该文件包含对字体进行栅格化的设置:


        // 指定字体文件的实际路径,因为它将出现在 Caxton 字体提供器中。
        // 一般来说,应该省略此项,但如果你使用的是一种可变的字体,此项可能会很有用。
        "path": "<path of font file>",  
        
        // 所有这些选项都是可选的,并将默认为所提供的值。
        // 纹理图集中每个像素所对应的字体单位的数量。
        // 如果使用 msdf 字体渲染技术,可以设为较高的值。
        // 如果使用 raster,应设为较低的值。
        "shrinkage": 32.0,  
        
        // 在字形边界框周围每边要留下的像素数。
        // 这应该大于 range,如果留空则默认取 range 的值。
        "margin": 4,  
        
        // 字形周围最小和最大可表示的有符号距离之间的范围宽度。
        // 这是一个不大于 255 的正整数。
        // 这也决定了为发光告示牌文本绘制的边界的宽度。
        "range": 4,  
        
        // 是否倒置有符号距离场(SDF,Signed Distance Field)。
        // 如果此项为 null,那么 Caxton 将尝试自动确定它,但你可以覆盖它,避免它猜测错误。
        "invert": false,  
        
        // 此项用于在可变字体中设置变化轴坐标。
        // 每个元素的格式如下:
        // { "axis": <轴类型>, "value": <轴值> }
        "variations": [],
        
        // 在字体集合(font collection)中使用的字体索引。
        // 如果你不确定,请将其保留为 0。
        // 在 Caxton 0.3.0 中添加。
        "face_index": 0,
        
        // 指定要使用基于 MSDF 的渲染方法("msdf")还是使用字形位图("raster" – 实 验 性)。
        // 对于大多数字体,建议使用 msdf,但 raster 更适合像素字体。
        // 此外,只有 raster 与 Iris Shaders 完全兼容 - 如果加载了着色器,使用 MSDF 字体的文本将不会在世界中显示。
        // 在 Caxton 0.4.0 中添加。
        "tech": "msdf",
        
        // 最大 mipmap 级别 (0 – 4)。
        // 如果使用 MSDF 渲染技术,则设置此值毫无意义。
        // 但是,当你使用栅格(raster)渲染技术时,它对于非像素字体会有用。
        // 在 Caxton 0.4.0 中添加。
        "max_mipmap": 0
      }

      全局配置

      以下选项位于 config/caxton.json 中:

      {
        // 与你的平台对应的 Rust 平台名称之一
        // (https://doc.rust-lang.org/nightly/rustc/platform-support.html)。
        // 如果此项为 null,则 Caxton 将为你的平台确定正确的值,因此建议仅在必要时更改此值。
        // 在 Caxton 0.2.1 中添加。
        "rustTarget": null,
        
        // 使用不同的方法绘制经验条上的等级文本:
        // 对于 Caxton 字体,会使用轮廓着色器(outline shader)绘制文本。
        // 本来是使用轮廓颜色绘制四个偏移副本,然后使用填充颜色绘制主要文本。
        // 此项主要用于使经验等级文本在使用轮廓字体时看起来更好。
        // 它曾经作为 ImmediatelyFast 渲染错误的解决方法,但在较新版本的 IF 上会有问题。
        // 自 Caxton 0.5.0 起,Caxton 会检测是否安装了 IF 1.2.0 及更新版本,
        // 并使用其 API,以缓解此项设置开启时的问题。
        // 请参阅:
        // * https://gitlab.com/Kyarei/caxton/-/issues/31
        // * https://github.com/RaphiMC/ImmediatelyFast/issues/49
        // 非 Caxton 字体不受影响。
        // 在 Caxton 0.4.0 中添加。
        "tweakExpText": true,
        
        // 从后到前对 Caxton 文本渲染层上的图元进行排序。
        // 理论上,禁用此选项可能会导致文本渲染错误;
        // 但是,IF 期望禁用此选项,并且 IF 开发者尚未收到禁用后出现渲染问题的报告。
        // 如果遇到渲染问题,其中某些文本似乎以错误的 z 顺序绘制,
        // 请尝试启用此选项,并在 IF 中禁用 HUD 批处理(HUD batching)。
        // 请参阅:https://github.com/RaphiMC/ImmediatelyFast/issues/49
        // 在 Caxton 0.4.0 中添加。
        "sortTextRenderLayers": false,
        
        // 当使用非 Caxton 字体绘制文本时,重用单个 TextRenderer.Drawer 实例。
        // 这避免了为每个旧线程组(run group)创建新对象,但可能导致 IF 崩溃。
        // 检测到安装了 IF 时,会自动禁用此项。
        // 请参阅:https://gitlab.com/Kyarei/caxton/-/issues/50
        // 在 Caxton 0.4.7 中添加。  
        "reuseTextRendererDrawer": true,
        
        // 某些文本处理方法本质上就有问题,不受 Caxton 支持。
        // 每当调用这些方法时,Caxton 都会记录一条警告。
        // 如果此项为 true,Caxton 会抛出异常。
        // 该选项主要用于调试。如果有疑问,请设为 false。
        // 在 Caxton 0.2.1 中添加。
        "fatalOnBrokenMethodCall": false,
        
        // 跟踪有关 Caxton 字体对象何时添加或删除引用的信息,出于调试目的。
        // 如果有疑问,请设为 false。
        // 在 Caxton 0.3.0 中添加。
        "debugRefcountChanges": false,
        
        // 禁用闪烁标语在特定日期的复活节彩蛋。
        // 在 Caxton 0.5.6 中添加。
        "disableEasterEggs": false
      }

      从源代码进行构建

      如果你想使用源代码构建 Caxton,那么除了 Gradle 之外,你还需要安装 Rust 工具链 和 Clang

      默认情况下,本地库将仅针对主机(指你的电脑)平台构建。要为其他平台构建它,请在 xyz.flirora.caxton.additionalTargets 属性中使用 目标三元组(以逗号分隔)指定其他目标。

      例如,如果你想为 x86_64 Windows 构建库,那么你可以用

      gradle build -Dxyz.flirora.caxton.additionalTargets=x86_64-pc-windows-gnu

      如果出现有关未知目标的错误,请修改 caxton-impl/build.gradle 中的变量 cargoCrossBuildTasks

      与其他模组的比较

      BetterFonts / TTFR

      BetterFonts / TrueType Font Replacement,最初由 thvortex 在 1.4.4 上创建(GitHub),由 bechill 更新到 1.4.7,然后由 The_MiningCrafter 更新到 1.5.2(MCF),然后由 secretdataz 更新到 1.6.x-1.7.x(GitHub),然后由 cubex2 更新到 1.8.9-1.12.2(GitHub)。然后由 secretdataz 再次更新到 1.13。

      这个模组使用 Java AWT 的文本布局功能来布局文本。为了渲染字形,它会将它们栅格化为位图。分辨率非常有限。

      然而,与下面列出的其他模组不同,它正确地实现了粗体和斜体样式以及复杂的脚本。

      平滑字体

      [SF]平滑字体 (Smooth Font),由 bre2el 创建,适用于 1.7-1.12。该模组还改进了不同比例的文本渲染,并对文本渲染实现了一些优化。

      至于它是如何工作的,who the RenderType knows?这个模组是 ARR。

      ThaiFixes

      ThaiFixes,由 lion328 在 Forge 1.12.2 和 Rift 1.13 上创建(GitHub),并由 secretdataz 在 Fabric 上更新到 1.18.2(GitHub) 。

      这个模组专门为泰语实现了自己的塑形程序。因此,它对需要其他复杂渲染的语言没有用。

      现代化 UI

      [MUI]现代化 UI (Modern UI),由 BloCamLimb 在 Forge 上为 1.15-1.20 版本创建。

      从截图来看,这个 Mod 支持复杂的文本渲染和真正的粗体和斜体样式。它还修复了原版文本布局的许多问题(如 MC-117311)。

      从代码来看,Modern UI 具有令人惊讶的复杂布局算法。不过作者还没有太多时间研究它。

      但是,此模组无法渲染具有清晰边框的文本。它还使用 AWT 执行文本布局。

      Minecraft 1.13 及以上

      从 1.13 开始,Minecraft 支持 TrueType 和 OpenType 字体。

      然而,这种实现与位图字体没有区别——游戏将字形转换为位图,并幼稚地布置文本。

      此外,它还错误地处理字形度量,导致 TTF 文本出现错位。

    短评加载中..