Minecraft(我的世界)中文论坛

标题: [Doc] |高清修复OptiFine| 官方帮助文档翻译

作者: SQwatermark    时间: 2019-8-3 22:55
标题: [Doc] |高清修复OptiFine| 官方帮助文档翻译
本帖最后由 SQwatermark 于 2020-12-21 21:11 编辑

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

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

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

此文档适合:想要制作具有高度自定义内容的资源包的人,想要魔改基于OptiFine的资源包的人
首先你要对Minecraft原版的资源包有一定了解,如果你想从基础学起,建议看看Minecraft wiki的 "资源包" 章节
如果使用本文档过程中遇到疑难,或者发现文档中有错误的地方,请回帖提出疑问/指出错误。这也会给接下来的阅读者很大帮助。
非常经典的例子:Conquest_ 材质包,cocricot材质包,解压看看,非常有助于理解这篇文档的内容。
如果你想对模型或实体的材质进行改动的话,建议使用BlockBench,功能强大且丰富,CubikStudio不仅收费而且好久没更了,如果不走体素建模路线就没必要用CubikStudio了
目录
Index
属性文件说明|Properties Files
连接材质|CTM
自然纹理|Natural Textures
更好的草地|Better Grass
自定义方块|Custom Blocks
自定义物品材质|CIT
随机实体材质|Random Entities
自定义实体模型|CEM
自定义动画|Custom Animations
自定义颜色|Custom Colors
自定义天空|Custom Sky
自发光纹理|Emissive Textures
动态光源|Dynamic Lights
自定义载入画面|Custom Loading Screens
自定义GUI|Custom GUIs
自定义全景图|Custom Panorama
高清字体|HD Fonts
系统属性|System Properties
尚未完成的事|Todo
有关教程链接
References
问题解答
Q & A
下面是有人提过的有关OptiFine自定义材质的问题:
Optifine 如何配合 Mythicmob 来自定义怪物的材质?(5楼是我的回答,附加一个详细案例)
狼的随机实体材质(如果生物本身就有几张材质,应该怎么做)
如何自定义熔炉和箱子的材质(给出了较为详细的例子,但是不能用于服务器)

小组:幽篁流觞(RMA)


作者: ㏑243    时间: 2019-8-3 23:02
翻译辛苦了!支持大佬
作者: HorizonStudio    时间: 2019-8-3 23:04
翻译辛苦了!!!
作者: 米安博奥    时间: 2019-8-4 01:52
这个很有用 万分感谢
作者: Frost-ZX    时间: 2019-8-4 11:48
感谢翻译!
作者: 娃哈哈呵呵    时间: 2019-8-9 13:51
大佬翻译辛苦了
作者: dark4    时间: 2019-8-10 12:41
大佬牛逼,辛苦了
作者: ゼロツー    时间: 2019-8-12 00:53
不錯不錯
作者: YYFC    时间: 2019-8-12 06:05
翻译辛苦了大佬。
作者: SQwatermark    时间: 2019-9-12 13:39
本帖最后由 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


作者: 月明梨花白    时间: 2019-9-12 16:57
感谢小天使
作者: SQwatermark    时间: 2019-9-12 20:17
本帖最后由 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    时间: 2019-9-12 21:00
本帖最后由 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    时间: 2019-9-12 23:59
本帖最后由 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    时间: 2019-9-13 00:14
本帖最后由 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    时间: 2019-9-13 11:43
本帖最后由 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    时间: 2019-9-13 12:48
本帖最后由 SQwatermark 于 2020-3-9 18:36 编辑

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

作者: SQwatermark    时间: 2019-9-13 13:01
本帖最后由 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    时间: 2019-9-13 16:57
本帖最后由 watermark 于 2019-9-24 14:38 编辑

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

单个物品材质|cit_single.properties


作者: SQwatermark    时间: 2019-9-13 17:42
本帖最后由 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    时间: 2019-9-13 17:58
本帖最后由 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    时间: 2019-9-13 19:14
本帖最后由 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    时间: 2019-9-13 19:42
本帖最后由 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    时间: 2019-9-24 13:16
本帖最后由 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    时间: 2019-9-24 14:19
本帖最后由 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 格式模型(不过我估计模组生物是不能用随机实体材质的,大概)

作者: SQwatermark    时间: 2019-9-24 15:30
本帖最后由 SQwatermark 于 2020-8-31 14:52 编辑

自定义实体模型
Custom Entity Models
实体模型|cem_model.txt
部件模型|cem_part.txt

自定义实体模型动画|cem_animation.txt


译者注:制作模型的话推荐cubikstudio或者是blockbench,前者是收费的,后者是免费的

作者: SQwatermark    时间: 2019-11-8 12:32
本帖最后由 SQwatermark 于 2019-11-14 17:26 编辑

自定义动画
Custom Animations
概述|Overview
OptiFine的自定义动画(Custom Animations)的使用说明,
基于McPatcher的自定义动画

