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没完成的东西,不是我没翻译的东西


SQwatermark
本帖最后由 SQwatermark 于 2019-11-24 18:40 编辑

自定义天空
Custom Sky
概述|Overview
这是OptiFine的自定义天空功能的配置模板
基于MCPatcher的Better Skies mod的配置

将属性文件放置在材质包的如下位置
  ~/sky/world0/sky0.properties
  ~/sky/world0/sky1.properties
  ... 诸如此类.
每个文件都表示天空的一层。
OptiFine将持续加载直到找不到属性文件为止。
属性文件的加载顺序是它们在游戏中被渲染的顺序。

此外,两个特殊的属性文件将会应用于太阳和月亮(如果它们存在的话)。
这主要是为了让你能够覆盖太阳和月亮的混合方法。
  ~/sky/world0/sun.properties  (取代 sun.png)
  ~/sky/world0/moon_phases.properties (取代 moon_phases.png)

替换材质应该和 sun.png 或 moon_phases.png 相对应,
而不是一个完整的天空盒。
所有的属性名都区分大小写

在属性文件中可以使用下列任何一种语法来指定一个材质文件的路径:
相对于 assets/minecraft:
  路径/文件名 -> assets/minecraft/路径/文件名
相对于 assets/minecraft/optifine:
  ~/路径/文件名 -> assets/minecraft/optifine/路径/文件名
相对于属性文件的位置:
  ./路径/文件名 -> (属性文件的路径)/路径/文件名
标注命名空间的绝对路径:
  命名空间:路径/文件名 -> assets/命名空间/路径/文件名

注: 路径中的 "world0" 指的是主世界。
如果存在其他世界的天空(下界和末地不使用标准天空渲染方法),
他们的文件应该在 ~/sky/world<世界序号> 内。

天空盒模板:


天空属性|Sky properties

(可选) 替换材质
它可以在材质包的任何位置。
而且多个属性文件可以共用相同的材质。如果未指定,
会使用相同目录下的 sky<n>.png。
  1. source=<材质>
复制代码

(必需) 淡入/淡出时间
所有时间都使用小时:分钟的24小时格式。
参考:
  日出     =  6:00 = /time set 0
  正午     = 12:00 = /time set 6000
  日落     = 18:00 = /time set 12000
  午夜     =  0:00 = /time set 18000
淡出/淡入时间控制混合时的明度。
  在 startFadeIn 和 endFadeIn 之间:   从0升到1
  在 endFadeIn 和 startFadeOut 之间:  固定为1
  在 startFadeOut 和 endFadeOut 之间: 从1降到0
  在 endFadeOut 和 startFadeIn 之间:  固定为0
注意你不需要指定startFadeOut的值;
它是由其他三个值确定的。
  1. startFadeIn=<小时:分钟>
  2. endFadeIn=<小时:分钟>
  3. endFadeOut=<小时:分钟>
复制代码

(可选) 混合方法
这里的 "上一层" 可以指默认的天空
或由 sky<n-1>.properties 定义的上一个自定义天空。
支持的混合方法有
  add:      将天空位图叠加到上一层
  subtract:
  multiply: 将之前的RGBA值乘以当前位图中的RGBA值
            
  dodge:
  burn:
  screen:
  replace:  用当前位图完全替换上一层。该方法没有淡入和淡出;
               如果根据淡入和淡出时间计算的亮度大于0,则使用全像素值。
  overlay:  大于0.5的RGB值会让图片变亮, 小于0.5变暗
  alpha:    按照alpha值加权平均
默认方法为add
  1. blend=add
复制代码
译者注:此处未说明的混合方法参考 "属性文件说明" 中的 "混合方法" 章节

(可选) 旋转
位图是否应该随时间旋转。
默认值为true。
旋转的速度和方向也可以控制。
  1. rotate=true
复制代码

(可选) 旋转速度
这里指旋转速度相对于默认的每天旋转360度的倍数
例如,值为0.5时,每两天旋转一周;而某些不合常理的数值可以让云每天出现在不同位置。

注:  这并不影响始终在24小时周期内发生的淡入和淡出。
  1. speed=1.0
复制代码

(可选) 旋转轴
如果玩家朝指定的方向看,天空盒会以顺时针方向围绕视线旋转。
默认的旋转是沿着南方向轴(东升西落)。

便于参考,下面给出六个基本方向对应的向量。
然而,旋转轴可以是除0 0 0之外的任何向量。
不必刻意使用单位矢量。
  down  =  0 -1  0
  up    =  0  1  0
  north =  0  0 -1
  south =  0  0  1
  west  = -1  0  0
  east  =  1  0  0
  1. axis=0.0 0.0 1.0
复制代码

(可选) 天气
渲染这一层所需要的天气条件
多个值可用空格键分隔
例如 "weather=clear rain thunder"
默认为 "clear"
  1. weather=clear|rain|thunder
