SQwatermark
本帖最后由 SQwatermark 于 2022-1-30 12:14 编辑

前言
Skip me
注意:由于帖子长期无回复会被锁定导致无法更新,今后的更新将在 https://sqwatermark.com/resguide/optifinedoc/ 进行。

在得知OptiFine有这么多功能和应用时我也是很惊讶,本着学习和分享的心理翻译了这篇文档,同时希望可以普及OptiFine材质在中文社区的使用,内容很多很杂(汉字数约为2.1万),慢慢看,定能有所收获(事实上每一章都有够研究的)

源文档为sp614x发布在github的最新的OptiFine帮助文档,并且会尽量隔三差五(个月)跟进一次。如果你在使用1.12或者更早的版本的话,请留意一下高版本与低版本的区别,必要时可以解压缩OptiFine的jar文件,里面可以找到一份对应版本的文档。
光影部分的文档专业性太强了,首先我看不懂,能看得懂的人应该看英文更舒服些,翻译成中文一是没实力,二是没必要,就不翻译了。

此文档适合:想要制作具有高度自定义内容的资源包的人,想要魔改基于OptiFine的资源包的人
首先你要对Minecraft原版的资源包有一定了解,如果你想从基础学起,建议看看Minecraft wiki的 "资源包" 章节
如果使用本文档过程中遇到疑难,或者发现文档中有错误的地方,请回帖提出疑问/指出错误。这也会给接下来的阅读者很大帮助。
非常经典的例子:Conquest_ 材质包,cocricot材质包,解压看看,非常有助于理解这篇文档的内容。
如果你想对模型或实体的材质进行改动的话,建议使用BlockBench,功能强大且丰富,CubikStudio不仅收费而且好久没更了,如果不走体素建模路线就没必要用CubikStudio了
目录
Index
有关教程链接
References
问题解答
Q & A
下面是有人提过的有关OptiFine自定义材质的问题:
Optifine 如何配合 Mythicmob 来自定义怪物的材质?(5楼是我的回答,附加一个详细案例)
狼的随机实体材质(如果生物本身就有几张材质,应该怎么做)
如何自定义熔炉和箱子的材质(给出了较为详细的例子,但是不能用于服务器)

小组:幽篁流觞(RMA)


∛243
翻译辛苦了!支持大佬

Snow_Lotus
翻译辛苦了!!!

米安博奥
这个很有用 万分感谢

Frost-ZX
感谢翻译!

娃哈哈呵呵
大佬翻译辛苦了

dark4
大佬牛逼,辛苦了

ゼロツー
不錯不錯

YYFC
翻译辛苦了大佬。

SQwatermark
本帖最后由 SQwatermark 于 2020-7-15 12:57 编辑

属性文件说明
Properties Files
概述|Overview
OptiFine的许多功能需要用到属性文件,它们控制OptiFine调用资源包中的图片。
属性文件是与 Windows 的 ".ini" 格式相似的简单文本文件,它的文件扩展名为properties。除了注释行之外,文件中的每一行都表示一个属性,格式为 "属性名=值"。
译注:建议使用notepad++之类的代码编辑器来编辑属性文件,确认编码为UTF-8格式,不建议使用记事本
  1.   # 这里是一个注释
  2.   属性1=值
  3.   属性2=某个其他值
  4.   
  5.   # 属性文件时可以空行的
  6.   属性3=另一个其他值
复制代码
所有属性名都区分大小写,"renderpass" 与 "renderPass" 是不相同的。
同一个文件中,属性排列的顺序没有影响。
许多属性有默认值,你可以省略这些属性,而有些情况下整个属性文件都不是必需的。
详见每个属性文件的各个小节。

很多属性文件中使用了一些相同的对象。下面对它们作出说明,在其余文件中就不再赘述了。

材质|Textures
OptiFine常常会要求你指定一个路径,指向某个图形文件或者其他资源。
这指的是材质包的zip文件(或者文件夹)中的路径。
材质包中的文件夹结构可以深度嵌套。所以OptiFine提供了一些便捷的方法来简化操作。
如果OptiFine要求你提供一个文件,你可以使用下列任意一种方法。

最直接的方法是指出文件相对于 assets/minecraft 的路径:
  1.   # 全称路径
  2.   texture=textures/entity/creeper/creeper.png
复制代码
这表示在材质包的zip文件或文件夹中的 "assets/minecraft/textures/entity/creeper/creeper.png"。
请始终使用斜杠 "/" 分隔文件夹。无论你的操作系统是什么,都不要使用反斜杠 "\",否则OptiFine将无法正确识别路径。

你可以添加一个 "命名空间(namespace)" 前缀。下面的例子表示和上例完全一样的 "creeper.png" :
  1.   # 带有命名空间的全称路径
  2.   texture=minecraft:textures/entity/creeper/creeper.png
复制代码

模组的命名空间通常不是 "minecraft",在这种情况下你必须写出命名空间:
  1.   # 带有模组命名空间的全称路径
  2.   texture=herobrine:textures/entity/him.png
复制代码
这表示 "assets/herobrine/textures/entity/him.png",而不是 "assets/minecraft/textures/entity/him.png"。

特定用于 OptiFine 的材质应该放在 "assets/minecraft/optifine" 文件夹中。
由于被频繁使用,它可以被波浪号 "~" 表示。下面两个表示同一文件
(注意,在1.12之前的版本中,~表示mcpatcher文件夹,下面不再赘述):
  1.   # 相对于 "assets/minecraft/optifine"
  2.   texture=~/dial/clock0.png
  3.   texture=minecraft:optifine/dial/clock0.png
复制代码