在Minecraft 1.5中,Mojang添加了动态化任何方块或物品材质的功能(最初是MCPatcher提供的功能)。
然而,还没有办法动态化其他材质,如生物皮肤和GUI。
OptiFine填补了这一空白,使任何任何矩形区域的材质都可以被动态化。
这甚至包括OptiFine的其它功能所用到的特殊材质,比如随机生物皮肤(random mob skins)和天空盒(skyboxes)。

对于方块和物品材质,包括CTM和CIT,可以继续使用Mojang的mcmeta方法。

译者注:如果你对Minecraft原版的动态材质还没有了解,建议阅读Minecraft wiki"资源包"条目的"动态材质"小节

动态材质|Animated textures
要创建一个动画,首先指定材质,然后指定你想要动态化的区域的x和y坐标以及宽度与高度。
并创建由帧组成的垂直带状图片 (类似于胶卷,下面就用胶卷表述这个东西吧) 作为动画的内容。
胶卷的宽度应该与要动态化的区域的宽度相同,高度应该是动态化区域的高度的整数倍。

创建一个任意名称的属性文件。把它放到assets/minecraft/optifine/anim文件夹,
或其任何子文件夹中。并将这些属性添加到文件中。

  1. # 自定义动画
  2. from=<动画的路径>
  3. to=<想要动态化的材质的路径>
  4. x=<动态化区域的x坐标>
  5. y=<动态化区域的y坐标>
  6. w=<动态化区域的宽度>
  7. h=<动态化区域的高度>
  8. # 下面三项可选
  9. duration=<按照刻计算的默认帧时长>
  10. interpolate=<true|false>
  11. skip=<要跳过的插入刻>
复制代码

参阅属性文件说明(properties_files.txt),了解如何指定材质文件的路径。

每个属性文件创建一个简单的动画,从上到下按顺序每一刻(1/20秒)播放一帧,然后循环。

相同材质的多个非重叠部分可以通过使用相同的to值和不同的from、x、y、w、h的值进行动画处理。
他们甚至可以有独立的时序和帧序。

为了获得最大的兼容性,最好使x、y、w和h为16的倍数。

帧序和时长|Frame order and timing

每个自定义动画还可以指定其动画速度和帧序。在属性文件中,添加一系列条目
  1. # 定义帧的时间(Frame timing)
  2. tile.X=Y
  3. duration.X=Z
复制代码

X从0开始,表示帧的顺序。Y表示录像带中的图片序号。第一张图片为0,第二张为1,以此类推。
Z表示这一帧播放的持续时间,按照游戏刻计算 (1刻 = 1/20秒)。
如果省略Z,持续时间为默认的帧时长,如果默认的帧时长也没有设定,则为1。

例如,胶卷的大小为16x48(3帧)。让它进行一个5帧的循环,并在中间插入一个停顿,
属性文件看起来可能像这样:
  1. # 动态化5帧
  2. tile.0=0
  3. tile.1=1
  4. tile.2=2
  5. duration.2=5
  6. tile.3=1
  7. tile.4=0
复制代码

这个动画将会以如下顺序播放:

  第0帧: 播放动画图块0持续1刻 (默认时长)
  第1帧: 播放动画图块1持续1刻 (默认时长)
  第2帧: 播放动画图块2持续5刻 (duration=5)
  第3帧: 播放动画图块1持续1刻 (默认时长)
  第4帧: 播放动画图块0持续1刻 (默认时长)
  返回第0帧
  合计5帧,时长9刻

参考文献|References
https://bitbucket.org/prupe/mcpatcher/wiki/Custom_Animations

作者: SQwatermark    时间: 2019-11-8 12:50
本帖最后由 SQwatermark 于 2019-11-14 17:31 编辑

自定义全景图
Custom Panorama
概述|Overview
译者注:这个全景图指的就是Minecraft主菜单背景中的全景图

属性文件|background.properties
路径:"/assets/minecraft/optifine/gui/background.properties"
控制主菜单全景图(panorama)的行为

备选全景图文件夹:
  /assets/minecraft/optifine/gui/background1
  /assets/minecraft/optifine/gui/background2
  /assets/minecraft/optifine/gui/background3
  ...
译者注:当你打开主菜单时,OptiFine会随机抓一个备选文件夹,播放里面的全景图

备选全景图文件夹应该包含以下材质
  panorama_0.png
  panorama_1.png
  panorama_2.png
  panorama_3.png
  panorama_4.png
  panorama_5.png

备选全景图文件夹内可以创建 "background.properties" 来定义此全景图的自定义属性

权重 (可选)
权重越高,越容易被选中
默认为 1
  1. weight=<权重>
复制代码

模糊等级(Blur level) (可选)
主菜单背景使用三种模糊
模糊等级过高可能会降低主菜单FPS
  1. blur1=<1-64>
  2. blur2=<1-3>
  3. blur3=<1-3>
复制代码

覆盖层颜色(Overlay colors) (可选)
在背景图像上有两个渐变覆盖层
当顶部和底部颜色为0时,覆盖被禁用
颜色格式为 ARGB (十六进制)
默认值如下
  1. overlay1.top=80FFFFFF
  2. overlay1.bottom=00FFFFFF
  3. overlay2.top=00000000
  4. overlay2.bottom=80000000
