着色器内配置命令
顶点着色器设置
in vec3 mc_Entity;使用实体 ID 属性。
in vec2 mc_midTexCoord;使用精灵纹理坐标中点属性。
in vec4 at_tangent;使用切线属性。
const int countInstances = 1;实例渲染,当
countInstances > 1时,几何会多次渲染,见 统一变量 -instanceId。
几何着色器设置
#extension GL_ARB_geometry_shader4 : enable启用
GL_ARB_geometry_shader4(几何着色器功能)。const int maxVerticesOut = 3;为几何着色器设置
GEOMETRY_VERTICES_OUT_ARB(几何着色器输出顶点数)。
片元着色器设置
纹理
uniform <type> shadow;或uniform <type> shadowtex0;使用 1 个阴影深度缓冲区。
uniform <type> watershadow;或uniform <type> shadowtex1;使用 2 个阴影深度缓冲区,覆盖前一项。
uniform <type> shadowcolor0;使用 1 个阴影颜色缓冲区。
uniform <type> shadowcolor1;使用 2 个阴影颜色缓冲区,覆盖前一项。
uniform <type> depthtex0;使用 1 个深度缓冲区。
uniform <type> depthtex1;使用 2 个深度缓冲区,覆盖前一项。
uniform <type> depthtex2;使用 3 个深度缓冲区,覆盖前两项。
uniform <type> gdepth;使用 1 号缓冲区。如果 1 号缓冲区格式为 RGBA,则设置 1 号缓冲区格式为 RGBA32F。
uniform <type> gaux<1-4>;或uniform <type> colortex<4-7>;使用 5-8 个颜色缓冲区。
纹理格式
const int <bufferIndex>Format = <format>;const int noiseTextureResolution = <int>;将噪点纹理尺寸设置为
<int>。默认为 256。
新帧清除
const bool <bufferIndex>Clear = false;禁用特定 ID 缓冲区的新帧清除,即跳过
glClear()。默认为
false。见 纹理单元 ID。
const vec4 <bufferIndex>ClearColor = vec4(R,G,B,A);将特定 ID 缓冲区的新帧清除颜色设置为
(R,G,B,A)。只能使用数字进行逐分量设置。
0 号缓冲区默认为雾色
vec4(fogColor, 0.0),1 号默认为纯白色vec4(1.0),其余缓冲区默认为纯黑色vec4(0.0)。
const bool <shadowBufferIndex>Clear = false;禁用特定 ID 阴影颜色缓冲区的新帧清除,即跳过
glClear()。默认为
false。见 纹理单元 ID。
const vec4 <shadowBufferIndex>ClearColor = vec4(R,G,B,A);将特定 ID 阴影颜色缓冲区的新帧清除颜色设置为
(R,G,B,A)。只能使用数字进行逐分量设置。
默认为纯黑色
vec4(0.0)。
纹理过滤
const bool <bufferIndex>MipmapEnabled = true;启用特定 ID 缓冲区的 Mipmap。默认为
false。见 纹理单元 ID。
const bool generateShadowMipmap = true;为阴影深度纹理启用 Mipmap。默认为
false。const bool shadowtexMipmap = true;
const bool shadowtex0Mipmap = true;
const bool shadowtex1Mipmap = true;为 0/1 号阴影深度纹理启用 Mipmap。
序号留空默认为 0 号纹理启用。
默认为
false。
const bool generateShadowColorMipmap = true;为阴影颜色纹理启用 Mipmap。
const bool shadowcolor0Mipmap = true;
const bool shadowColor0Mipmap = true;
const bool shadowcolor1Mipmap = true;
const bool shadowColor1Mipmap = true;为 0/1 号阴影颜色纹理启用 Mipmap。
序号不可留空。
Color首字母C大小写均可。默认为
false。
const bool shadowHardwareFiltering = true;使用硬件过滤的阴影,此时需要将阴影声明为
sampler2DShadow,仅可使用texture()系列函数采样,采样时相比普通的纹理需要额外提供片元的实际阴影空间深度值用于自动比较。在 Iris 上可以启用
SEPARATE_HARDWARE_SAMPLERS特性标志来利用shadowtex0HW和shadowtex1HW进行硬件过滤,而保留原始的shadowtex用于 PCSS 等依赖多次深度比较的效果。可以使用
shadowHardwareFiltering<0-1>来启用特定shadowtex的硬件过滤功能。默认为
false。
const bool shadowtexNearest = true;
const bool shadowtex0Nearest = true;
const bool shadow0MinMagNearest = true;
const bool shadowtex1Nearest = true;
const bool shadow1MinMagNearest = true;为 0/1 号阴影深度纹理启用邻近过滤。序号留空默认为 0 号纹理启用。默认为
false。const bool shadowcolor0Nearest = true;
const bool shadowColor0Nearest = true;
const bool shadowColor0MinMagNearest = true;
const bool shadowcolor1Nearest = true;
const bool shadowColor1Nearest = true;
const bool shadowColor1MinMagNearest = true;为 0/1 号阴影颜色纹理启用邻近过滤。序号不可留空。有
MinMag时Color的首字母C仅能为大写。默认为false。
阴影渲染参数
/* SHADOWRES:<int> */或const int shadowMapResolution = <int>;阴影纹理长宽为
<int>,默认为 1024。/* SHADOWFOV:<float> */或const float shadowMapFov = <float>;设置后将使用透视投影阴影空间,FOV 为
<float>。/* SHADOWHPL:<float> */或const float shadowDistance = <float>;阴影渲染距离为
<float>,默认 160。const float shadowDistanceRenderMul = -1.0;阴影渲染距离乘数,会渲染更多区域。默认的 -1 表示不剔除,大于 0 的值表示剔除
shadowDistance * shadowDistanceRenderMul之外的内容,比如,1.0 表示剔除shadowDistance之外的内容,0.5 表示剔除shadowDistance一半之外的内容,以此类推。const float shadowIntervalSize = <float>;将阴影空间吸附到
<float>的倍数上,默认为 2.0。阴影 Pass 中会将变换后的坐标原点吸附到值的整数倍上,以便玩家在小范围移动时阴影空间不会移动,从而减少阴影闪烁。设置为 0 可以禁用吸附。
输出
/* DRAWBUFFERS:0257 */按照特定顺序的索引输出到缓冲区中,配合
layout(location = <X>) out使用。location = 0输出到 0 号缓冲区,location = 1输出到 2 号缓冲区,location = 2输出到 5 号缓冲区,依此类推。块注释前后需要隔一个空格,冒号前后不能有空格,数字之间不能有空格,只能输出到 0-9 号缓冲区。
/* RENDERTARGETS: 0,2,5,7 */按照特定顺序的索引输出到缓冲区中,配合
layout(location = <X>) out使用。location = 0输出到 0 号缓冲区,location = 1输出到 2 号缓冲区,location = 2输出到 5 号缓冲区,依此类推。块注释前后需要隔一个空格,冒号后需要一个空格,数字和逗号之间不能有空格,可以输出到所有缓冲区。
其他
uniform <type> centerDepthSmooth;使用平滑中央深度。
/* WETNESSHL:<float> */或const float wetnessHalflife = <float>;将湿润半衰期设置为
<float>,影响wetness的减少时间。默认为 600.0(刻)。/* DRYNESSHL:<float> */或const float drynessHalflife = <float>;将干燥半衰期设置为
<float>,影响wetness的增长时间。默认为 200.0(刻)。const float eyeBrightnessHalflife = <float>;将摄像机处的原版光照强度过渡半衰期设置为
<float>,影响eyeBrightnessSmooth的过渡时间。默认为 10.0(刻)。const float centerDepthHalflife = <float>;将中央深度过渡半衰期设置为
<float>,影响centerDepthSmooth的过渡时间。默认为 1.0(刻)。const float sunPathRotation = <float>;将太阳倾角设置为
<float>,正值为向北旋转。默认为 0.0(度)。const float ambientOcclusionLevel = <float>;将原版顶点环境光遮蔽强度设置为
<float>。需要设置在上。默认为 1.0。 const int superSamplingLevel = <int>;将超采样级别设置为
<int>。默认为 1。