复制代码

(可选) 生物群系和高度范围
将天空覆盖层限制到特定高度范围和生物群系。
这里列出了原版生物群系: https://minecraft.gamepedia.com/Biome#Biome_IDs
也可以使用模组添加的生物群系。
  1. biomes=<生物群系列表>
  2. heights=<高度范围>
复制代码

(可选) 过渡时长
覆盖层亮度的过渡时长 (秒)。
用于平滑急剧的变化,例如不同生物群系之间的天空的替换。
默认为1秒。
  1. transition=1
复制代码


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

自定义载入画面
Custom Loading Screens
属性文件|loading.properties

路径: "/assets/minecraft/optifine/gui/loading/loading.properties"
控制世界载入画面

每个维度的自定义载入画面的背景图片路径为:
   /assets/minecraft/optifine/gui/loading/background<dim>.png
"dim" 指维度ID:
  - 下界      = -1
  - 主世界    = 0
  - 末地      = 1

模组添加的维度也可以以这种方式被识别。

缩放模式 (可选)
背景材质的自定义缩放模式

  fixed - 使用固定尺寸 (默认)
  full - 全屏, 保持长宽比
  stretch - 全屏
  1. scaleMode=<fixed|full|stretch>
复制代码

尺寸 (可选)
背景材质的自定义尺寸。
对于缩放模式 "fixed",它定义了要使用的缩放尺寸 (默认为2)。
这与当前的GUI尺寸是联系的。
对于缩放模式 "full" 和 "stretch" 它定义了屏幕上
有多少张完整的材质 (默认为1)。
  1. scale=2
复制代码

是否居中 (可选)
定义背景材质是否应居中显示在屏幕上。
默认为false.
  1. center=<true|false>
复制代码

属性 "scaleMode", "scale" 和 "center" 也可以在每个维度单独定义。
  1. dim<dim>.scaleMode=<fixed|full|stretch>
  2. dim<dim>.scale=2
  3. dim<dim>.center=<true|false>
复制代码


SQwatermark
本帖最后由 watermark 于 2019-9-24 13:18 编辑

系统属性
System Properties
系统属性必须添加到启动程序配置文件 (launcher profile) 中的 "JVM Arguments" 字段中。
例如,要启用扩展日志记录,请在JVM参数中添加 "-Dlog.detail=true"。

启用扩展日志记录
  1. log.detail=<true|false>
复制代码

将 final texture map 保存在 "debug" 文件夹中
  1. saveTextureMap=<true|false>
复制代码

将 final shader sources 保存在 "shaderpacks/debug" 文件夹中
  1. shaders.debug.save=<true|false>
复制代码

自动动态化所有怪物模型
在测试自定义实体模型时很有用
  1. animate.model.living=<true|false>
复制代码

从文件夹 "playermodels" 读取玩家模型
  1. player.models.local=<true|false>
复制代码

每5秒自动重载一次玩家模型
在测试自定义本地玩家模型时很有用
  1. player.models.reload=<true|false>
复制代码

SQwatermark
本帖最后由 SQwatermark 于 2020-3-25 08:36 编辑

随机实体材质
Random Entities
概述|Overview
随机实体材质基于MCPatcher的 Random Mobs 模组

可以向下兼容随机怪物(Random Mobs),仍然支持在 "assets/minecraft/optifine/mob" 中的材质和配置文件。

你可以把备选材质放在资源包的 "optifine/random" 文件夹下,和 "textures" 文件夹中的原版材质是对应的:

基础材质:
  assets/minecraft/textures/entity/creeper/creeper.png
备选材质:
  assets/minecraft/optifine/random/entity/creeper/creeper2.png
  assets/minecraft/optifine/random/entity/creeper/creeper3.png
  assets/minecraft/optifine/random/entity/creeper/creeper4.png
  诸如此类
属性文件 (可选):
  assets/minecraft/optifine/random/entity/creeper/creeper.properties

基础材质:
  assets/minecraft/textures/painting/paintings_kristoffer_zetterstrand.png
备选材质:
  assets/minecraft/optifine/random/painting/paintings_kristoffer_zetterstrand2.png
  assets/minecraft/optifine/random/painting/paintings_kristoffer_zetterstrand3.png
  assets/minecraft/optifine/random/painting/paintings_kristoffer_zetterstrand4.png
  诸如此类
属性文件 (可选):
  assets/minecraft/optifine/random/painting/paintings_kristoffer_zetterstrand.properties

属性文件由一系列规则组成,这些规则从1开始编号。

每一组规则都指定了一些要使用的实体材质,以及一个或多个使用它们的条件。

单人游戏中怪物生成的坐标或者多人游戏中怪物第一次被玩家发现时的坐标会依次与每一条规则进行匹配,第一个匹配的规则将被使用。
如果没有匹配的规则,将使用默认材质 (例如 creeper.png)。

