跳到主要内容

画布组件(CanvasItem)着色器

画布组件着色器用于绘制IdeaXR中的所有二维元素

渲染模式

Render modeDescription
blend_mix混合模式:混合 (alpha是透明度), 默认模式.
blend_add混合模式:添加
blend_sub混合模式:减
blend_mul混合模式:乘
blend_premul_alpha混合模式:预乘 Alpha
blend_disabled禁用混合,值(包括 Alpha)会按原样写入
unshaded结果只是反射. 材质中不会发生照明/阴影
light_only仅在光通过时绘制
skip_vertex_transformVERTEX/NORMAL/等需要在顶点函数中手动转换

全局内置

全局内置可在任何地方使用,包括自定义的函数

内置描述
in float TIME引擎启动后的全局时间, 以秒为单位(始终为正数)

vertex 内置

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

内置描述
in mat4 WORLD_MATRIX图像空间到视图空间的转换
in mat4 EXTRA_MATRIX额外的变换矩阵
in mat4 PROJECTION_MATRIX视图空间向裁剪空间变换
in vec4 INSTANCE_CUSTOM实例自定义数据
in bool AT_LIGHT_PASS如果这是光照通道,则为true
inout vec2 VERTEX在图像空间的顶点
in vec2 TEXTURE_PIXEL_SIZE默认 2D 纹理的标准化像素大小
inout vec2 UV纹理坐标
inout vec4 COLOR来自顶点图元的颜色
in vec4 MODULATE最终调节颜色,如果使用,COLOR将不会在片段函数后自动和modulate相乘
inout float POINT_SIZE点绘图的大小

fragment 内置

IdeaXR在COLOR内置变量中不提供纹理颜色;要读取这些节点的纹理颜色,请使用:

COLOR = texture(TEXTURE, UV);

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

内置描述
in vec4 FRAGCOORD像素中心的坐标。在屏幕空间中,xy 表示窗口中的位置,如果没有用 DEPTH,则 z 表示片段深度。原点位于左下角。
inout vec3 NORMALNORMAL_TEXTURE读取。可写
out vec3 NORMALMAP配置用于三维的法线贴图,以便在二维中使用。如果使用,则覆盖NORMAL
inout float NORMALMAP_DEPTH用于缩放的法线贴图深度
in vec2 UV来自顶点函数的UV
inout vec4 COLOR从顶点函数获取并输出片段颜色。如果未使用,将设置为TEXTURE颜色
in vec4 MODULATE最终调节颜色,如果使用,COLOR将不会在片段函数后自动和modulate相乘
in sampler2D TEXTURE默认2D纹理
in sampler2D NORMAL_TEXTURE默认2D法线纹理
in vec2 TEXTURE_PIXEL_SIZE默认 2D 纹理的标准化像素大小。
in vec2 SCREEN_UVSCREEN_TEXTURE 一起使用的屏幕UV
in vec2 SCREEN_PIXEL_SIZE单个像素的大小。等于分辨率的倒数。
in vec2 POINT_COORD所绘制的点的坐标
in bool AT_LIGHT_PASS如果这是光照通道,则为true
in sampler2D SCREEN_TEXTURE屏幕纹理,mipmap包含高斯模糊版本

light 内置

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

内置描述
in vec4 FRAGCOORD像素中心的坐标。在屏幕空间中,xy 表示窗口中的位置,如果没有用 DEPTH,则 z 表示片段深度。原点位于左下角
in vec3 NORMALNormal输入. 虽然传入了这个值, 但 Normal的计算仍然发生在该函数之外
in vec2 UV来自顶点函数的UV,相当于片段函数中的UV
in vec4 COLOR输入颜色。这是片段函数(fragment)的输出
in vec4 MODULATE最终调节颜色,如果使用,COLOR将不会在片段函数后自动和modulate相乘
sampler2D TEXTURECanvasItem使用的当前纹理
in vec2 TEXTURE_PIXEL_SIZE默认 2D 纹理的标准化像素大小
in vec2 SCREEN_UVSCREEN_TEXTURE 一起使用的屏幕UV
in vec2 SCREEN_PIXEL_SIZE单个像素的大小。等于分辨率的倒数
inout vec2 LIGHT_VEC从光线到片段的局部坐标向量, 当使用法线贴图时, 它可以被修改以改变光照方向
inout vec2 SHADOW_VEC局部坐标中从光到片段的向量。 它可以被修改以改变阴影的计算
inout float LIGHT_HEIGHT光照的高度。只有在使用法线时才有效
inout vec4 LIGHT_COLOR光的颜色
in vec2 LIGHT_UV光照纹理的UV
out vec4 SHADOW_COLOR光的阴影颜色
inout vec4 LIGHT光照贴图和输出颜色的值,可以被修改。如果没有使用,则光照函数将被忽略