复制代码

作者: SQwatermark    时间: 2019-11-8 13:31
本帖最后由 SQwatermark 于 2019-11-8 17:13 编辑

动态光源
Dynamic Lights
概述|Overview
此配置允许模组定义实体和物品的动态光源等级。

属性文件|dynamic_lights.properties

此配置文件允许模组定义实体和物品的动态光源等级。
位置: "/assets/<mod_id>/optifine/dynamic_lights.properties"

实体光照等级
实体名会被自动补全模组ID。
光照等级必须在0和15之间。
示例:
  entities=basalz:15 blitz:7
  1. entities=<实体名:光照等级> ...  
复制代码

物品光照等级
物品名会被自动补全模组ID。
光照等级必须在0和15之间。
示例:
  items=florb:15 morb:7
  1. items=<物品名:光照等级> ...  
复制代码

作者: SQwatermark    时间: 2019-11-8 17:07
本帖最后由 SQwatermark 于 2019-11-14 18:19 编辑

自定义颜色
Custom Colors
综述|Overview
OptiFine的自定义颜色功能的配置模板
基于MCPatcher的自定义颜色模组的配置

完整文件列表

以下是自定义颜色使用的所有文件的完整列表:
注: ~ 是optifine文件夹 (assets/minecraft/optifine) 的速记
~/color.properties - 定义了一些单值颜色
~/colormap/redstone.png - 16x1 红石颜色 (0=未充能, 15=完全充能)
~/colormap/pumpkinstem.png - 8x1 南瓜梗颜色 (0=芽, 7=完全成熟)
~/colormap/melonstem.png - 8x1 西瓜梗颜色 (0=芽, 7=完全成熟)
~/colormap/lavadrop.png - Nx1 熔岩滴颜色 (x=粒子按刻计算的年龄)
~/colormap/myceliumparticle.png - 任何尺寸, 随机菌丝体粒子颜色
~/colormap/xporb.png - 任何尺寸, 经验球颜色阵列
~/colormap/durability.png - 任何尺寸, 物品耐久度颜色阵列
~/colormap/swampgrass.png - 256x256 沼泽草调色板
~/colormap/swampfoliage.png - 256x256 沼泽树叶调色板
~/colormap/pine.png - 256x256 松树调色板
~/colormap/birch.png - 256x256 白桦调色板
~/colormap/water.png - 256x256 水调色板
~/colormap/underwater.png - 256x256 水中颜色
~/colormap/underlava.png - 256x256 熔岩中颜色
~/colormap/fog0.png - 256x256 主世界迷雾颜色
~/colormap/sky0.png - 256x256 主世界天空颜色
~/lightmap/world0.png - Nx32 或 Nx64 主世界光照调色板
~/lightmap/world-1.png - Nx32 或 Nx64 下界光照调色板
~/lightmap/world1.png - Nx32 或 Nx64 末地光照调色板

详解|Details
译者注:很杂乱很头大,即便我花了不少功夫试图让条理变得清楚些,这一章的内容依然很杂乱。
请各位整理一下思维,想清楚自己要实现什么功能,边看边找有用信息吧

作者: SQwatermark    时间: 2019-11-13 11:10
本帖最后由 SQwatermark 于 2020-8-31 14:56 编辑

颜色设置
color.properties
属性文件|color.properties

你只需要为你想要修改的属性提供数值。
方便起见,下面列出Minecraft中每个属性的默认值。

所有的属性名都区分大小写。
所有颜色都是十六进制rgb格式,从000000到ffffff。
除非另有说明,否则所有路径都相对于assets/minecraft。

水的粒子效果(飞溅的水花, 气泡, 水滴)的底色
生物群系水体颜色乘数应用于该值。该值应该与基础水材质的颜色匹配。
如果你的基础水材质是灰色的,那么你可以通过misc/watercolorX.png进行着色,
并且把这个值设置为为ffffff。
  1. particle.water=334cff
复制代码

传送门颗粒的底色
RGB值都会乘一个0.4到1.0之间的随机乘数
  1. particle.portal=ff4ce5
复制代码

下界和末地颜色
  1. fog.nether=330707
  2. fog.end=181318
  3. sky.end=282828
复制代码

荷叶颜色
单一颜色,应用于所有的生物群系。
  1. lilypad=208030
复制代码

药水效果的颜色
最终表现出来的颜色是这些颜色以药水效果的等级作为权重,加权平均后的结果。
  1. potion.absorption=2552a5
  2. potion.blindness=1f1f23
  3. potion.confusion=551d4a
  4. potion.damageBoost=932423
  5. potion.digSlowDown=4a4217
  6. potion.digSpeed=d9c043
  7. potion.fireResistance=e49a3a
  8. potion.harm=430a09
  9. potion.heal=f82423
  10. potion.healthBoost=f87d23
  11. potion.hunger=587653
  12. potion.invisibility=7f8392
  13. potion.glowing=94a061
  14. potion.jump=786297
  15. potion.levitation=ceffff
  16. potion.luck=339900
  17. potion.moveSlowdown=5a6c81
  18. potion.moveSpeed=7cafc6
  19. potion.nightVision=1f1fa1
  20. potion.poison=4e9331
  21. potion.regeneration=cd5cab
  22. potion.resistance=99453a
  23. potion.saturation=f82423
  24. potion.unluck=c0a44d
  25. potion.waterBreathing=2e5299
  26. potion.weakness=484d48
  27. potion.wither=352a27