如果某个实体没有设置 ".properties" 文件,那么所有可以使用的皮肤都将应用于该实体。

有多张材质的实体将使用基础材质的 ".properties" 文件
也就是说,你不需要创建
  wolf.properties
  wolf_tame.properties
  wolf_angry.properties
如果每张材质都有相同数量的备选材质,只需要wolf.properties就可以应用于这三者。
"_eyes" 和 "_overlay" 类似。
(译者注:原文写的就不明不白,对此感到困惑的可以看一下这个帖子

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

属性文件|random_entities.properties

(必须) 材质的序号
材质序号 "1" 表示 "assets/minecraft/texture" 中的默认材质
  1. textures.<n>=<材质序号列表>
复制代码
也可以使用随机怪物属性 "skins.<n>",二者选一
  1. skins.<n>=<皮肤列表>
复制代码

(可选) 随机选项的权重
权重之和不需要正好为100或者其他特定数字.
权重的数量应该和材质的数量一致
  1. weights.<n>=<等数量的权重列表>
复制代码

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

(可选) 高度范围
取代了旧的minHeight和maxHeight属性。
  1. heights.<n>=<高度范围>
复制代码

(可选) 实体名
使用和自定义物品材质NBT标签相似的语法.
以 "!" 开头的值表示否定的匹配 (非).
示例:
- 匹配字符串: "name=Pinky"
- 匹配特殊格式: "name=\u00a74\u00a7oPinky"  
   (为了获得最佳兼容性,请使用转义序列'\u00a7'而不是"§")
- 使用 "?" 和 "*" 的通配符: "name=pattern:Pinky*"
- 通配符, 不区分大小写: "name=ipattern:Pinky*"
- Java正则表达式: "name=regex:Pin(k)+y"
   (参考 http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html)
- Java正则表达式, 不区分大小写: "name=iregex:Pin(k)+y"
匹配字符串中的所有反斜线必须输入两次.  
正则表达式和通配符中的文字反斜杠必须输入4次.
正确:
  name=regex:\\d+
  name=regex:\\\\
  name=/\\/\\
错误:
  name=regex:\d+
  name=regex:\\
  name=/\/\
  1. name.<n>=<实体名>
复制代码

职业 (可选)
列出村民职业,可选填等级
格式为:
  <职业>[:等级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>=<职业>
复制代码

项圈颜色 (可选)
列出狼/猫的项圈颜色
可选的颜色: white orange magenta(品红色) light_blue yellow lime(黄绿色)
         pink gray light_gray cyan(青色) purple(紫色) blue brown green red black
示例:
  colarColors=pink magenta purple
  1. collarColors.<n>=<颜色>
复制代码

是否为幼崽 (可选)
只对怪物有效
  1. baby.<n>=<true/false>
复制代码

生命值(可选)
生命值的范围,可以以数值或者百分比的形式给出。
只对怪物有效。
示例:
  health.1=10
  health.2=5-8 10-12
  health.3=0-50%
  1. health.<n>=<list>
复制代码

月相(可选)
月相为0-7的整数
示例:
  moonPhase.1=3
  moonPhase.2=0 1 2
  moonPhase.1=0-2 4-7
  1. moonPhase.<n>=<list>
复制代码

时间(可选)
按照刻计算的时间 (0-24000)
示例:
  dayTime.1=2000-10000
  dayTime.2=0-1000 18000-24000
  1. dayTime.<n>=<list>
复制代码

天气(可选)
不同值可以用空格分隔
例如 "weather=clear rain thunder"
  1. weather.<n>=<clear|rain|thunder>
复制代码

示例|Examples

creeper/creeper.properties:

将 creeper10.png 到 creeper14.png 应用于所有位于地下的苦力怕.
creeper13.png 当前出现的概率为 7.3% (3/(10+10+10+3+10)).
  1. skins.1=10-14
  2. weights.1=10 10 10 3 10
  3. heights.1=0-55
复制代码

将 5, 7, 9 应用于高于80的山区地带.
  1. skins.2=5 7 9
  2. biomes.2=ExtremeHills DesertHills ForestHills ExtremeHillsEdge JungleHills IceMountains
  3. heights.2=80-255
复制代码

没有其他规则匹配这些材质时,需要额外列出剩余的材质,这样他们会等概率地随机出现在上述情况以外的区域。
请记住,如果没有这部分,这些材质就不会被使用,实体材质就只会显示为 creeper/creeper.png。
  1. skins.3=1-4 6 8 15-20
复制代码

译者注
绘制实体的材质,推荐使用BlockBench,自带MC原版生物的模型,甚至可以导入模组生物的 .java 格式模型(不过我估计模组生物是不能用随机实体材质的,大概)

下一页 最后一页