CTM 重生

CTM 重生

CTM特性主要面向Chisel Reborn,但也是一个库模组,任何模组都可以使用。

CTM Reborn

一个适用于 Fabric 和 NeoForge 的连接纹理与烘焙模型库,是 Athena 的一个分支,原作者为 ThatGravyBoatTerrarium Earth

CTM Reborn 的存在只有一个原因:在当前的 Minecraft 版本上延续 Athena 格式的生命力,使得 Chisel Reborn 以及所有针对 Athena 编写的资源包在 Athena 上游发布新版本之前能够继续正常工作。


连接纹理实际做了什么

连接纹理跨越方块边界进行连接

来自 Connected Textures (CTM) Overhaul 的演示图片,以 CC0-1.0 协议发布。

看看这些边界。原版 Minecraft 在每个方块上绘制相同的纹理,因此一面由同种材料构成的墙看起来就像是由重复的方块拼成的网格,每个边界处都有一条接缝。而使用连接纹理后,每个方块会询问其相邻方块是什么,并根据答案选择不同的纹理贴图——因此凹槽和边缘会勾勒出整个形状的轮廓,而不是每个独立方块的轮廓。

上面图片中的红色、绿色、青色和白色区域各自由许多独立的方块组成。边框沿着每个区域的轮廓延伸,转角会出现在区域实际转向的地方,内部表面则非常干净整洁。这就是连接纹理的全部理念,而 Athena 格式就是用 JSON 描述这一理念的一种方式。


这是 Athena 的实现

不是重新实现,不是重写,也不是对该格式的克隆。本项目中的代码就是 Athena 的代码。连接纹理逻辑、模型类型、格式解析、四边形生成、平台对接——这些都是 ThatGravyBoat 和 Terrarium Earth 的贡献者们编写的。CTM Reborn 将该实现移植到更新的 Minecraft 版本上并保持其可构建状态。这里的改动仅涉及版本兼容性和维护;实质内容归功于他们。

Athena 是一个设计精良的库。其格式紧凑,模型类型涵盖了资源包实际需要的各种情况,连接条件系统也比初看起来更具表现力。这些都并非我们的工作成果,这里也没有任何内容声称是对它的改进。

这个分支是一个临时方案,而不是替代品。它是在 Athena 自己的 MIT 许可下发布的,并保留了其原作者署名,其意图是在 Athena 更新到这些 Minecraft 版本时立即弃用 CTM Reborn


Athena 格式

模型定义位于 assets/<命名空间>/athena/<方块>.json,并使用它们所使用的加载器进行标记:

{
  "athena:loader": "athena:ctm",
  "ctm_textures": "mymod:block/marble_[$index]",
  "connect_to": { "type": "sameBlock" }
}

它们也可以使用 athena:athena 方块状态模型直接内联写入方块状态文件中。

模型类型

加载器 用途
athena:ctm 标准的全方块连接纹理
athena:carpet_ctm 扁平的、地毯类方块
athena:pane_ctm 板条和玻璃板
athena:pillar 沿轴向连接的方块
athena:limited_pillar 具有受限连接集合的柱体
athena:pane_pillar 板条状柱体
athena:mural 宽度 × 高度 方块网格展开的单张图像

athena:giantathena:mural 的原始名称,仍然可以使用。

纹理布局

ctm_textures 接受三种形式,格式会根据所见内容进行选择:

  • 单张纹理"mymod:block/plain"。一张纹理,无连接逻辑。
  • 47 切片"mymod:block/marble_[$index]"。经典的完整 CTM 集合;[$index] 会被填入 046,每种相邻配置对应一张纹理。
  • 四切片 — 一个包含 particlecenterverticalhorizontalempty 键的对象。每个方块面由这五张纹理拼合而成的四个象限组成,仅凭少量纹理即可实现令人信服的连接效果。

这三种形式中的任何一种也可以为每个面指定,并可选择包含 default

"ctm_textures": {
  "default": "mymod:block/side_[$index]",
  "up":      { "particle": "...", "center": "...", "vertical": "...", "horizontal": "...", "empty": "..." }
}

连接条件

connect_to 决定哪些相邻方块被视为已连接。默认为 sameState

类型 当相邻方块……时连接
sameState 是完全相同的方块状态
sameBlock 是相同的方块,可为任意状态
state 匹配给定的 block 和可选的 properties
tag 位于给定的方块 tag
notandorxor 组合其他条件

这些条件可以嵌套,因此像“此标签中的任意方块,但处于激活状态时除外”这样的条件可以直接在资源包中表达。

着色

方块面可以带有着色——可以是固定颜色,也可以是经由常规方块颜色处理器解析的着色索引——这样类草和类叶方块就能连接起来,同时保持生物群系颜色。


工作原理

  • 客户端资源重载监听器会收集所有 assets/<ns>/athena/ 文件,并根据 athena:loader 字段建立索引,这样资源包就可以为来自其未包含的模组的方块定义模型。
  • 定义使用 codecs(Mojang 的 DataFixerUpper)进行解析,这意味着同一份描述既可读也可写——这正是实现下方数据提供器的原因。
  • 在烘焙时,每个模型会将其纹理解析为一个小型的整数键控表,去除重复项,然后为每个面生成四边形。
  • 对于每个面,模型会构建一个 CtmState:八项布尔型相邻检查——上、下、左、右以及四个对角方向——通过方块的 connect_to 条件进行评估。该状态会选择单张纹理或四个象限纹理。
  • 平台对接部分很精简。Fabric 注册了一个 CustomUnbakedBlockStateModel 以及一个模型加载插件;NeoForge 则通过 RegisterBlockStateModels 和一个小的 ModelBakery 混入进行注册。其余部分均为共享代码。
  • 包含一个数据提供器,可通过代码生成这些文件,而无需手动编写。

兼容性

模组 ID 为 ctm_reborn,但资源包所依赖的任何内容均未更改:

  • 文件仍然从 assets/<命名空间>/athena/ 读取。
  • athena:loader 键仍然有效,同时支持 ctm_reborn:loader
  • 每种模型类型都注册在 两个 命名空间下:athena:ctm_reborn:
  • 在 Fabric 上,该模组声明了 provides: ["athena"],因此依赖 Athena 的模组可以得到满足。NeoForge 没有等效机制,因此在那里硬性要求 athena 模组 ID 的模组将无法识别。

版本

分支 Minecraft 平台
main 26.3 Fabric 和 NeoForge
26.2 26.2 Fabric 和 NeoForge

许可证与致谢

MIT,继承自 Athena。