复制代码
potion.water 代表一个普通的水瓶
  1. potion.water=385dc6
复制代码

刷怪蛋颜色
egg.<shell|spots>.<实体名>=<颜色>
实体名可以是简化的 (通常的实体名),也可以是完整的 (带有命名空间的)。
完整实体名的分隔符 ":" 必须转义。
例如:
  egg.shell.creeper=0da70b
  egg.spots.minecraft\:creeper=000000
  1. egg.shell.<实体名>=<颜色>
  2. egg.spots.<实体名>=<颜色>
复制代码

地图颜色
别名
  map.snow=map.white
  map.adobe=map.orange
  map.lightBlue=map.light_blue

方块在地图中的颜色
  1. map.air=000000
  2. map.grass=7fb238
  3. map.sand=f7e9a3
  4. map.cloth=c7c7c7
  5. map.tnt=ff0000
  6. map.ice=a0a0ff
  7. map.iron=a7a7a7
  8. map.foliage=007c00
  9. map.clay=a4a8b8
  10. map.dirt=976d4d
  11. map.stone=707070
  12. map.water=4040ff
  13. map.wood=8f7748
  14. map.quartz=fffcf5
  15. map.gold=faee4d
  16. map.diamond=5cdbd5
  17. map.lapis=4a80ff
  18. map.emerald=00d93a
  19. map.podzol=815631
  20. map.netherrack=700200
复制代码

通用地图颜色
  1. map.white=ffffff
  2. map.orange=d87f33
  3. map.magenta=b24cd8
  4. map.light_blue=6699d8
  5. map.yellow=e5e533
  6. map.lime=7fcc19
  7. map.pink=f27fa5
  8. map.gray=4c4c4c
  9. map.silver=999999
  10. map.cyan=4c7f99
  11. map.purple=7f3fb2
  12. map.blue=334cb2
  13. map.brown=664c33
  14. map.green=667f33
  15. map.red=993333
  16. map.black=191919
复制代码

旗帜使用通用地图颜色。
旗帜颜色不能区别于地图颜色进行单独配置。

羊的颜色
  1. sheep.white=ffffff
  2. sheep.orange=f2b233
  3. sheep.magenta=e57fd8
  4. sheep.lightBlue=99b2f2
  5. sheep.yellow=e5e533
  6. sheep.lime=7fcc19
  7. sheep.pink=f2b2cc
  8. sheep.gray=4c4c4c
  9. sheep.silver=999999
  10. sheep.cyan=4c99b2
  11. sheep.purple=b266e5
  12. sheep.blue=3366cc
  13. sheep.brown=7f664c
  14. sheep.green=667f33
  15. sheep.red=cc4c4c
  16. sheep.black=191919
复制代码

狼项圈颜色
  1. collar.white=ffffff
  2. collar.orange=f2b233
  3. collar.magenta=e57fd8
  4. collar.lightBlue=99b2f2
  5. collar.yellow=e5e533
  6. collar.lime=7fcc19
  7. collar.pink=f2b2cc
  8. collar.gray=4c4c4c
  9. collar.silver=999999
  10. collar.cyan=4c99b2
  11. collar.purple=b266e5
  12. collar.blue=3366cc
  13. collar.brown=7f664c
  14. collar.green=667f33
  15. collar.red=cc4c4c
  16. collar.black=191919
复制代码

染料颜色
注: 这些值虽然存在,但实际上并没有在任何地方使用。
  1. dye.black=1e1b1b
  2. dye.red=b3312c
  3. dye.green=3b511a
  4. dye.brown=51301a
  5. dye.blue=253192
  6. dye.purple=7b2fbe
  7. dye.cyan=287697
  8. dye.silver=287697
  9. dye.gray=434343
  10. dye.pink=d88198
  11. dye.lime=41cd34
  12. dye.yellow=decf2a
  13. dye.lightBlue=6689d3
  14. dye.magenta=c354cd
  15. dye.orange=eb8844
  16. dye.white=f0f0f0
复制代码

文字颜色
经验等级文字的颜色
  1. text.xpbar=80ff20
复制代码
"Boss生命值" 文字的颜色
  1. text.boss=ff00ff
复制代码
告示牌文字的颜色
  1. text.sign=000000
