空间(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_transform | VERTEX/NORMAL/等。需要在顶点函数中手动进行转换 |
world_vertex_coords | VERTEX/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 UV | UV主通道 |
inout vec2 UV2 | UV2通道 |
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_GLOSS | Clearcoat的光泽度. 如果使用,将计算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_AFFECT | AO 对光的影响程度 (范围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-in | Description |
---|---|
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 | 镜面反射光效果 |