也可以使用属性文件的相对路径。
例如,在 "~/dial/clock.properties" 中 (记住 "~" = "assets/minecraft/optifine")
  1.   # 相对路径: 没有斜线的单独文件名
  2.   texture=clock0.png
  3.   # 相对路径: 使用 "./" 来表示当前目录
  4.   texture=./clock0.png
  5.   # 绝对路径: 使用 "~"
  6.   texture=~/dial/clock0.png
  7.   # 绝对路径: 无命名空间
  8.   texture=optifine/dial/clock0.png
  9.   # 绝对路径: 有命名空间
  10.   texture=minecraft:optifine/dial/clock0.png
复制代码
都表示同一个路径:"assets/minecraft/optifine/dial/clock0.png"。
如果属性文件在另一个位置,例如 ~/misc,那么相对路径将基于该文件夹,但是绝对路径仍然指向dial文件夹。

总而言之,请尽量把属性文件和它所用到的材质放在同一个路径下。你需要写的路径会更短,当你需要移动文件时,也会感到方便许多。

方块|Blocks
从1.7开始,Minecraft可以用字符串ID表示方块。
从1.13起方块的数字ID被移除,只能使用字符串ID。

虽然数字ID仍然存在于游戏内部,但由于它们不稳定,所以不能在配置文件中指定。
例如,以前你可以用1指代石头方块,但现在你得用 "minecraft:stone"。和材质一样,前缀 "minecraft:" 是可省略的,所以只有 "stone" 也是可以的。模组的命名空间并非 "minecraft",在这种情况下需要前缀。

参阅Dinnerbone的方块、物品ID和名称列表: http://media.dinnerbone.com/uplo ... 44-23_YfmAkomVI.txt

在1.13中,许多有复杂变体的方块被 "扁平化" 为几个简单方块,方块的元数据(metadata)被删除。
参阅 https://minecraft.gamepedia.com/1.13/Flattening (中文链接:https://minecraft-zh.gamepedia.com/1.13/扁平化)

方块名的格式为 "<命名空间:>name<:属性1=值1,...:属性2=值1,...>"。
尖角括号 "<>" 中为可选部分。默认命名空间为 "minecraft"。
  1.   # 简称
  2.   blocks=oak_stairs
  3.    
  4.   # 全称
  5.   blocks=minecraft:oak_stairs
  6.   
  7.   # 模组方块要求使用全称
  8.   blocks=botania:crate

  9.   # 属性
  10.   blocks=minecraft:oak_stairs:facing=east,west:half=bottom
复制代码

前缀 "minecraft:" 是可省略的,所以这也可以写为:
  1.   # 属性
  2.   blocks=oak_stairs:facing=east,west:half=bottom
复制代码

物品|Items
从1.7开始物品可以被名称(字符串ID)指定。
参阅Dinnerbone的方块、物品ID和名称列表: http://dinnerbone.com/media/uplo ... 44-23_YfmAkomVI.txt

从1.13开始物品只能被名称(字符串ID)指定。
参阅: https://minecraft.gamepedia.com/1.13/Flattening  

重申,前缀 "minecraft:" 是可省略的

生物群系|Biomes
需要列出生物群系时,请使用Minecraft wiki给出的名称: https://minecraft.gamepedia.com/Biome#Biome_IDs (中文链接:https://minecraft-zh.gamepedia.com/生物群系#生物群系ID)
也可以使用由模组添加的生物群系。
  1.   # 生物群系简称
  2.   biomes=ocean deep_ocean river beach
  3.   # 生物群系全称
  4.   biomes=minecraft:ocean biomesoplenty:highland
复制代码

从1.13起,许多生物群系被重命名了。
参阅: https://minecraft.gamepedia.com/1.13/Flattening  

混合方法|Blending methods
当两个或多个材质组合在一起时,OptiFine提供了几种混合方法。

下面描述了有效的混合方法。"当前材质" 表示正在使用这个混合方法的材质。
"原材质" 表示到目前为止已经渲染出的东西,可能是单张材质,也可能是之前的混合操作得到的结果。
- replace: 用当前材质完全替换原材质。没有任何混合,只有透明与不透明的选项。
- alpha: 按照当前材质的透明度混合材质。这是最常见的混合方法。
- overlay: RGB 值大于0.5 时,会使原图片变亮,小于0.5时变暗。这个方法别名为color。
- add: 将当前材质的RGB值乘alpha值,将所得的结果加到原材质上。
- subtract: 从原材质减去当前材质的RGB值。
- multiply: 将当前材质和原材质的RGB值相乘。
- dodge: 将当前材质的RGB值直接加到原材质上。
- burn: 新RGB = (1 - 当前RGB) * 原RGB
- screen: 新RGB = 1 - (1 - 当前RGB) * (1 - 原RGB)

你可以从维基百科的Blend modes词条获取一些参考图片:https://en.wikipedia.org/wiki/Blend_modes
译者注:很不巧,这个页面目前没有中文版本

数字列表|Number lists
有时你需要指定一个数字列表。OptiFine可以识别范围和单个数值:
  1.   # 单个数值
  2.   list=1
  3.   # 分别列出的多个数值
  4.   list=1 2 3
  5.   # 用范围表示的相同数值
  6.   list=1-3
  7.   # 多个范围
  8.   list=1-3 6 8 10-15
  9.   # 开放式范围
  10.   damage=100-
复制代码

RGB颜色|RGB colors
颜色可以用16进制RGB值表示:
  1.   # 白色
  2.   color=ffffff
  3.   # 黑色
  4.   color=000000
  5.   # 红色
  6.   color=ff0000
  7.   # 绿色
  8.   color=00ff00
  9.   # 蓝色
  10.   color=0000ff
复制代码

参考文献|References
https://bitbucket.org/prupe/mcpatcher/wiki/About_Properties_Files
http://dinnerbone.com/media/uplo ... 44-23_YfmAkomVI.txt
http://www.minecraftforum.net/fo ... 351-1?comment=11315
http://www.minecraftforum.net/fo ... 351-1?comment=11128
https://minecraft.gamepedia.com/1.13/Flattening