复制代码
由 \247 + 0123456789abcdef 生成的颜色代码
  1. text.code.0=000000
  2. text.code.1=0000aa
  3. text.code.2=00aa00
  4. text.code.3=00aaaa
  5. text.code.4=aa0000
  6. text.code.5=aa00aa
  7. text.code.6=ffaa00
  8. text.code.7=aaaaaa
  9. text.code.8=555555
  10. text.code.9=5555ff
  11. text.code.10=55ff55
  12. text.code.11=55ffff
  13. text.code.12=ff5555
  14. text.code.13=ff55ff
  15. text.code.14=ffff55
  16. text.code.15=ffffff
  17. text.code.16=000000
  18. text.code.17=00002a
  19. text.code.18=002a00
  20. text.code.19=002a2a
  21. text.code.20=2a0000
  22. text.code.21=2a002a
  23. text.code.22=2a2a00
  24. text.code.23=2a2a2a
  25. text.code.24=151515
  26. text.code.25=15153f
  27. text.code.26=153f15
  28. text.code.27=153f3f
  29. text.code.28=3f1515
  30. text.code.29=3f153f
  31. text.code.30=3f3f15
  32. text.code.31=3f3f3f
复制代码

资源载入画面
背景颜色
  1. screen.loading=ffffff
复制代码
加载条背景颜色
  1. screen.loading.bar=ffffff
复制代码
加载条边框颜色
  1. screen.loading.outline=000000
复制代码
加载条前景颜色
  1. screen.loading.progress=e22837
复制代码
Logo 混合模式
src, dst, srcA 和 dstA 是以下之一:
  ZERO, ONE, SRC_COLOR, ONE_MINUS_SRC_COLOR, DST_COLOR, ONE_MINUS_DST_COLOR,
  SRC_ALPHA, ONE_MINUS_SRC_ALPHA, DST_ALPHA, ONE_MINUS_DST_ALPHA, SRC_ALPHA_SATURATE
  1. screen.loading.blend=<off|src dst srcA dstA>
复制代码

其他设置项
这个设置会覆盖视频设置中的云的类型。
  1. clouds=fast(快速)|fancy(高品质)|none(无)
复制代码

经验球动画持续时间 (毫秒)
默认为 628 毫秒
  1. xporb.time=628
复制代码

作者: SQwatermark    时间: 2019-11-13 11:35
颜色映射
colormap.properties
属性文件|colormap.properties

除了像 pine.png 或 underwater.png 这样的 "固定的" 颜色映射。
每个自定义颜色映射必须有一个属性文件,

此文件没有任何版权限制。
请根据需求复制和修改。
将其放到 optifine/colormap/blocks 或者其任何子文件夹下。

所有的属性名都区分大小写。
所有颜色都是十六进制rgb格式,从000000到ffffff。
除非另有说明,否则所有路径都相对于assets/minecraft。

调色板格式
fixed:   单个固定的颜色,不需要图片,用于去除原版
         生物群系着色,而不需要创建一个256x256的
         全白色的颜色映射图。
vanilla: 原版温度+湿度256x256映射,
         受到不同生物群系共享相同的基础温度+湿度值的限制。
grid:    OptiFine样式网格 (x=biome ID, y=height) 256x256映射。
         每一列表示一个从虚空到最大建筑高度的生物群系。
         未使用的列应该使用合理的默认颜色梯度填充,
         以适应模组添加的生物群系。
默认格式为vanilla,但是可以通过在~/color.properties中
设置调色板格式来全局覆盖此属性。
  1. format=<fixed | vanilla | grid>
复制代码

(可选) 列出要将颜色映射应用于的方块列表
在1.7中,方块是通过名称而不是数字来表示的。
旧方块支持数字ID,但新方块将只支持名称。
例如,石头可以称为
  stone           (无前缀的名称)
  minecraft:stone (全名)

为所有石头和矿石方块着色:
  blocks=stone gold_ore iron_ore coal_ore lapis_ore diamond_ore redstone_ore redstone_ore:lit=true

方块+属性也支持下列语法:
  blocks=minecraft:lever:face=wall:facing=east,west

如果没有设置 (或者没有属性文件),
它会默认按照文件名,例如,
  assets/minecraft/optifine/colormap/custom/stone.png -> minecraft:stone
  1. blocks=<方块列表+可选属性>
复制代码

(仅用于format=fixed或vanilla) 颜色映射图
路径可以相对于属性文件的位置。
图片应该是一张256x256的颜色映射。
如果没有提供源文件,则使用与属性文件名称相同的png作为默认值。
  1. source=<image>
复制代码

(可选) 固定RGB颜色.
对于format=fixed,这只是应用于所有匹配方块的固定颜色。
如果没有给出值,则默认值为白色(ffffff)。

对于format=vanilla或grid,这是用于手持或掉落方块
的默认颜色。如果没有给出值,则根据格式从固定
位置提取默认颜色:
  format=vanilla: x=127,y=127 (位图的正中心)
  format=grid:    x=1,y=64    (海平面的平原生物群系)
  1. color=<十六进制rgb值>
复制代码

(仅用于format=grid) y 变异度
在被颜色映射使用之前在y轴添加可控制数量的随机噪声。
例如,值为2.0时,会在 y - 2 到 y + 2 之间随机
选择一个值。
默认值为0 (无变异).
  1. yVariance=<值>
