森罗万象
教程
OptiFine文档
Blockbench文档
论坛版 (opens new window)
下载示例 (opens new window)
教程
OptiFine文档
Blockbench文档
论坛版 (opens new window)
下载示例 (opens new window)
  • 准备
  • 基础
  • 动态纹理(前篇)
  • 模型和渲染
  • 额外的资源文件
  • 音效
  • 语言和文字

  • OptiFine与MCPatcher
  • CTM
    • CTM方法
    • 枯山水——CTM
    • 枯山水——随机纹理
    • 枯山水——生物群系
    • 枯山水——优先级
    • 简化CTM方法
      • 失败的尝试
    • 海鼠壁——竖向连接
    • 海鼠壁——横向连接
    • 砂砾——重复图案
    • 砂砾——覆盖纹理
    • 卢恩符文——覆盖方法的变体
    • 杂项——补充
  • CIT
  • CEM
  • 动态纹理(后篇)
  • 光与色

  • 环境
  • GUI
  • PBR纹理
  • 着色器/光影
  • 附录

# 简化CTM方法

前面我们提到,对于一些简单的情况,制47张纹理过于繁琐了,于是OptiFine提供了一种简化方法,只需要5张纹理:

是不是很神奇?这五张纹理是如何变成游戏中看到的样子的?

/**
 * 借用一下CTM模组的设计,CTM模组是Chisel团队开发的独立于OptiFine的,可以实现连接纹理的模组:
 * ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
 * │ 0.png           │ │ 1.png           │ │ 2.png           │
 * │ ╔══════╤══════╗ │ │  ──────┼──────  │ │ ║──────┼──────║ │
 * │ ║      │      ║ │ │ │      │      │ │ │ ║      │      ║ │
 * │ ║ 0    │ 1    ║ │ │ │ 4    │ 5    │ │ │ ║ 8    │ 9    ║ │
 * │ ╟──────┼──────╢ │ │ │──────┼──────│ │ │ ║──────┼──────║ │
 * │ ║      │      ║ │ │ │      │      │ │ │ ║      │      ║ │
 * │ ║ 2    │ 3    ║ │ │ │ 6    │ 7    │ │ │ ║ 10   │11    ║ │
 * │ ╚══════╧══════╝ │ │  ──────┼──────  │ │ ║──────┼──────║ │
 * └─────────────────┘ └─────────────────┘ └─────────────────┘ 
 * ┌─────────────────┐ ┌─────────────────┐
 * │ 3.png           │ │ 4.png           │
 * │ ═══════╤═══════ │ │ ╝ ─────┼───── ╚ │
 * │ │      │      │ │ │ │      │      │ │
 * │ │ 12   │ 13   │ │ │ │ 16   │ 17   │ │
 * │ │──────┼──────│ │ │ │──────┼──────│ │
 * │ │      │      │ │ │ │      │      │ │
 * │ │ 14   │ 15   │ │ │ │ 18   │ 19   │ │
 * │ ═══════╧═══════ │ │ ╗ ─────┼───── ╔ │
 * └─────────────────┘ └─────────────────┘ 
 * 
 * 如图所示,在程序内部,这五张图片被横一刀竖一刀拆分成了20张小图片。
 * 通过拼接这20张小图片,可以得到CTM方法的47张图片(然而开了脑洞的ctm是无法用简化ctm方法实现的)。
 * 
 * 连接0,13,2,15,我们可以获得一张向右连接的纹理(CTM方法的1号纹理):
 * ╔══════╤═══════
 * ║      │      │
 * ║ 0    │ 13   │
 * ╟──────┼──────┼
 * ║      │      │
 * ║ 2    │ 15   │
 * ╚══════╧═══════
 * 
 * 连接8,17,2,15, 我们可以获得一张L形拐角纹理,连接到右侧和上方(CTM方法的16号纹理)
 * 
 * ║ ─────┼───── ╚
 * ║      │      │
 * ║ 8    │ 17   │
 * ╟──────┼──────┼
 * ║      │      │
 * ║ 2    │ 15   │
 * ╚══════╧═══════
 * 
 */

注意

玻璃板使用简化CTM方法会出bug!

详见这个issue:https://github.com/sp614x/optifine/issues/463 (opens new window)

# 失败的尝试

虽然知道有bug,但是简化CTM还是很诱人的,我还是尝试用简化CTM方法制作了玻璃纹理(1号纹理黑了是因为它现在彻底透明了):

image-20200709102736870

glass.properties

method=ctm_compact
tiles=0-4
matchBlocks=minecraft:glass

我们看到简化CTM方法用于玻璃还是非常的稳健:

image-20200709102709736

我们再试着用于玻璃板:

image-20200709102856643

它的顶部也被连接了,我们加上faces=sides将连接纹理限制在侧面:

method=ctm_compact
tiles=0-4
matchBlocks=minecraft:glass_pane
faces=sides

image-20200709104553553

至此我以为简化CTM玻璃板不过如此,直到我转到了另一面:

image-20200709104851371

这种问题的确不是我有办法解决的,只能放弃了。

← 枯山水——优先级 海鼠壁——竖向连接 →