光影配置文件
环境设置
流畅、高品质或禁用原版云。 细节
> 云
具有更高的优先级。
启用或禁用经典手持光源,可以让只辨别主手光源的光影在副手持光源时也能正常工作。默认为 true
, 光影
> 经典手持光源
具有更高的优先级。
启用或禁用动态光源。默认为 true
, 动态光源
具有更高的优先级。
启用或禁用经典光效。默认为 true
, 光影
> 经典光效
具有更高的优先级。变更该设置会导致资源包重载。
启用或禁用阴影几何缓冲中的地形、半透明、实体、方块实体渲染。默认为 true
。
启用或禁用处于水下时屏幕上的水纹理覆层。默认为 true
。
启用或禁用太阳、月亮。 细节
> 日月
具有更高的优先级。
启用或禁用屏幕边缘暗角。 细节
> 晕影
具有更高的优先级。
启用或禁用固体、裁切、带 MipMap 的裁切、半透明几何的背面渲染,启用后朝向背离屏幕的表面也会被渲染。默认为 false
。
启用或禁用雨雪粒子写入深度。默认为 true
。
启用或禁用信标光柱写入深度。默认为 true
。
启用或禁用分离原版环境光遮蔽,启用后将顶点环境光遮蔽写入顶点颜色的 Alpha 通道,只对固体地形生效。默认为 false
。
启用或禁用视锥裁切,启用后不可见的几何体将被丢弃,用以提高性能。默认为 true
。
启用或禁用阴影视锥裁切,启用后部分 OptiFine 版本裁切由玩家视锥体控制,会导致问题。默认为 true
。
启用或禁用粒子提前渲染,启用后粒子将会在 deferred 程序之前(第一轮几何缓冲)处理。默认为 false
。
光影最低要求的 OptiFine 版本。例如:
自定义纹理
将自定义纹理绑定到对应着色器可用的纹理单元。
stage
:gbuffers
:几何缓冲和阴影几何缓冲程序deferred
:第一轮几何缓冲后的延迟处理(Deferred)composite
:第二轮几何缓冲后的延迟处理程序(Composite 和 Final)
Name
:纹理单元名称,可用名称请参考 纹理单元 ID。
纹理来源
- 光影
相对
shaders
内的路径,例如:texture.composite.colortex1=textures/noise.png- 资源包
以
minecraft:
开头的路径,例如:texture.composite.colortex2=minecraft:textures/font/ascii.png- 动态生成纹理(光照贴图和纹理集)
- texture.composite.colortex3=minecraft:dynamic/lightmap_1 texture.composite.colortex4=minecraft:textures/atlas/blocks.png
特殊后缀
使用 _n
和 _s
后缀可以加载法线/高光纹理: minecraft:textures/atlas/blocks_n.png
原始纹理(二进制数据转储)
<type>
:纹理类型,下列之一:TEXTURE_1D
TEXTURE_3D
TEXTURE_2D
TEXTURE_RECTANGLE
<internalFormat>
: 纹理格式<dimensions>
:纹理在每个方向上的尺寸,设置数量取决于纹理类型<pixelFormat>
: 像素格式<pixelType>
: 像素类型
可以将多个纹理绑定到同一个纹理单元,然后在着色器中使用
sampler1d
、sampler2d
、sampler3d
等不同的采样器格式进行区分。每个程序只能使用每个纹理单元的其中一种采样器类型。可以在
<name>
后添加后缀.0
~.9
来避免重复定义的属性键。可以通过同名的
.mcmeta
文件设置边缘环绕行为和过滤方式。
噪声纹理
专用于保存噪声的纹理单元(当然你硬要写入其他的纹理也没法拦着你)。
光影设置
见 Options screen - OptiDocs ,不久之后我们会编写相关内容。
自定义统一变量
利用常量、变量、运算符和函数来自定义传入着色器的变量和用于配置文件中计算的变量,自定义统一变量会随着程序变化而更新。
参数
一些固定标量的统一变量(不会随着程序变更而变更的标量)也可用于参数,例如 heldItemId
、 worldTime
、 moonPhase
等。
向量对象可以使用
.x
.y
.z
和.w
来提取分量,例如sunPosition.y
;颜色对象可以使用
.r
.g
.b
和.a
来提取分量,例如skyColor.r
;这两种分量提取操作和 GLSL 一样不做强制要求。
矩阵可以使用两个连续的行列索引来提取参数,例如
gbufferModelView.0.1
。
常量
pi
= 3.1415926true
false
浮点变量
biome
- 生物群系 IDbiome_category
- 群系类型,0 ~ 16(从左至右,从上至下)CAT_NONE
CAT_TAIGA
CAT_EXTREME_HILLS
CAT_JUNGLE
CAT_MESA
CAT_PLAINS
CAT_SAVANNA
CAT_ICY
CAT_THE_END
CAT_BEACH
CAT_FOREST
CAT_OCEAN
CAT_DESERT
CAT_RIVER
CAT_SWAMP
CAT_MUSHROOM
CAT_NETHER
biome_precipitation
- 降水类型,0 ~ 2(从左至右)PPT_NONE
PPT_RAIN
PPT_SNOW
temperature
- 温度,0.0 ~ 1.0rainfall
- 湿度,0.0 ~ 1.0
雨雪渲染判定依赖于 biome_precipitation != PPT_NONE
,如果 temperature >= 0.15
则渲染雨,否则渲染雪。
布尔变量
摄像机所在实体的状态,例如玩家本身或旁观模式附身的实体。
is_alive
is_burning
is_child
is_glowing
is_hurt
is_in_lava
is_in_water
is_invisible
is_on_ground
is_ridden
is_riding
is_sneaking
is_sprinting
is_wet
运算符
+
-
*
/
%
!
&&
||
>
>=
<
<=
==
!=
函数
sin(x)
cos(x)
asin(x)
acos(x)
tan(x)
atan(x)
atan2(y, x)
torad(deg)
todeg(rad)
min(x, y ,...)
max(x, y, ...)
abs(x)
floor(x)
ceil(x)
exp(x)
frac(x)
log(x)
pow(x, y)
random()
round(x)
signum(x)
sqrt(x)
clamp(x, min, max)
fmod(x, y)
类似
Math.floorMod()
if(cond, val, [cond2, val2, ...], val_else)
根据一个或多个条件取值
lerp(k, x, y)
在
x
和y
之间线性插值
ifb(cond, val, [cond2, val2, ...], val_else)
根据一个或多个条件取布尔值
smooth([id], val, [fadeInTime, [fadeOutTime]])
根据自定义缓入缓出时间平滑一个变量在帧间值的变动。
id
必须是唯一的,如果不定义将会自动生成。默认过渡时间为 1 秒。
print(id, n, x)
每第
n
帧在日志中输出x
的值。
布尔函数
between(x, min, max)
检查值是否在最大值和最小值之间
equals(x, y, epsilon)
在误差范围内比较两个浮点值
in(x, val1, val2, ...)
检查值是否在取值列表中
组合向量函数
vec2(x, y)
vec3(x, y, z)
vec4(x, y, z, w)
示例
Alpha 测试
func
可以是NEVER
LESS
EQUAL
LEQUAL
GREATER
NOTEQUAL
GEQUAL
GL_ALWAYS
ref
是浮点值
混合
见 混合。
src
、 dst
、 srcA
、 dstA
可以为下列之一:
参数 | 值 | 备注 |
---|---|---|
| ||
| ||
| 各通道独立相乘 | |
| 各通道独立相乘 | |
| 各通道独立相乘 | |
| 各通道独立相乘 | |
| ||
| ||
| ||
| ||
|
延迟处理渲染缩放
自定义延迟处理程序中铺屏四边形的视口尺寸。要求所有值都在
翻转缓冲区
启用或禁用指定延迟处理程序的指定颜色附件的缓冲区翻转功能,即“乒乓缓冲区”(Ping-pong buffer)。禁用翻转后,下一个延迟处理程序将会使用和上一个程序相同的输入和输出目标,而不是将上一个程序的输出作为输入,即缓冲区的 main
和 alt
标签不互换。最后一个完成写入的程序应当启用缓冲区翻转,以便之后的程序正确读取处理后的内容。
这个功能常用于多个程序读取和写入同一个缓冲区不同区域的内容(以顶点覆盖区域计)。强制翻转缓冲区可以用于读取一个颜色附件的两个缓冲区上的不同内容(即使在程序中没有向缓冲区写入内容也强制翻转,以便在下一个程序中读取颜色附件上另一个缓冲区的内容)。
默认行为:当程序向缓冲区写入内容后,会翻转缓冲区;如果没有写入内容,则不会翻转缓冲区。几何缓冲强制禁用翻转,向 alt
写入的内容会在着色器结束时同步至 main
。
缓冲区尺寸
指定固定尺寸的缓冲区。只有 prepare
、 deferred
和 composite
程序可以向固定尺寸缓冲区写入。
不可以同时向多个不同尺寸的缓冲区中写入,即一个程序中只能向同尺寸的多个缓冲区输出。
当高宽尺寸为浮点值时,会作为相对窗口渲染的尺寸。如
会创建一个高宽均为渲染分辨率一半的缓冲区。渲染分辨率由 光影
> 渲染精细度
和游戏窗口分辨率共同控制。
开关特定的程序
和光影设置联动,用以当关闭一些效果时禁用处理它们的程序或启用相关后备程序。程序名称可以包含维度,如:
表达式可以是多个定义组成的布尔运算,如:
相比宏开关,禁用整个程序能节省更多编译时间。