月明梨花白
感谢小天使

SQwatermark
本帖最后由 SQwatermark 于 2020-7-9 12:04 编辑

连接材质
Connected Textures
CTM|Connected Textures mod
连接材质,原先是MCPatcher的功能,它提供了一系列连接方块材质的方法。

如果你想要某个方块(block)或者图块(tile)覆盖上连接材质或者随机材质,
请在材质包的optifine/ctm文件夹下新建一个后缀为.properties的文件。
属性(properties)文件可以放在optifine/ctm的任意一层子文件夹下。

译注:这里所谓的 "图块(tile)" 指的就是assets里面的一张张图片,虽然译名标准化里tile是不翻译的,但是tile在某些情境下可以翻译成"方块",为了避免混淆,还是按照感觉给出个译名。

针对不同需求和限制,可以使用不同的连接方块材质的方法。
下面将介绍如何使用每种方法。

所有属性名称都区分大小写。
除非另有说明,否则所有的路径都相对于assets/minecraft。

公共属性|General properties

(可选) 列出这个方法所应用于的方块/图块

同一个方块/图块可以有多个属性文件,
它们会按照文件名的字母顺序依次加载。
所有针对图块的属性文件会在针对方块的属性文件之前被检测,第一个匹配的属性文件会被加载。
  1. matchTiles=<需要匹配的图块列表>
复制代码
表示原版mc中的图块,只需要使用它在textures/block中的文件名:
    matchTiles=dirt
表示模组添加的图块,你需要知道模组的名字:
    matchTiles=botania:blazeblock
译注:我使用1.12版本似乎测试出了不一样的结论,如果你用这种格式出现错误,请尝试 modid:blocks/......
一个CTM规则输出的图块还可以被另一个规则匹配。
图块名称就是指向图块的完整路径
    matchTiles=optifine/ctm/mygrass/1.png
方块格式 (<>内为可选部分)
  <命名空间:>名称<:属性1=值1,值2...:属性2=值1,值2...>
例如:
  简称:          oak_stairs
  全名:          minecraft:oak_stairs
  名称+属性:     minecraft:oak_stairs:facing=east,west:half=bottom
  1. matchBlocks=<方块列表 + 可选属性>
复制代码
如果可以从文件名判断这两个属性,则可以省略它们:
- optifine/ctm/xxx/<name>.properties 默认
    matchTiles=<name>
- optifine/ctm/xxx/block_<name>.properties 默认
    matchBlocks=<name>
除非你明确指定某个属性。

(可选) metadata
限制匹配的方块的metadata,可以是 0 到 31 的任意值
仅限 1.13 之前的版本
  1. metadata=<metadata 列表>
复制代码

(可选) 权重
如果多个属性文件匹配相同的方块,会使用拥有最大权重的属性文件。
如果权重相同,会接着比较属性文件名。
默认的权重为0。
译注:这个属性可能已经没用了,我查看了1.15.2版本的optifine源码,属性文件解析器根本不会解析weight属性
  1. weight=<整数>
复制代码

(必需) 选择替换材质的方法
可选的方法:
  ctm: 标准8方向方法 (例如原始的ctm玻璃), 使用47个图块
  ctm_compact: 简化8方向方法, 使用5个图块
  horizontal: 只连接到侧面的方块 (例如书架)
  vertical: 只连接到上方和下方的方块
  horizontal+vertical: 优先水平连接, 无法水平连接时才垂直连接
  vertical+horizontal: 优先垂直连接, 无法垂直连接时才水平连接
  top: 仅连接到上方的方块 (例如砂岩)
  random: 随机选择图块
  repeat: 大面积重复固定的图案
  fixed: 使用单个固定图块. 相当于只设置一个图块的随机
  overlay: 用于方块间过渡的覆盖层, 使用17个图块
  overlay_ctm: 方法"ctm"的overlay变体
  overlay_random: 方法"random"的overlay变体
  overlay_repeat: 方法"repeat"的overlay变体
  overlay_fixed: 方法"fixed"的overlay变体
如果overlay方法的处理顺序在其他方法之前,
则可以将它们与其他方法组合在一起。(按照字母顺序)
方法"ctm_compact"和任何overlay方法都不兼容。
  1. method=<方法名>
复制代码

(必需) 替换图块的列表
就像地面和物品材质,每一个图块必须是一张独立的图片,
可以用以下几种格式来表示图块:
  0                       -> 0.png
  8-11                  -> 8.png, 9.png, 10.png, 11.png
  name                -> 文件名.png
  name.png          -> 文件名.png
  <skip>              -> 跳过图块,继续使用下一个CTM属性
  <default>          -> 对方块/图块使用默认材质
  full/path/name.png  -> 完整路径/文件名.png
除了最后一种格式,png文件必须和属性文件在同一个根目录下。
这些格式可以混合搭配,例如:
  tiles=0-4 5 some/other/name.png
对于要跳过的空图块,overlay方法可以使用特殊的名称 "<skip>"。
overlay方法不能使用图块名称 "<default>"。
  1. tiles=<图块列表>
复制代码

(可选) 连接类型
即连接到毗邻方块的方法,
指定游戏应该如何决定是否应该连接两个方块。
  block: 当这个方块的id = 相邻方块的id时连接
  tile: 当这个方块的图块 = 相邻方块的图块时连接
  material: 当这个方块的材料 (stone, dirt, etc.) = 相邻方块的材料时连接
  state: 当方块状态 (block + properties) = 相邻方块的状态时连接
基于方块的属性文件默认为block;基于图块的属性文件默认为tile。
  1. connect=<block | tile | material | state>
复制代码