复制代码

(仅用于format=grid) y 偏移值
在从颜色映射采样之前,从方块的y坐标中减去一个固定值。
例如,值为64时,将对从0到64格高的方块使用颜色映射中 y=0 的像素的颜色。
高度为65的方块将使用 y=1 的像素,高度为65的方块将使用 y=2 的像素,
诸如此类。
默认值为0 (无偏移).
  1. yOffset=<值>
复制代码

作者: SQwatermark    时间: 2019-11-14 10:22
本帖最后由 SQwatermark 于 2020-4-11 01:11 编辑

自定义光照贴图
Custom Lightmaps
概述|Overview
OptiFine让你可以自定义游戏中的光照。
基于McPatcher的自定义光照贴图

一个非常好的教程:https://www.mcbbs.net/thread-1014633-1-1.html

原版光照是如何工作的
=====================
每个方块都有两个范围为0到15的光照等级(light values),一个是天空亮度(sky brightness),另一个是方块亮度(torch brightness)。
被阳光直射的方块具有值为15的天空亮度,与之毗邻的位于阴影下的方块的天空亮度为14,以此类推。
深埋地下,且远离任何能看到天空的方块的方块的天空亮度为0。方块亮度也类似。
一个火把方块的光照等级为14 (荧石为15) ,每远离一个方块,光照等级下降1。

为了生成你在游戏中实际看见的光照,Minecraft使用了一张16x16的光照贴图。它的两个轴分别对应两个种类的16个光照等级。
如果一个方块具有方块亮度x和天空亮度y,那么坐标 (x,y) 就会作为它的光照贴图坐标。
光照贴图不在游戏的任何文件夹内,但每一帧都会生成。
两个变量影响光照贴图,一天中的时间和火把的闪烁。
通过让整个光照贴图变暗或变亮,Minecraft实现了黄昏/黎明的过渡和火把闪烁(torch flicker),而不是通过调整天空/火把的亮度。

自定义光照|Custom lighting

为了创建自定义光照,你需要为每个世界新建一个光照贴图调色板:

    Nether: assets/minecraft/optifine/lightmap/world-1.png
    Overworld: assets/minecraft/optifine/lightmap/world0.png
    The End: assets/minecraft/optifine/lightmap/world1.png

对于overworld(主世界)你还可以创建可选的降雨和雷暴天气调色板:

    Overworld rain: assets/minecraft/optifine/lightmap/world0_rain.png
    Overworld thunder: assets/minecraft/optifine/lightmap/world0_thunder.png
   
只有在定义了主世界调色板时,降雨和雷暴天气调色板才生效。

每个调色板都可以是任意宽度,但高度必须是32或64像素。如果高度为64像素,下半部分将用于夜视效果,这将于稍后讨论。
在32行像素中,上面16行代表阳光,下面16行代表火把的光。
两个列,上半部分的16个像素和下半部分的16个像素,被选择来形成最终用于渲染的16x16光照图的轴线。


模板: images/lightmap_template.png

蓝色代表夜晚,橙色代表黄昏/黎明,青色代表白天,黄色代表闪电
在上半部分,左边代表夜晚,右边代表白天,其间有黄昏/黎明的过渡。
调色板的最右边代表闪电。重申,调色板没有指定宽度,
但是更宽意味着过渡中更多的细节空间。

译者注:OptiFine提供的示例看不出对应的颜色了,可以参考下面这张图片,来源于https://bitbucket.org/prupe/mcpatcher/wiki/Lightmaps


火把的工作原理类似,但在这种情况下,x坐标只是一个模拟火把闪烁的随机值。
沿x轴的变化将决定火炬闪烁有多明显。
要使火把光线完全稳定,没有闪烁,就要让每一行的所有像素具有相同的颜色。

光照贴图在三个世界 (主世界, 下界, 末地) 中的工作方法都是一样的,但是由于在下界和末地没有昼夜,
"一天中的时间(time of day)" 值为常量。对于这些世界你可以简单地给出0-15行相同的颜色。

夜视效果|Nightvision effect

在原版游戏中,夜视效果是通过 1.0 / max(R,G,B) 缩放RGB值计算的。
例如,(0.2, 0.3, 0.6) 在除以 0.6之后会变亮为 (0.333, 0.5, 1.0)。
你可以用高度为64像素而不是32像素的自定义光照贴图覆盖这个行为。
需要提供四种调色板而不是两种: normal sun, normal torch, nightvision sun, nightvision torch.
除了使用32-47行和48-63行,生成光照贴图的方式完全相同。

参考文献|References

https://bitbucket.org/prupe/mcpatcher/wiki/Lightmaps

作者: SQwatermark    时间: 2019-11-14 10:59
本帖最后由 SQwatermark 于 2019-11-14 11:02 编辑

高清字体
HD Fonts
概述|Overview
从1.6版本开始,Minecraft支持更高分辨率的字体,但自定义的能力仍然是有限的。

