跳到主要内容

空间(Spatial)着色器

空间着色器用于为三维对象着色吗,具有不同的渲染模式和不同的渲染选项(例如: 次表面散射,透射,环境遮挡,边缘照明等)。用户可以选择编辑顶点,片段,和光照处理器功能,以影响如何绘制对象。

渲染模式

渲染模式描述
blend_mix混合模式:混合 (alpha是透明度), 默认模式.
blend_add混合模式:添加
blend_sub混合模式:减
blend_mul混合模式:乘
depth_draw_opaque仅绘制不透明几何体的深度(不透明)
depth_draw_always始终绘制深度(不透明和透明)
depth_draw_never不画深度.
depth_prepass_alpha对透明几何体进行不透明的深度预传
depth_test_disabled禁用深度测试.
cull_back剔除背面(默认)
cull_front剔除正面
cull_disabled剔除禁用(双面)
unshaded结果只是反照率,材质中不会发生照明/阴影
diffuse_lambert漫反射模式:Lambert
diffuse_lambert_wrap漫反射模式:Lambert Wrap
diffuse_burley漫反射模式:Burley
diffuse_toon漫反射模式:Toon
specular_schlick_ggx镜面反射使用 Schlick-GGX(默认)
specular_blinn镜面反射使用 Blinn(兼容)
specular_phong镜面反射使用 Phong(兼容)
specular_toon镜面反射使用 Toon
specular_disabled禁用镜面反射
skip_vertex_transformVERTEX/NORMAL/等。需要在顶点函数中手动进行转换
world_vertex_coordsVERTEX/NORMAL/等。以世界坐标而不是局部坐标修改。
ensure_correct_normals在对网格应用非均匀比例时使用
vertex_lighting使用基于顶点的照明
specular_disabled在着色器中禁用阴影计算
alpha_to_coverage禁用环境光和辐射度图的收益
alpha_to_coverage_and_one光照会改变alpha值,阴影部分是不透明的,而没有阴影的地方是透明的。对于AR中将阴影堆叠到一个照相机反馈中很有用

全局内置

内置描述
in float TIME全局时间,单位秒

vertex 内置

以下为vertex()方法中的内置:

内置描述
in vec2 VIEWPORT_SIZE视口大小(以像素为单位)
inout mat4 WORLD_MATRIX模型空间到世界空间变换
in mat4 INV_CAMERA_MATRIX世界空间向视图空间变换
inout mat4 PROJECTION_MATRIX视图空间向裁剪空间变换
in mat4 CAMERA_MATRIX视图空间向世界空间变换
inout mat4 MODELVIEW_MATRIX模型空间向视图空间变换(如果可用)
inout mat4 INV_PROJECTION_MATRIX裁剪空间向视图空间变换
inout vec3 VERTEX局部坐标中的顶点
inout vec3 NORMAL局部坐标法线
inout vec3 TANGENT局部坐标切线
inout vec3 BINORMAL局部坐标副法线
out vec4 POSITION如果写入, 则覆盖最终顶点位置
inout vec2 UVUV主通道
inout vec2 UV2UV2通道
in bool OUTPUT_IS_SRGB当计算发生在sRGB色彩空间时为 true
inout vec4 COLOR顶点颜色
out float ROUGHNESS顶点照明的粗糙度
inout float POINT_SIZE点渲染的点大小
in int INSTANCE_ID实例化的实例ID
in vec4 INSTANCE_CUSTOM实例自定义数据(主要用于粒子)

fragment 内置

以下为fragment()方法中的内置:

内置描述
in vec2 VIEWPORT_SIZE视口大小(以像素为单位)
in vec4 FRAGCOORD屏幕空间中像素中心的坐标。xy表示窗口位置,如果不使用 DEPTH,则 z 表示片段深度。原点在左下角。
in mat4 WORLD_MATRIX模型空间到世界空间变换
in mat4 INV_CAMERA_MATRIX世界空间向视图空间转变
in mat4 CAMERA_MATRIX视图空间向世界空间变换
in mat4 PROJECTION_MATRIX视图空间向裁剪空间变换
in mat4 INV_PROJECTION_MATRIX裁剪空间向视图空间变换
in vec3 VERTEX来自顶点函数的顶点(默认情况下, 在视图空间中)
in vec3 VIEW从相机位置到片段位置的向量 (在视图空间中)
in bool FRONT_FACING如果当前面是正面则为true
inout vec3 NORMAL来自于顶点函数的法线(默认情况下, 在视图空间中)
inout vec3 TANGENT来自顶点函数的切线
inout vec3 BINORMAL来自顶点函数的副法线
out vec3 NORMALMAP如果从纹理而不是 NORMAL 读取法线,则在此处设置法线
out float NORMALMAP_DEPTH变量上方深度。 默认为1.0
in vec2 UV来自顶点函数的UV
in vec2 UV2来自顶点函数的UV2
in bool OUTPUT_IS_SRGB当计算发生在sRGB色彩空间时为true
in vec4 COLOR来自顶点函数的颜色
out vec3 ALBEDO漫反射颜色 (默认为白色).
out float ALPHA范围0-1,如果写入,材质将进入透明管道
out float ALPHA_SCISSOR如果写入, 则丢弃低于一定量alpha的值
out float METALLIC金属度,范围0-1
out float SPECULAR镜面反射。默认为 0.5
out float ROUGHNESS粗糙度,范围0-1
out float RIM边缘光(范围0-1)。如果使用,将计算边缘照明
out float RIM_TINT边缘色调, 从0(白色)到1(反射) 。如果使用,将计算边缘照明
out float CLEARCOAT小幅增加镜面反射斑点。如果使用,将计算Clearcoat。
out float CLEARCOAT_GLOSSClearcoat的光泽度. 如果使用,将计算Clearcoat。
out float ANISOTROPY用于根据切线空间扭曲镜面反射斑点
out vec2 ANISOTROPY_FLOW扭曲方向,与flowmaps一起使用
out float SSS_STRENGTH次表面散射强度。 如果使用, 物体将应用次表面散射
out vec3 TRANSMISSION透射遮罩 (默认 0,0,0)。允许光穿过物体,只在使用时应用。
out vec3 EMISSION自发光颜色 (HDR可以超过1,1,1)
out float AO环境光遮蔽强度
out float AO_LIGHT_AFFECTAO 对光的影响程度 (范围0-1; 默认为0)。
sampler2D SCREEN_TEXTURE用于从屏幕读取的内置纹理。 Mipmap 包含越来越模糊的副本
sampler2D DEPTH_TEXTURE用于从屏幕读取深度的内置纹理。 必须使用 INV_PROJECTION 转换为线性。
out float DEPTH自定义深度值 (范围0-1).
in vec2 SCREEN_UV屏幕当前像素的UV坐标
in vec2 POINT_COORD用POINT_SIZE绘制的点坐标

light 内置

编写光处理器功能是完全可选的。可以通过设置 render_mode 为 unshaded 来跳过光照函数。

以下为light()方法中的内置:

Built-inDescription
in float TIME经过的总秒数
in vec2 VIEWPORT_SIZE视口大小(以像素为单位)
in vec4 FRAGCOORD屏幕空间中像素中心的坐标。xy表示窗口位置,如果不使用 DEPTH,则 z 表示片段深度。原点在左下角。
in mat4 WORLD_MATRIX模型空间到世界空间变换
in mat4 INV_CAMERA_MATRIX世界空间向视图空间转变
in mat4 CAMERA_MATRIX视图空间向世界空间变换
in mat4 PROJECTION_MATRIX视图空间向裁剪空间变换
in mat4 INV_PROJECTION_MATRIX裁剪空间向视图空间变换
in vec3 NORMAL法向量, 在视图空间中
in vec2 UV来自于顶点函数的UV
in vec2 UV2来自于顶点函数的UV2
in vec3 VIEW视图向量, 在视图空间中
in vec3 LIGHT光向量, 在视图空间中
in vec3 ATTENUATION基于距离或阴影的衰减
in bool OUTPUT_IS_SRGB当计算发生在sRGB色彩空间时为 true
in vec3 ALBEDO基础反照率
in vec3 LIGHT_COLOR光的颜色乘以能量
out float ALPHA范围0-1,如果写入,材质将进入透明管道
in float ROUGHNESS粗糙度
in vec3 TRANSMISSION来自fragment函数的TRANSMISSION
out vec3 DIFFUSE_LIGHT漫射光效果
out vec3 SPECULAR_LIGHT镜面反射光效果