(可选) 面
将方法的作用范围限制在方块确定的面。
  bottom: 底面 (负y).
  top: 顶面 (正y).
  north: 北面 (负z).
  south: 南面 (正z).
  east: 东面 (正x).
  west: 西面 (负x).
  sides: "东面 西面 南面 北面" 的总称.
  all: 所有面.
不规则方块会忽视这个属性.
  1. faces=<以下的组合: north south east west top bottom sides all>
复制代码

(可选) 生物群系和高度范围
限制为特定生物群系或高度范围。
这里列出了原版生物群系ID: https://minecraft.gamepedia.com/Biome#Biome_IDs
也可以使用模组添加的生物群系。
旧属性 "minHeight" 和 "maxHeight" 也可以被识别。
  1. biomes=<生物群系列表>
  2. heights=<高度范围>
复制代码

(可选) 名字
只适用于具有对应的可命名的方块实体值的方块。
例如:
  beacon(信标) brewing_stand(酿造台) enchanting_table(附魔台) furnace(熔炉) dispenser(发射器) dropper(投掷器) hopper(漏斗)
关于匹配名称的语法,参阅 "custom_guis.properties"。
  1. name=<名字>
复制代码

下文所有内容都针对特定连接材质方法。
每一个.properties文件都应该仅包含下列小节之一。


标准8方向方法|Standard 8-way connected textures

method=ctm

(必需) 47个图块
  1. tiles=<47 tiles>
复制代码

(可选) 连接相邻方块时,是否显示内边缘接缝
  1. innerSeams=false
复制代码
模板:

译注:如果你疑惑为什么需要这么多张图片,不妨亲自尝试一下

简化8方向方法|Compact 8-way connected textures

method=ctm_compact
译注:此方法不适用于玻璃板,详见 https://github.com/sp614x/optifine/issues/463

(必需) 5个图块
  1. tiles=<5 tiles>
复制代码

(可选) 连接相邻方块时,是否显示内边缘接缝
  1. innerSeams=false
复制代码
模板:


有特例的简化8方向方法|Compact 8-way connected textures with special cases

method=ctm_compact

(必需) 5个图块
  1. tiles=<5 tiles> <额外的图块>
复制代码

(可选) 简化CTM图块替换
允许为特定CTM实例定义替换图块。
<ctm_index> 是ctm_template.png中CTM实例的序号 (0-46)
<tile_index> 是在 "tiles" 中定义的图块的序号 (不是文件名!)
使用 "ctm_compact" 你可以定义超过5个图块,可以使用
更多图块作为替代。
  1. ctm.<ctm_index>=<tile_index>  
复制代码

水平连接材质|Horizontal-only connected textures
method=horizontal

(必需) 4个图块
  1. tiles=<4 tiles>
复制代码
模板:


垂直连接材质|Vertical-only connected textures

method=vertical

(必需) 4个图块
  1. tiles=<4 tiles>
复制代码
模板:


顶部连接材质|Top connected textures

method=top

(必需) 只需要1个图块
  1. tiles=<单个图块>
复制代码

随机材质|Random textures

method=random

(必需) 任意数量的图块
  1. tiles=<图块列表>
复制代码

(可选) 权重
例如,如果
tiles=6-11
weights=10 1 10 2 7 3
那么图块6和8的权重为10,图块7权重为1,以此类推。
权重之和不必为100或任何其他特定值。
在上面的例子中,图块6和图块8的使用频率分别为大约30.3%(10/(10+1+10+2+7+3)),
依此类推。
  1. weights=<对应的权重>
复制代码

(可选) 随机循环
用于增加随机性的重复随机函数的次数。
可以使不同的材质使用不同的随机样式。
较高的值可能会降低区块加载速度。
默认值为0。
  1. randomLoops=<0-9>
复制代码

(可选) 方块的各个面的对称性
只适用于标准的六面体方块。
none: 所有6个面都是独立材质。这是默认值。
opposite: 双向对称;相反的面有相同的材质,但其他面可能有不同的材质。
all: 六个面拥有相同的材质。
  1. symmetry=<none | opposite | all>
复制代码

(可选) 相邻方块之间的材质连接
如果为true,OptiFine对所有多方块对象的所有部分使用相同的随机数种子,
例如,高草丛的顶部和底部。
这允许你为多方块对象创建统一的随机材质。
如果该属性为false,这两部分会被 "打乱",也就是,单独选择这两部分的随机材质。

注: 要使其正常工作,你需要多个links =true的属性文件,
以及相同数量的替换材质和相同数量的权重。
例如,
double_plant_top.properties:
  method=random
  tiles=grass_top1 grass_top2 grass_top3
  weights=1 2 3
  linked=true

double_plant_bottom.properties:
  method=random
  tiles=grass_bottom1 grass_bottom2 grass_bottom3
  weights=1 2 3
  linked=true

默认值为false。该连接属性目前仅适用于植物(例如甘蔗)、两格高的植物和门。
  1. linked=<true | false>
复制代码

重复图案材质|Repeat pattern textures

method=repeat

(必需) 重复图案的宽度
  1. width=<图案宽度>
复制代码

(必需) 重复图案的高度
  1. height=<图案高度>
复制代码

(必需) 图块列表(也就是按从左到右,从上到下的顺序列出所有图块)
  1. tiles=<图块列表>
复制代码

(可选)  方块的各个面的对称性
只适用于标准的六面体方块。默认值为none
none: 6个面都有材质,这样图块从所有面看上去都是一样的。
opposite: 双向对称;相反的面具有相同的材质,
这意味着与北面和西面相比,南面和东面的图块将左右镜像。
  1. symmetry=<none | opposite>
复制代码

固定材质|Fixed textures

method=fixed
(必需) 单个图块
  1. tiles=<单个图块>
复制代码