OptiFine会首先在 "assets/minecraft/optifine/font" 文件夹下寻找字体。
这让你可以同时拥有在原版使用的自定义字体以及需要optifine才能显示的更高分辨率的字体。

    默认字体: assets/minecraft/optifine/font/ascii.png
    附魔台字体: assets/minecraft/optifine/font/ascii_sga.png

注意: 不支持unicode字体.

为了能够更好地控制单个字符的宽度,OptiFine提供了一种手动指定它们的方法。
创建以下属性文件:

    assets/minecraft/optifine/font/ascii.properties
    assets/minecraft/optifine/font/ascii_sga.properties

对应你想要自定义的字体.

属性文件|bettergrass.properties

这个文件中的每一行都指定一个字符的宽度:
  1. # 自定义宽度
  2. width.<ascii值 0-255>=<宽度 0-8>
复制代码

例如,为了指定大写字母 A, B, C 的宽度,你可以输入
  1. # ABC
  2. width.65=5.9
  3. width.66=5
  4. width.67=5.25
复制代码

不管字体的分辨率是多少,值只能是介于0-8之间的浮点数 (原版只支持整数宽度)
你不需要规定所有字符的宽度,只需要规定你想要覆盖的字符的宽度。

空格字符的默认宽度为4.0
你可以以同样的方式覆盖它,将 "width.32" 设置为自定义值。

α混合|Alpha Blending

如果设置为true,字体将会采用α混合
  1. blend=<true|false>
复制代码

粗体偏移|Bold offset

粗体字符按照符合字符的笔画宽度的一个微小的x偏移被渲染两次。
标准8x字体 (texture 128x128) 的默认偏移值为 1.0,更高分辨率的字体的默认偏移值为0.5
  1. offsetBold=<值>
复制代码

参考文献|References

https://bitbucket.org/prupe/mcpatcher/wiki/HD_Fonts

作者: SQwatermark    时间: 2019-11-14 11:16
本帖最后由 SQwatermark 于 2019-11-14 11:18 编辑

生物群系调色板:网格格式
Biome Palettes: Grid Format
概述|Overview
OptiFine的自定义生物群系调色板 (网格格式) 的说明
基于McPatcher的自定义生物群系调色板

原版颜色映射格式有一些缺陷。
首先,像沙漠这样的生物群系在颜色图中只有一个像素,这意味着它们的颜色不能随高度变化。
此外,多个生物群系共享它们的温湿度值,因此不可能给它们不同的颜色方案。
即使基础值不同,生物群落有时也会在高海拔重叠。

OptiFine提供了另一种选择,最初由Misa提出。和原版颜色映射一样,它也是--一般来说,请参阅下面的提示--一种256x256的彩色图片,
但是x坐标表示生物群系ID,y坐标表示高度。(生物群系的ID列表请参阅Minecraft Wiki)。
这允许生物群系之间的完全分离,并让你完全控制从基岩到最大建筑高度的所有颜色。

颜色映射中的每一列表示一个生物群落。请注意此图片是垂直 "翻转" 的:
世界的底部 (y=0) 在图片的顶部,最大建筑高度 (y=255) 在底部。
海平面为 y=64。一般来说,你会让每一列都有一些渐变。

模板

属性文件|colormap.properties

(可选) 格式标识
此属性简单地将网格格式的颜色映射与原版颜色映射区分开来。
如果没有指定,网格颜色映射将被解释为原版的温度+湿度格式,这会导致怪异的结果。

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

如果你在 "assets/minecraft/optifine/color.properties" 文件中对其进行过全局设置,格式属性可以被省略:

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

这会使所有自定义颜色映射都使用网格格式,所以请确保这是你想要的。

(可选) 列出要设置可选属性的方块
  1. # 方块
  2. # 例如:
  3. #   blocks=stone minecraft:sand minecraft:lever:face=wall:facing=east,west
  4. blocks=<列表>
复制代码

参阅生物群系调色板 (biome_palettes.txt).

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

参阅生物群系调色板。

(可选) 默认颜色
  1. # 颜色
  2. color=<RGB值>
复制代码

参阅生物群系调色板。

(可选) y 变异度
如果设置了该属性,则在被颜色映射使用之前,会将随机噪声添加到y坐标,从而使平面区域具有更多样的外观。
例如,值为2时,游戏会在 y - 2 到 y + 2 之间随机选择一个值。

  1. # Y 变异度
  2. yVariance=<值>
复制代码

默认值为0 (无变化).

这个属性也可以在 "assets/minecraft/optifine/color.properties" 中全局设置:

  1. # Y 变异度
  2. palette.yVariance=<值>
复制代码

(可选) y 偏移
  1. # Y 偏移
  2. yOffset=<值>
复制代码
在从颜色映射采样之前,从方块的y坐标中减去一个固定值。
例如,值为64时,将对从0到64格高的方块使用颜色映射中 y=0 的像素的颜色。高度为65的方块将使用 y=1 的像素,高度为65的方块将使用 y=2 的像素,诸如此类。

默认值为0 (无偏移).

提示|Tips

