画布组件(CanvasItem)着色器
画布组件着色器用于绘制IdeaXR中的所有二维元素
渲染模式
Render mode | Description |
---|---|
blend_mix | 混合模式:混合 (alpha是透明度), 默认模式. |
blend_add | 混合模式:添加 |
blend_sub | 混合模式:减 |
blend_mul | 混合模式:乘 |
blend_premul_alpha | 混合模式:预乘 Alpha |
blend_disabled | 禁用混合,值(包括 Alpha)会按原样写入 |
unshaded | 结果只是反射. 材质中不会发生照明/阴影 |
light_only | 仅在光通过时绘制 |
skip_vertex_transform | VERTEX/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 NORMAL | 从NORMAL_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_UV | 与 SCREEN_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 NORMAL | Normal输入. 虽然传入了这个值, 但 Normal的计算仍然发生在该函数之外 |
in vec2 UV | 来自顶点函数的UV,相当于片段函数中的UV |
in vec4 COLOR | 输入颜色。这是片段函数(fragment)的输出 |
in vec4 MODULATE | 最终调节颜色,如果使用,COLOR将不会在片段函数后自动和modulate相乘 |
sampler2D TEXTURE | CanvasItem使用的当前纹理 |
in vec2 TEXTURE_PIXEL_SIZE | 默认 2D 纹理的标准化像素大小 |
in vec2 SCREEN_UV | 与 SCREEN_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 | 光照贴图和输出颜色的值,可以被修改。如果没有使用,则光照函数将被忽略 |