覆盖材质|Overlay textures

method=overlay

(可选) 连接图块
只连接使用指定图块的方块
  1. connectTiles=<图块列表>
复制代码

(可选) 连接方块
只连接指定的方块
  1. connectBlocks=<方块列表>
复制代码

(可选) Tint index
图块材质的Tint index
默认为-1 (禁用)
  1. tintIndex=<index>
复制代码

(可选) Tint block
用于图块材质着色的方块。
对于相同的tint index,不同方块使用不同颜色。
  1. tintBlock=<block>
复制代码

(可选) Layer
覆盖材质应该在哪一层上被渲染。
值:
  cutout_mipped - 有多级纹理的透明材质
  cutout - 没有多级纹理的透明材质
  translucent - 有多级纹理的半透明材质
默认为 "cutout_mipped"
  1. layer=<cutout_mipped|cutout|translucent>
复制代码
模板:



SQwatermark
本帖最后由 SQwatermark 于 2019-11-14 18:10 编辑

自然纹理
Natural Textures
概述|Overview
让材质具有随机的旋转和翻转,可以创造出类似于随机材质的效果,避免方块的栅格感

译者注:在制作CTM材质时,请务必注意有没有关闭对应方块的自然纹理

属性文件|natural.properties

路径: /assets/minecraft/optifine/natural.properties

格式
  1. <材质名称> = <值>
复制代码


4 = 旋转 x 90°(4种变体)
2 = 旋转 x 180°(2种变体)
F = 水平翻转材质 (2种变体)
4F = 4 + F (8种变体)
2F = 2 + F (4种变体)

例子:黑曜石的材质,有四种旋转变体,并且可以翻转
obsidian = 4F

下面给出自然纹理的默认值
草方块
  1. grass_block_side = F
  2. grass_block_side_overlay = F
  3. grass_block_snow = F
  4. mycelium_side = F
  5. mycelium_top = 4F
  6. grass_path_top = 4
  7. grass_path_side = F
复制代码

  1. snow = 4F
复制代码
泥土
  1. coarse_dirt = 4F
  2. podzol_top = 4F
  3. podzol_side = F
  4. farmland = 2F
  5. farmland_moist = 2F
复制代码
石头
  1. granite = 2F
  2. diorite = 2F
  3. andesite = 2F
  4. sandstone_top = 4
  5. sandstone_bottom = 4F
  6. stone_slab_top = F
  7. end_stone = 4
复制代码
砂砾
  1. gravel = 2
  2. clay = 4F
复制代码
原木
  1. oak_log = 2F
  2. spruce_log = 2F
  3. birch_log = F
  4. jungle_log = 2F
  5. acacia_log = 2F
  6. dark_oak_log = 2F
  7. oak_log_top = 4F
  8. spruce_log_top = 4F
  9. birch_log_top = 4F
  10. jungle_log_top = 4F
  11. acacia_log_top = 4F
  12. dark_oak_log_top = 4F
复制代码
树叶
  1. oak_leaves = 2F
  2. spruce_leaves = 2F
  3. birch_leaves = 2F
  4. jungle_leaves = 2
  5. dark_oak_leaves = 2F
  6. acacia_leaves = 2F
复制代码
矿石
  1. gold_ore = 2F
  2. iron_ore = 2F
  3. coal_ore = 2F
  4. diamond_ore = 2F
  5. redstone_ore = 2F
  6. lapis_ore = 2F
复制代码
下界
  1. netherrack = 4F
  2. nether_quartz_ore = 2
  3. soul_sand = 4F
  4. glowstone = 4
复制代码
红石
  1. redstone_lamp_on = 4F
  2. redstone_lamp = 4F
复制代码
海晶石
  1. prismarine = 4F
复制代码
混合
  1. obsidian = 4F
  2. cactus_side = 2F
复制代码

SQwatermark
本帖最后由 watermark 于 2019-9-24 14:21 编辑

更好的草地
Better Grass
概述|Overview
让低坡度草地的侧面覆盖上草方块顶部的材质,可以在视频设置里开启或关闭。

属性文件|bettergrass.properties

位置: /assets/minecraft/optifine/bettergrass.properties

方块
设置特定方块是否启用更好的草地功能
  1. grass=true
  2. grass_path=true
  3. mycelium=true
  4. podzol=true
复制代码

积雪方块
设置特定积雪方块是否启用更好的草地功能
  1. grass.snow=true
  2. mycelium.snow=true
  3. podzol.snow=true
复制代码

多层草地侧面
- layer 1 = grass_side
- layer 2 = grass (由生物群系着色)
允许用透明草地材质做草地侧面的覆盖层
  1. grass.multilayer=false
复制代码

材质
更好的草地使用的材质贴图
"texture.grass" 由生物群系着色
  1. texture.grass=block/grass_block_top
  2. texture.grass_side=block/grass_block_side
  3. texture.grass_path=block/grass_path_top
  4. texture.grass_path_side=block/grass_path_side
  5. texture.mycelium=block/mycelium_top
  6. texture.podzol=block/podzol_top
  7. texture.snow=block/snow
复制代码

SQwatermark
本帖最后由 SQwatermark 于 2019-11-14 12:37 编辑

生物群系调色板
Biome Palettes
概述|Overview
OptiFine的自定义生物群系调色板的说明
基于McPatcher的自定义生物群系调色板

在原版Minecraft中,草和树叶的材质根据所处生物群系的气候显示不同颜色。
这是由两个文件控制的,

  assets/minecraft/textures/colormap/grass.png
  assets/minecraft/textures/colormap/foliage.png

每个文件都是一张 256x256 的颜色映射图,应用于基础的草和树叶材质 (通常是灰色的)。

OptiFine将这个功能极大地扩展到其它方块以及环境天空和迷雾的颜色。
艺术家们可以将这一功能发挥到极致,让每个生物群系拥有独特的感觉。