向前兼容性:颜色映射中未使用的列表示未分配的生物群系ID,这些ID可以被未来的Minecraft版本或模组使用。
当然,如果你知道它们使用的ID,你可以为特定的模组生物群系创建配色方案。
但即使你不这么做,最好也至少为未使用的列设置一个中性的渐变,这样新的生物群系就会有一个合理的默认外观。

向后兼容性: 无论属性文件如何设置,在 "assets/minecraft/textures/colormap" 中的原版 "grass.png"
和 "foliage.png" 颜色映射永远都是原版格式。这为非OptiFine用户保留了兼容性。
要使用草或叶子的网格格式,你必须在 "assets/minecraft/optifine/colormap/blocks" 中创建一个自定义颜色映射,
并将其应用于适当的方块。对于OptiFine用户,自定义颜色映射会覆盖原版颜色映射;
对于非OptiFine用户,只有原版颜色映射会被使用。

分辨率:虽然这种格式的颜色映射通常是256x256,但没有原版格式那样的硬性要求:

Minecraft 1.7 引入了许多生物群系的稀有变种。例如 "Birch Forest M" (ID 155) 是 "Birch Forest" (ID 27) 的稀有变种。
方便的是,罕见变种的ID永远是常见的生物群系的ID + 128。
如果你想让所有的稀有生物群系使用与相应的非稀有生物群系相同的配色方案,就可以利用这一事实。
只需将颜色映射图的宽度从256像素调整为128像素,OptiFine在为生物群系分配颜色映射的列时,就会在x方向 "包装" 它。
与之类似,一张1像素宽的颜色映射图可以为所有生物群系提供相同的基于高度的颜色梯度。
在y方向上,如果你提供了超过256个像素,且服务器的最大建造高度高于默认值,OptiFine将很乐意使用它们。
类似地,如果颜色映射图低于256像素,它将在此高度 "达到极限",此高度之上的方块具有相同的颜色。
特别地,64像素的高度会使地下具有颜色变化,海平面以上具有固定颜色。
192像素的高度和 yOffset=64 的设置正好相反:地面上具有颜色变化,地面以下具有固定的颜色。
1像素的高度允许生物群系之间的颜色变化,但不允许颜色随高度变化。

参考文献|References

https://bitbucket.org/prupe/mcpatcher/wiki/Biome_Palettes_(Grid)
http://www.minecraftforum.net/forums/mapping-and-modding/resource-packs/resource-pack-discussion/1255785-b?comment=124

作者: soil-sword    时间: 2019-12-11 03:46
。。
OptiFine这玩意太强了
作者: flash0tt    时间: 2020-2-18 21:32
太感动了终于有人愿意做这个事情了!坚持下啊骚年!
作者: Player3    时间: 2020-3-5 20:20
很感谢你的文档翻译,在我学习optifine时提供了很大的帮助
作者: Dearxiaosa    时间: 2020-3-6 12:14
666666666666666666
作者: Linggo    时间: 2020-3-6 13:49
MCBBS有你更精彩~
作者: 蟹蒙老鸽    时间: 2020-3-9 00:05
简直NB呀,我的妈耶
作者: Azitate    时间: 2020-3-18 19:35
本帖最后由 Azitate 于 2020-3-18 19:36 编辑

嘛...有个问题


我这么写的话,游戏内的物品为什么找不到模型,版本是1.15.2,是有什么格式更改了吗


作者: 王恭襄公瓊    时间: 2020-5-21 18:12
666大佬大佬
作者: Misaka。    时间: 2020-6-26 20:56
楼主 低版本的都不适用这个教程吗 1.7
作者: SQwatermark    时间: 2020-6-27 08:57
Misaka。 发表于 2020-6-26 20:56
楼主 低版本的都不适用这个教程吗 1.7

绝大部分还是适用的,但有些差别,可以参考1.7.10的conquest和cocricot等材质包
作者: akws    时间: 2020-7-4 08:10
没有1.16.1版本的吗
作者: mc苗觅    时间: 2020-7-11 08:40
6666666666666666
作者: a2183702142    时间: 2020-12-19 11:29
        MCBBS有你更精彩~
作者: 黔霾    时间: 2020-12-19 12:44
完成任务

作者: 北狼叔    时间: 2021-1-25 14:45
在哪里下载呀
作者: baiyiming    时间: 2021-1-26 07:38
感谢作者的翻译!太辛苦了趴~
作者: mayichi    时间: 2021-2-1 13:40
太厉害了!干货满满
作者: 2096843480    时间: 2021-2-7 20:52
        MCBBS有你更精彩~
作者: 我叫啥好呢    时间: 2021-2-9 21:39

作者: 亚希姐的小希希    时间: 7 天前
1.15版本可以用吗?
作者: 1075419222    时间: 7 天前
感谢楼主
作者: wishands    时间: 5 天前
非常感谢
作者: 琳只因你太美    时间: 4 天前
wqewqrfrfwefwerw
作者: FuyyruI    时间: 3 天前
SQwatermark 发表于 2019-11-14 11:16

辛苦了大佬