这个页面被分为两个部分,第一部分描述颜色映射格式本身,
第二部分展示如何将它们应用于Minecraft中的各种元素。

颜色映射格式

原版颜色映射格式
原版Minecraft使用的格式是一张256x256的颜色映射,两个轴分别表示温度和湿度。
每个生物群系都有固定的基础温度和湿度,其值对应颜色映射中的一个像素。
随着y轴坐标的增大,它在颜色映射中的位置缓慢地向右下方移动。
一个由khanador撰写的论坛帖子阐述了这是如何工作的:
http://www.minecraftforum.net/forums/mapping-and-modding/resource-packs/resource-pack-discussion/1256322-new-biome?comment=124

原版格式将应用于所有的自定义颜色映射,除非你在属性文件中覆盖这个行为。

OptiFine "网格" 格式
一种可以更好地控制每个生物群系的替代格式。它在这个网页上有详细说明:
https://bitbucket.org/prupe/mcpatcher/wiki/Biome_Palettes_(Grid)

其他格式
此外,OptiFine提供了一种简单的 "固定" 颜色映射格式。这种格式不需要图片;
它只是应用于所有方块的单一颜色,不考虑位置。
它的主要目的是覆盖某些硬编码方块的颜色,如芦苇(甘蔗)。

属性文件|colormap.properties

自定义颜色映射可以包含 ".png" 文件或者属性文件,或者两者都有,这取决于你要做什么。
所有属性都是可选的,实际上,如果不需要更改任何属性,可以省略整个属性文件。

(可选) 调色板格式
  1. # 调色板格式
  2. format=<vanilla | grid | fixed>
复制代码

如果省略,默认格式为vanilla(原版)。如果你想要默认使用网格格式。
你可以在 "assets/minecraft/optifine/color.properties" 文件中进行全局设置:

  1. # 网格格式
  2. palette.format=grid
复制代码

注意,此设置不影响在 "assets/minecraft/textures/colormap" 中的原版 "grass.png" 和 "foliage.png" 文件。
为了保持非optifine用户的兼容性,它们总是以原版格式解释执行。
参阅下面的 "Grass and foliage",了解如何使用网格格式和它使用的材质。

(可选) 列出方块和可选属性

  1. # 列出方块和可选属性
  2. blocks=<列表>
复制代码

对于应用于地形的颜色映射 (与迷雾, 天空和水下相对),这是这个映射将要
应用于的方块和可选的属性值列表。如果未指定此属性,则方块名称会采用文件名。
(例如, "cobblestone.properties" -> "blocks=minecraft:cobblestone").

有关语法,请参阅属性文件说明 (properties_files.txt)。

  # 例如:
  blocks=stone minecraft:sand minecraft:lever:face=wall:facing=east,west

(可选) 颜色映射图片

  1. # 颜色映射图片
  2. source=<图片>
复制代码

只适用于原版和网格颜色映射。包含颜色映射的图片的路径。
如果省略此属性,它默认为与属性文件具有相同名称和目录的png,
例如, "stone.properties" -> "source=stone.png".

(可选) 默认颜色

  1. # 默认颜色
  2. color=<rgb值>
复制代码

对于 "format=fixed",这只是应用于所有匹配的方块块的固定颜色。
如果没有给出值,默认值是白色"ffffff"。

对于 "format=vanilla" 或 "format=grid",此颜色用于手持或掉落的方块。
如果没有指定值,则根据格式从固定位置取默认颜色:

  # 格式
  format=vanilla: x=127,y=127 (位图的正中心)
  format=grid: x=1,y=64 (海平面的平原生物群系)

应用自定义颜色映射

自定义颜色映射可以应用于任何方块或一组方块。
它们也可以应用于环境的迷雾,天空和水下的颜色。

基于方块的颜色映射可按照以下方式被应用:
- 作为 "assets/minecraft/optifine/color.properties" 中的列表
- 作为 "assets/minecraft/optifine/colormap/blocks" 下分开的文件

对于第一种方法,使用语法
  1. # 自定义颜色映射
  2. palette.block.<颜色映射图片>=<列出方块+属性>
复制代码

例如,这赋予了四种基本类型的叶子它们自己的颜色映射:
  1. # 自定义颜色映射
  2. palette.block.~/colormap/oak.png=oak_leaves
  3. palette.block.~/colormap/tall_grass_up.png=tall_grass:half=upper
  4. palette.block.~/colormap/tall_grass_low.png=tall_grass:half=lower
复制代码
译者注:OptiFine作者在修改文档时只修改了一部分,列出的实际上是橡树树叶和高草丛的上下两段,
早期版本的文档列出的确实是四种叶子

这种方法的两个局限:
- source和blocks属性可以被设置;其余为默认。
- 如果玩家在使用多个资源包,只有第一个color.properties文件会被游戏读取。

另一种方法是在 "assets/minecraft/optifine/colormap/blocks" 下使用单独的文件。
允许使用子文件夹,这会方便文件的管理。上面的例子也可以这样做:
在 "assets/minecraft/optifine/colormap/blocks/oak.properties":
  1. # 橡树颜色映射
  2. blocks=oak_leaves
复制代码
在 "assets/minecraft/optifine/colormap/blocks/tall_grass_up.properties":
  1. # 高草丛的上部颜色映射
  2. blocks=tall_grass:half=upper
复制代码
在 "assets/minecraft/optifine/colormap/blocks/tall_grass_low.properties":
  1. # 高草丛的下部颜色映射
  2. blocks=tall_grass:half=lower
复制代码
这假定 "oak.png", "tall_grass_up.png" 和 "tall_grass_low.png" 在相同的文件夹下。

单个方块
最简单的情况是,自定义颜色映射应用于没有属性值的单个方块类型,它不需要属性文件。
例如,"assets/minecraft/optifine/colormap/blocks/sand.png" 应用于沙子方块而不需要声明"blocks=sand"。

多个方块
要对所有石头和矿石应用相同的颜色映射,请使用属性文件
在 "assets/minecraft/optifine/colormap/blocks/stone_and_ore.properties"中:
  1. # 石头和矿石颜色映射
  2. blocks=stone gold_ore iron_ore 诸如此类
复制代码
如果使用新格式,则添加 "format=grid"。如果颜色映射图片也被命名为 "stone_and_ore.png",则source属性是不必要的。
在 "color.properties" 中这也可以写成:
  1. # 石头和矿石颜色映射
  2. palette.block.~/colormap/custom/stone.png=stone gold_ore iron_ore 诸如此类
复制代码
添加 "palette.format=grid" 让所有自定义颜色映射使用网格格式 (除了原版的 "grass.png" 和 "foliage.png")。

草和树叶
自定义颜色映射将会覆盖原版的grass.png和foliage.png。
这意味着你可以保留原版映射以保持兼容性,并为OptiFine用户创建自定义映射:
在 "assets/minecraft/optifine/colormap/blocks/grass.properties"中:
  1. # 草颜色映射
  2. format=grid
  3. # 注: 不需要 "blocks=grass",因为这已经在文件名中了。
  4. yVariance=2
复制代码
在 "assets/minecraft/optifine/colormap/blocks/oak.properties":中
  1. # 橡树颜色映射
  2. format=grid
  3. blocks=oak_leaves
复制代码

1.7中的固定reeds(甘蔗)
从1.7开始,Minecraft将 "grass.png" 应用于甘蔗颜色,给很多艺术创作者造成了困扰。
一张 "fixed" "ffffff"(白色) 颜色映射可以将这个行为恢复到版本1.6。
一个256x256全白色的颜色映射当然可以完成同样的事情,但是这种方法更有效。
最简单的方法是创建一个只包含一行的属性文件:
在 "assets/minecraft/optifine/colormap/blocks/reeds.properties"中:
  1. # 甘蔗颜色映射
  2. format=fixed
复制代码
这样就可以生效,因为blocks属性默认为文件名(reeds),而color属性默认为固定颜色映射的 "ffffff"。

环境迷雾、天空和水下颜色
这些特别命名的颜色映射覆盖默认的固定环境颜色:

    主世界迷雾: "assets/minecraft/optifine/colormap/fog0.png"
    主世界天空: "assets/minecraft/optifine/colormap/sky0.png"
    水下: "assets/minecraft/optifine/colormap/underwater.png"

每一个都可以有对应的属性文件来指定格式或其他设置。
这些颜色映射与基于地形的颜色映射一样,只是它们不关心方块属性。

参考文献

https://bitbucket.org/prupe/mcpatcher/wiki/Biome_Palettes
http://www.minecraftforum.net/forums/mapping-and-modding/resource-packs/resource-pack-discussion/1256322-new-biome?comment=124

SQwatermark
本帖最后由 SQwatermark 于 2019-11-14 17:34 编辑

自发光纹理
Emissive Textures
概述|Overview
可以在方块材质上添加永远以最大亮度被渲染的覆盖层,这可以模拟材质的发光部分。
自发光覆盖层具有与基础材质相同的名称和一个自定义的后缀。
例如:
  bedrock.png   - 基础材质
  bedrock_e.png - 自发光覆盖层
除SOLID层之外,自发光覆盖层和基础材质在同一层被渲染,
而SOLID层的覆盖层被渲染为CUTOUT_MIPPED。
覆盖层也可以用于物品、怪物和方块实体。

译者注:虽然自发光纹理很亮堂,但是对光照等级没有任何影响,也不会照亮周围的方块,如果你想让某个怪物或者物品能够照亮周围,你可能需要看看"动态光源"章节

属性文件|emissive.properties

此文件应该放在资源包文件夹"assets/minecraft/optifine" 下。
这个属性文件内只有一个属性,表示自发光覆盖层的自定义后缀。
  1. suffix.emissive=_e
复制代码

SQwatermark
本帖最后由 SQwatermark 于 2020-3-9 18:36 编辑

问题解答
Q&A
下面是有人提过的有关OptiFine自定义材质的问题:
1.14.4 Optifine 如何配合 Mythicmob 来自定义怪物的材质?(5楼是我的回答,附加一个详细案例)
optifine随机实体材质关于狼的使用(如果生物本身就有几张材质,应该怎么做)

SQwatermark
本帖最后由 watermark 于 2019-9-24 14:31 编辑

自定义方块
Custom Blocks
配置文件|block.properties
位置:"/assets/minecraft/optifine/block.properties"

渲染层 (可选)
定义指定方块的自定义渲染层

有以下几种渲染层:
  solid - no alpha, no blending (固体材质)
  cutout - alpha, no blending (cutout textures)
  cutout_mipped - alpha, no blending, mipmaps (cutout with mipmaps)
  translucent - alpha, blending, mipmaps (水, 彩色玻璃)

固体不透明方块 (石头, 泥土, 矿石, 诸如此类) 无法使用自定义渲染层,
因为这会影响面剔除(face culling),环境光遮蔽(ambient occlusion),光传播(light propagation),等。

示例:
  layer.translucent=glass_pane fence wooden_door

  1. layer.solid=<blocks>
  2. layer.cutout=<blocks>
  3. layer.cutout_mipped=<blocks>
  4. layer.translucent=<blocks>
复制代码

SQwatermark
本帖最后由 watermark 于 2019-9-24 14:38 编辑

自定义物品材质
Custom Item Textures
全局属性|cit.properties

单个物品材质|cit_single.properties


SQwatermark
本帖最后由 SQwatermark 于 2020-6-16 21:50 编辑

自定义GUI
Custom GUIs
概述|Overview

如果你想制作一个自定义GUI,请在 "assets/minecraft/optifine/GUI/container" 文件夹或者其任意一层子文件夹中创建一个.properties文件,并按照下面的模板编辑属性文件。

不同类型的容器有不同的要求和限制。详见下方。

常规属性|General properties

容器 (必需)
这是什么容器的GUI?
可能的值:
  anvil(铁砧) beacon(信标) brewing_stand(酿造台) chest(箱子) crafting(工作台) dispenser(发射器) enchantment(附魔)
  furnace(熔炉) hopper(漏斗) horse(马) villager(村民) shulker_box(潜影盒) creative(创造模式物品栏) inventory(物品栏)
  1. container=<容器名>
复制代码

材质 (必需)
GUI材质的替换。
"texture" 属性替换默认的GUI材质。
"texture.<路径>" 属性可以用于替换任何GUI材质。
<路径> 相对于 "/assets/minecraft/textures/gui"
创造模式物品栏GUI没有默认材质,所以必须使用路径材质。

创造模式物品栏的例子:
  # 文件 "assets/minecraft/optifine/gui/container/creative/creative_desert.properties
  container=creative
  biomes=desert
  texture.container/creative_inventory/tab_inventory=tab_inventory_desert
  texture.container/creative_inventory/tabs=tabs_desert
  texture.container/creative_inventory/tab_items=tab_items_desert
  texture.container/creative_inventory/tab_item_search=tab_item_search_desert

至少需要一个 "texture" 或者 "texture.<路径>"。
  1. texture=<材质>
  2. texture.<路径>=<材质>
复制代码

自定义实体或方块实体名称 (可选)
也许你想让特定名称的容器显示这个GUI,就需要用到这个属性
该名称使用与自定义物品材质的NBT标签类似的语法。
以 "!" 开头的值表示相反的匹配 (非)。

示例:
- 匹配名称:
  name=My Sword

- 使用特殊格式匹配名称:
注: 为了获得最佳兼容性,请使用转义序列 '\u00a7' 而不是§
  name=\u00a74\u00a7oMy Sword

- 使用 ? 和 * 的通配符
  name=pattern:Letter to *
匹配
  Letter to Herobrine
  Letter to a creeper
不匹配
  letter to Herobrine

- 通配符, 不区分大小写
  name=ipattern:Letter to *
匹配
  Letter to Herobrine
  Letter to a creeper
  letter to Herobrine

- Java正则表达式
  (See http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html)
  name=regex:Letter (to|from) .*
匹配
  Letter to Herobrine
  Letter from Herobrine
不匹配
  letter to Herobrine
  A Letter to Herobrine

- Java正则表达式, 不区分大小写
  name=iregex:Letter (to|from) .*
匹配
  Letter to Herobrine
  Letter from Herobrine
  letter to Herobrine
不匹配
  A Letter to Herobrine

注: 所有反斜线也必须输入两次.
正则表达式和通配符中的文字反斜杠必须输入4次.
正确:
  name=regex:\\d+
  name=regex:\\\\
  name=/\\/\\
错误:
  name=regex:\d+
  name=regex:\\
  name=/\/\
  1. name=<名称>
复制代码

生物群系 (可选)
这里列出了原版生物群系: https://minecraft.gamepedia.com/Biome#Biome_IDs
也可以使用模组添加的生物群系。
  1. biomes=<生物群系列表>
复制代码

高度 (可选)
  1. heights=<高度范围>
复制代码

箱子的特定属性|Chest specific properties

是否为大箱子 (可选)
  1. large=<true|false>
复制代码

是否为陷阱箱 (可选)
  1. trapped=<true|false>
复制代码

是否为圣诞节箱子 (可选)
  1. christmas=<true|false>
复制代码

是否为末影箱 (可选)
  1. ender=<true|false>
复制代码

信标的特定属性|Beacon specific properties

等级 (可选)
  1. levels=<等级>
复制代码

村民的特定属性|Villager specific properties

职业 (可选)
列出村民职业,可选填等级

格式
  <职业>[:等级1,等级2,...]

可选择的职业: none(失业), armorer(盔甲匠), butcher(屠夫), cartographer(制图师), cleric(牧师), farmer(农民),
         fisherman(渔夫), fletcher(制箭师), leatherworker(皮匠), librarian(图书管理员), mason(石匠),
         nitwit(傻子), shepherd(牧羊人), toolsmith(工具匠), weaponsmith(武器匠)

示例:
  # 职业为农民 (所有等级) 或图书管理员 (等级为 1,3,4)
  professions=farmer librarian:1,3-4
  # 职业全名
  professions=minecraft:fisherman minecraft:shepherd minecraft:nitwit
  1. professions.<n>=<职业>
复制代码

马和发射器的特定属性|Horse and dispenser specific properties

变体 (可选)
马的变体: horse donkey mule llama
发射器的变体: dispenser dropper
  1. variants=<变体>
复制代码

羊驼和潜影盒的特定属性|Lllama and shulker box specific properties

颜色 (可选)
写出潜影盒颜色或羊驼背上的地毯颜色
颜色列表: white orange magenta light_blue yellow lime pink gray light_gray(原为silver) cyan purple blue brown green red black
  1. colors=<颜色>
复制代码

SQwatermark
本帖最后由 SQwatermark 于 2019-11-8 17:12 编辑

尚未完成的事
Todo

连接材质
- innerSeams
- renderpass

自定义物品
- method
- cap
- fade

随机怪物
- redcow_overlay
- snowman_overlay

其他
- line.properties
- renderpass.properties
- compass.properties

ps:这是sp614x没完成的东西,不是我没翻译的东西


下一页 最后一页