什么是 Shader Designer 节点?
Visual Studio 中的 Shader Designer 以图的方式表示视觉效果。 这些图通过采用精确方式选择和连接的节点生成,以实现预期效果。 每一个节点表示一条信息或一个数学函数,而它们之间的连接表示信息如何流经图生成结果。 节点类型包括筛选器、纹理、参数、常量、实用工具节点和数学节点。
节点结构
所有节点由常见元素的组合组成。 每个节点在它的右侧都至少有一个输出终端(最终颜色节点除外,它表示着色器的输出)。 表示计算或纹理取样器的节点的左侧有输入终端,但表示信息的节点没有输入终端。 输出终端与输入终端是连接的,以便在节点之间移动信息。
输入的提升
因为着色器设计器必须最终生成 HLSL 源代码,以便效果可用于游戏或应用,所以着色器设计器节点必须遵守 HLSL 使用的类型提升规则。 因为图形硬件主要以浮点值运行,所以不同类型之间的类型提升(例如,从 int
到 float
或从 float
到 double
)是不常见的。 因为图形硬件一次对多条信息使用相同运算,所以可以发生不同种类的提升,其中较短的输入会延长,以匹配最长输入的大小。 延长方式取决于输入类型,也取决于运算本身:
“如果较小类型为标量值,那么:
标量值会复制到矢量中,该矢量大小与较大输入相同。 例如,当运算的最大输入是三元矢量时,标量输入 5.0 变为矢量 (5.0, 5.0, 5.0),无论是什么运算,都是如此。
如果较小类型是矢量,并且运算为乘法(*、/、% 等),那么:
矢量的值复制到与较大输入大小相等的矢量的前导元素中,并将尾随元素设置为 1.0。 例如,矢量输入与四元矢量相乘时,矢量输入 (5.0, 5.0) 变为矢量 (5.0, 5.0, 1.0, 1.0)。 通过使用乘法标识 1.0 来保留输出的第三和第四元素。
如果较小类型是矢量,并且运算是加法(+、 - 等),那么
矢量的值复制到与较大输入大小相等的矢量的前导元素中,并将尾随元素设置为 0.0。 例如,矢量输入与四元矢量相加时,矢量输入 (5.0, 5.0) 变为矢量 (5.0, 5.0, 0.0, 0.0)。 通过使用加法标识 0.0来保留输出的第三和第四元素。
节点和节点类型
着色器设计器提供了六种不同的节点类型(筛选器、纹理节点、参数、常数、实用程序节点和数学运算节点),并且每种类型都包含一系列单个节点。
常量节点
在着色器设计器中,常量节点表示像素着色器计算中的文字值和内插顶点属性。 由于顶点属性是内插的,因此每个像素的此属性不同,每个像素着色器实例会接收不同版本的常量。 这向每个像素赋予了独特的外观。
顶点属性内插
在游戏或应用中,通过将顶点、基元定义和顶点属性所定义的许多对象转换成屏幕像素进行 3D 场景图像的绘制。 通过顶点属性提供赋予像素独特外观所需的全部信息,顶点属性根据像素的相似度与构成其基元的不同顶点混合在一起。 基元是基本的呈现元素;即点、线或三角形等简单形状。 非常靠近某一顶点的像素将接收与该顶点几乎相同的常数,但是在基元的所有顶点之间均匀间隔的像素将接收这些顶点平均值的常数。 在图形编程中,像素接收的常量被称为内插。 按此方式向像素提供常量数据将产生良好的视觉质量,同时会降低内存占用空间和带宽要求。
虽然每个像素着色器实例都只接收一组常量值,并且不能更改这些值,但不同的像素着色器实例会接收不同的常量数据集。 此设计使着色器程序能够为基元中的每个像素生成不同的颜色输出。
常量节点引用
节点 | 详细信息 | 属性 |
---|---|---|
相机向量 | 从当前像素延伸到世界空间中相机的向量。 它可用于计算世界空间中的反射。 输出 Output : float3 从当前像素到相机的向量。 |
无 |
颜色常量 | 常量颜色值。 输出 Output : float4 颜色值。 |
输出 颜色值。 |
常量 | 常量标量值。 输出 Output : float 标量值。 |
输出 标量值。 |
二维常量 | 双分量矢量常数。 输出 Output : float2 矢量值。 |
输出 矢量值。 |
三维常量 | 三分量矢量常数。 输出 Output : float3 矢量值。 |
输出 矢量值。 |
四维常量 | 四分量矢量常数。 输出 Output : float4 颜色值。 |
输出 矢量值。 |
标准化位置 | 以标准化设备坐标表示的当前像素的位置。 x 坐标和 y 坐标具有 [-1, 1] 范围内的值,z 坐标具有 [0, 1] 范围中的值,w 分量包含视图空间中的点深度值;w 未标准化。 输出 Output : float4 当前像素的位置。 |
无 |
点颜色 | 当前像素的漫射颜色,它是材质漫射颜色和顶点颜色属性的组合。 输出 Output : float4 当前像素的漫射颜色。 |
无 |
点深度 | 视图空间中当前像素的深度。 输出 Output : float 当前像素的深度。 |
无 |
标准化点深度 | 以标准化设备坐标表示的当前像素的深度。 结果的值在 [0, 1] 的范围内。 输出 Output : float 当前像素的深度。 |
无 |
屏幕位置 | 以屏幕坐标表示的当前像素的位置。 屏幕坐标基于当前视区。 x 和 y 分量包含屏幕坐标,z 分量包含标准化为 [0, 1] 范围的深度,w 分量包含视图空间中的深度值。 输出 Output : float4 当前像素的位置。 |
无 |
表面法线 | 当前像素在对象空间内的表面法线。 它可用于计算对象空间中的光照量和光照反射。 输出 Output : float3 当前像素的表面法线。 |
无 |
切空间照相机向量 | 从当前像素延伸到切空间中相机的向量。 它可用于计算切空间中的反射。 输出 Output : float3 从当前像素到相机的向量。 |
无 |
切空间灯光方向 | 定义在当前像素的切空间中从光源投射出的光线方向的向量。 它可用于计算切空间中的光照量和反射量。 输出: Output : float3 从当前像素到光源的矢量。 |
无 |
世界法线 | 当前像素在世界空间内的表面法线。 它可用于计算世界空间内的光照量和光照反射。 输出 Output : float3 当前像素的表面法线。 |
无 |
世界位置 | 当前像素在世界空间内的位置。 输出 Output : float4 当前像素的位置。 |
无 |
参数节点
在着色器设计器中,参数节点表示受应用控制、以每个绘图为基础的着色器输入,例如,材料属性、定向光、照相机位置和时间。 由于可以使用每个绘图调用更改这些参数,因此可使用相同的着色器为某个对象提供不同的外观。
参数节点参考
节点 | 详细信息 | 属性 |
---|---|---|
照相机世界位置 | 照相机在世界空间内的位置。 输出: Output : float4 照相机的位置。 |
无 |
灯光方向 | 定义在世界空间中从光源投射出的光线方向的矢量。 它可用于计算世界空间中的光照量和反射量。 输出: Output : float3 从当前像素到光源的矢量。 |
无 |
材料环境 | 间接光照带来的当前像素的漫射颜色量。 像素的漫射颜色模拟光照与粗糙表面的交互方式。 可使用材料环境参数达到近似现实世界中间接光照对某个对象造成外观上的影响的效果。 输出: Output : float4 间接(即环境)光照带来的当前像素的漫射颜色。 |
访问 如果允许从模型编辑器设置属性,则为“公共”;否则为“私有”。 值 间接(即环境)光照带来的当前像素的漫射颜色。 |
材料漫射 | 一种颜色,描述当前像素如何漫射直接光照。 像素的漫射颜色模拟光照与粗糙表面的交互方式。 可使用材料漫射参数以更改当前像素漫射直接光照(即定向光、点光和投射光)的方式。 输出: Output : float4 一种颜色,描述当前像素如何漫射直接光照。 |
访问 如果允许从模型编辑器设置属性,则为“公共”;否则为“私有”。 值 一种颜色,描述当前像素如何漫射直接光照。 |
材料放射 | 提供自身光线的光照带来的当前像素的颜色量。 可使用它来模拟发光对象,即提供自身光线的对象。 此光线不会影响到其他对象。 输出: Output : float4 自发光照带来的当前像素的颜色量。 |
访问 如果允许从模型编辑器设置属性,则为“公共”;否则为“私有”。 值 自发光照带来的当前像素的颜色量。 |
材料反射 | 一种颜色,描述当前像素如何反射直接光照。 像素的反射颜色模拟光照与光滑如镜的表面之间的交互方式。 可使用材料反射参数更改当前像素反射直接光照(即定向光、点光和投射光)的方式。 输出: Output : float4 一种颜色,描述当前像素如何反射直接光照。 |
访问 如果允许从模型编辑器设置属性,则为“公共”;否则为“私有”。 值 一种颜色,描述当前像素如何反射直接光照。 |
材料光泽度 | 用于描述反射高光的强度的标量值。 光泽度越强,反射高光则会越强烈并且越深远。 输出: Output : float 一个指数项,描述当前像素上反射高光的强度。 |
访问 如果允许从模型编辑器设置属性,则为“公共”;否则为“私有”。 值 用于定义当前像素上反射高光的强度的指数。 |
标准化时间 | 以秒为单位的时间,标准化为 [0, 1] 范围,如此一来,当时间达到 1时则会重置为 0。 可将其用作着色器计算中的参数,例如用来对纹理坐标、颜色值或其他属性进行动画处理。 输出: Output : float 标准化时间,以秒为单位。 |
无 |
时间 | 时间值(以秒计)。 可将其用作着色器计算中的参数,例如用来对纹理坐标、颜色值或其他属性进行动画处理。 输出: Output : float 时间(以秒为单位)。 |
无 |
纹理节点
在着色器设计器中,纹理节点采集不同的纹理类型和几何图形样本,并生成或转换纹理坐标。 纹理提供对象的颜色和照明细节。
纹理节点引用
节点 | 详细信息 | 属性 |
---|---|---|
立方体贴图样本 | 从立方体贴图中采集指定坐标处的颜色样本。 可使用立方体贴图提供反射效果的颜色细节,或应用到其纹理失真程度低于 2D 纹理的球形对象。 输入: UVW : float3 一个矢量,指定在纹理立方体上采样的位置。 在采样位置处,此矢量与该立方体相交。 输出: Output : float4 颜色样本。 |
纹理 与采样器关联的纹理寄存器。 |
法线贴图样本 | 从 2D 法线贴图中采集指定坐标处的法线样本 可使用法线贴图模拟对象图面上其他几何细节的外观。 法线贴图包含表示单位矢量的打包数据,而不包含颜色数据 输入: UV : float2 采样位置的坐标。 输出: Output : float3 法线样本。 |
坐标轴调整 用于调整法线贴图样本旋向性的系数。 纹理 与采样器关联的纹理寄存器。 |
平移 UV | 根据时间平移指定的纹理坐标。 可以将此用于在对象图面间移动纹理或法线贴图。 输入: UV : float2 要平移的坐标。 Time : float 要进行平移的时长,以秒为单位。 输出: Output : float2 平移后的坐标。 |
速度 X 每秒沿 x 轴平移的纹素数。 速度 Y 每秒沿 y 轴平移的纹素数。 |
视差 UV | 根据高度和视角将指定纹理坐标移位。 这样创建的效果被称为视差映射,或者虚拟的偏移量映射。 可将此用于在平面图面上创建深度错觉。 输入: UV : float2 要移位的坐标。 Height : float 与 UV 坐标关联的 heightmap 值。输出: Output : float2 移位后的坐标。 |
深度平面 视差效果的参考深度。 默认情况下,该值为 0.5。 减小此值会提升纹理;增加此值会将纹理降到平面。 深度数值范围 视差效果的数值范围。 这在一定程度上断言视深。 典型值介于 0.02 到 0.1 之间。 |
旋转 UV | 根据时间,围绕中心点旋转指定的纹理坐标。 可以将此用于在对象图面上旋转纹理或法线贴图。 输入: UV : float2 要旋转的坐标。 Time : float 要进行平移的时长,以秒为单位。 输出: Output : float2 旋转后的坐标。 |
中心点 X 定义旋转中心的 x 坐标。 中心点 Y 定义旋转中心的 y 坐标。 速度 纹理每秒旋转的角度(弧度形式)。 |
纹理坐标 | 当前像素的纹理坐标。 通过在附近顶点的纹理坐标属性之间插值,决定纹理坐标。 可以将此视为当前像素在纹理空间中的位置。 输出: Output : float2 纹理坐标。 |
无 |
纹理维度 | 输出 2D 纹理贴图的宽度和高度。 可以使用纹理维度考虑着色器中纹理的宽度和高度。 输出: Output : float2 纹理的宽度和高度,表示为一个矢量。 宽度存储在矢量的第一个元素中。 高度存储在第二个元素中。 |
纹理 与纹理维度关联的纹理寄存器。 |
纹素增量 | 输出 2D 纹理贴图纹素之间的增量(距离)。 可以使用纹素增量对着色器中的相邻纹素值进行采样。 输出: Output : float2 (沿对角线正方向移动的)从某纹素到下一纹素的增量(距离),表示为标准化纹理空间中的矢量。 可以通过有选择地忽略或否定增量的 U 或 V 坐标,获取所有相邻纹素的位置。 |
纹理 与纹素增量关联的纹理寄存器。 |
纹理样本 | 从 2D 纹理贴图中采集指定坐标处的颜色样本。 可使用纹理贴图提供对象图面的颜色细节。 输入: UV : float2 采样位置的坐标。 输出: Output : float4 颜色样本。 |
纹理 与采样器关联的纹理寄存器。 |
数学运算节点
在着色器设计器中,数学运算节点执行代数、逻辑、三角函数等其他数学运算。
注意
在着色器设计器中使用数学运算节点时,类型提升尤其明显。 有关类型提升会如何影响输入参数的详细信息,请参阅“输入提升”部分。
数学运算节点参考
节点 | 详细信息 | 属性 |
---|---|---|
Abs | 计算每个分量指定输入的绝对值。 对于输入 X 的每个分量,负值将被设为正值,使结果的所有分量均为正值。输入: X :float 、float2 、float3 或 float4 用于确定绝对值的值。 Output: Output :与输入 X 相同每个分量的绝对值。 |
无 |
添加 | 计算每个分量指定输入的按分量逐位的和。 对于结果的每个分量,会将输入 X 和输入 Y 的对应分量相加在一起。输入: X :float 、float2 、float3 或 float4 要相加的其中一个值。 Y :与输入 X 相同要相加的其中一个值。 输出: Output :与输入 X 相同每个分量的总和。 |
无 |
Ceil | 计算每个分量指定输入的上限。 值的上限是大于或等于该值的最小整数。 输入: X :float 、float2 、float3 或 float4 要计算其上限的值。 输出: Output :与输入 X 相同每个分量的上限。 |
无 |
Clamp | 将指定输入的每个分量固定在预定义范围内。 对于结果的每个分量,低于定义范围以下的值将被设为该范围中的最小值,超出定义范围的值将被设为该范围中的最大值,处于该范围内的值将保持不变。 输入: X :float 、float2 、float3 或 float4 要固定其范围的值。 输出: Output :与输入 X 相同每个分量的固定值。 |
Max 范围内的最大可能值。 Min 范围内的最小可能值。 |
Cos | 计算每个分量指定输入的余弦(以弧度为单位)。 对于结果的每个分量,将计算对应分量的余弦值(以弧度为单位)。 结果具有值在 [-1, 1] 范围内的分量。 输入: X :float 、float2 、float3 或 float4 要计算其余弦的值(以弧度为单位)。 输出: Output :与输入 X 相同每个分量的余弦。 |
无 |
Cross | 计算指定的三分量矢量的叉积。 可以使用叉积来计算由两个矢量定义的表面的法线。 输入: X : float3 叉积左边的矢量。 Y : float3 叉积右边的矢量。 输出: Output : float3 叉积。 |
无 |
距离 | 计算指定点之间的距离。 结果为正标量值。 输入: X :float 、float2 、float3 或 float4 要确定两点之间距离的其中一个点。 Y :与输入 X 相同要确定两点之间距离的其中一个点。 输出: Output :与输入 X 相同距离。 |
无 |
除 | 计算指定输入的按分量逐个相除的商。 对于结果的每个分量,输入 X 的对应分量将除以输入 Y 的对应分量。输入: X :float 、float2 、float3 或 float4 被除数值。 Y :与输入 X 相同除数值。 输出: Output :与输入 X 相同每个分量的商。 |
无 |
圆点 | 计算指定矢量的点积。 结果为标量值。 可以使用点积来确定两个矢量之间的角度。 输入: X :float 、float2 、float3 或 float4 其中一个约分值。 Y :与输入 X 相同其中一个约分值。 输出: Output : float 点积。 |
无 |
Floor | 计算每个分量指定输入的向下舍入值。 对于结果的每个分量,其值是小于或等于输入的对应分量的最大整数值。 结果的每个分量均为整数。 输入: X :float 、float2 、float3 或 float4 要计算其向下舍入值的值。 输出: Output :与输入 X 相同每个分量的向下舍入值。 |
无 |
Fmod | 计算指定输入的按分量逐位的模数(余数)。 对于结果的每个分量,将用输入 X 的对应分量减去输入 Y 的对应分量的一些整数倍数 m,以产生一个余数。 选择倍数 m,使得余数小于输入 Y 的对应分量,并且具有与输入 X 的对应分量相同的符号。 例如,fmod(-3.14, 1.5) 是 -0.14。输入: X :float 、float2 、float3 或 float4 被除数值。 Y :与输入 X 相同除数值。 输出: Output :与输入 X 相同每个分量的模数。 |
无 |
Frac | 删除每个分量指定输入的整数部分。 对于结果的每个分量,输入的对应分量的整数部分将被删除,但会保留小数部分和符号。 该小数值在 [0, 1) 的范围内。 例如,值-3.14 变为值 -0.14。 输入: X :float 、float2 、float3 或 float4 要计算其小数部分的值。 输出: Output :与输入 X 相同每个分量的小数部分。 |
无 |
Lerp | 线性内插。 计算指定输入的按分量逐位的加权平均值。 对于结果的每个分量,将计算输入 X 和输入 Y 的对应分量的加权平均值。 权重由 Percent 提供(一个标量),并统一应用于所有分量。 可以使用它在点、颜色、属性和其他值之间进行内插。输入: X :float 、float2 、float3 或 float4 原始值。 Percent 为 0 时,结果等于此输入。Y :与输入 X 相同终端值。 Percent 为 1 时,结果等于此输入。Percent : float 一个标量权重,以从输入 X 到输入 Y 的距离的百分比表示。输出: Output :与输入 X 相同一个值,与指定输入共线的值。 |
无 |
乘加 | 计算指定输入的按分量逐位的乘加。 对于结果的每个分量,输入 M 和 A 的对应分量的积将被添加到输入 B 的对应分量中。 可在常见公式(例如,线的点斜率公式和缩放的公式)中找到此操作顺序,然后偏差输入。输入: M :float 、float2 、float3 或 float4 要一起相乘的其中一个值。 A :与输入 M 相同要一起相乘的其中一个值。 B :与输入 M 相同要添加到其他两个输入的积中的值。 输出: Output :与输入 M 相同每个分量的乘加的结果。 |
无 |
Max | 计算指定输入的按分量逐位的最大值。 对于结果的每个分量,将选取输入的对应分量中的较大者。 输入: X :float 、float2 、float3 或 float4 要计算最大值的其中一个值。 Y :与输入 X 相同要计算最大值的其中一个值。 输出: Output :与输入 X 相同每个分量的最大值。 |
无 |
Min | 计算指定输入的按分量逐位的最小值。 对于结果的每个分量,将选取输入的对应分量中的较小者。 输入: X :float 、float2 、float3 或 float4 要计算最小值的其中一个值。 Y :与输入 X 相同要计算最小值的其中一个值。 输出: Output :与输入 X 相同每个分量的最小值。 |
无 |
乘 | 计算指定输入的按分量逐位的积。 对于结果的每个分量,输入 X 和输入 Y 的对应分量将全部相乘。输入: X :float 、float2 、float3 或 float4 要一起相乘的其中一个值。 Y :与输入 X 相同要一起相乘的其中一个值。 输出: Output :与输入 X 相同每个分量的积。 |
无 |
规范化 | 对指定矢量进行标准化。 标准化矢量将保留原始矢量的方向,但不保留其量值。 可以使用标准化矢量来简化矢量的量值在其中不重要的计算。 输入: X :float2 、float3 或 float4 要规范化的向量。 输出: Output :与输入 X 相同规范化的向量。 |
无 |
一减 | 计算 1 和每个分量指定输入之间的差。 对于结果的每个分量,将从 1 中减去输入的对应分量。 输入: X :float 、float2 、float3 或 float4 要从 1 中减去的值。 输出: Output :与输入 X 相同1 和每个分量指定输入之间的差。 |
无 |
电源 | 计算指定输入的按分量逐位的幂。 对于结果的每个分量,以输入 X 对应分量为底数,以输入 Y 的对应分量为指数进行幂运算。输入: X :float 、float2 、float3 或 float4 基数值 Y :与输入 X 相同指数值。 输出: Output :与输入 X 相同每个分量的幂。 |
无 |
饱和 | 将指定输入的每个分量固定在范围 [0, 1] 内。 可以使用此范围表示计算中的百分比和其他相对度量。 对于结果的每个分量,小于 0 的对应分量值将被设为等于 0。大于 1 的对应分量值将被设为等于 1,处于该范围内的值将保持不变。 输入: X :float 、float2 、float3 或 float4 要饱和的值。 输出: Output :与输入 X 相同每个分量的饱和值。 |
无 |
Sin | 计算每个分量指定输入的正弦值(以弧度为单位)。 对于结果的每个分量,将计算对应分量的正弦值(以弧度为单位)。 结果具有值在 [-1,1] 范围内的分量。 输入: X :float 、float2 、float3 或 float4 要计算其正弦的值(以弧度为单位)。 输出: Output :与输入 X 相同每个分量的正弦。 |
无 |
Sqrt | 计算每个分量指定输入的平方根。 对于结果的每个分量,将计算对应分量的平方根。 输入: X :float 、float2 、float3 或 float4 要计算其平方根的值。 输出: Output :与输入 X 相同每个分量的平方根。 |
无 |
减 | 计算指定输入的按分量逐位的差。 对于结果的每个分量,将从输入 X 的对应分量中减去输入 Y 的对应分量。 可以使用它来计算从第一个输入延伸到第二个输入的矢量。输入: X :float 、float2 、float3 或 float4 要从中减去值的值。 Y :与输入 X 相同要从输入 X 中减去的值。输出: Output :与输入 X 相同每个分量的差。 |
无 |
转换三维向量 | 将指定的 3D 向量转换到不同的空间中。 可以使用它将点或向量放入到公共空间中,以便使用它们执行有意义的计算。 输入: Vector : float3 要转换的向量。 输出: Output : float3 转换后的向量。 |
源系统 矢量的本机空间。 目标系统 要将矢量转换到的空间。 |
实用程序节点
在着色器设计器中,实用程序节点表示不适合归入其他类别的常见且有用的着色器计算。 某些实用程序节点执行简单的操作,如将矢量追加在一起或有条件地选择结果;其他节点执行复杂的操作,如根据常用的照明模型计算照明量。
实用程序节点引用
节点 | 详细信息 | 属性 |
---|---|---|
追加矢量 | 通过将指定的输入追加在一起,创建矢量。 输入: Vector :float 、float2 或 float3 要追加到其中的值。 Value to Append : float 要追加的值。 输出: Output :float2 、float3 或 float4 ,具体取决于输入 Vector 的类型新的矢量。 |
无 |
菲涅耳 | 基于指定的表面法线计算菲涅耳衰减。 菲涅耳衰减值表示当前像素的表面法线与视图矢量的一致程度。 在矢量对齐时,函数的结果为 0;矢量越不相似,结果越大,且当矢量正交时,达到其最大值。 可将此用于基于当前像素的方向和照相机之间的关系,生成更清晰或更模糊的效果。 输入: Surface Normal : float3 当前像素的表面法线,在当前像素的切线空间中定义。 可将此用于干扰明显的表面法线,如法线贴图所示。 输出: Output : float 当前像素的反射率。 |
指数 用于计算菲涅尔衰减的指数。 |
If | 有条件地选择每个分量的三个可能结果之一。 该条件由两个其他指定输入之间的关系来定义。 对于结果的每个分量,将根据前两个输入的对应分量之间的关系选择三个可能结果之一的对应分量。 输入: X :float 、float2 、float3 或 float4 要比较的左侧值。 Y :与输入 X 类型相同要比较的右侧值。 X > Y :与输入 X 类型相同在 X 大于 Y 时所选的值。X = Y :与输入 X 类型相同在 X 等于 Y 时所选的值。X < Y :与输入 X 类型相同在 X 小于 Y 时所选的值。输出: Output : float3 对每个分量所选的结果。 |
无 |
朗伯 | 通过使用指定的表面法线,根据朗伯照明模型计算当前像素的颜色。 该颜色是直接照明下,环境颜色和漫射照明量的总和。 环境颜色近似于间接照明的总量,但如果没有其他照明的帮助,看起来单调且平淡。 漫射照明有助于向对象添加形状和深度。 输入: Surface Normal : float3 当前像素的表面法线,在当前像素的切线空间中定义。 可将此用于干扰明显的表面法线,如法线贴图所示。 Diffuse Color : float3 当前像素的漫射颜色,通常为点颜色。 如果未提供任何输入,则默认值为白色。 输出: Output : float3 当前像素的漫射颜色。 |
无 |
遮罩向量 | 指定矢量的遮罩分量。 可将此用于从某个颜色值中移除特定颜色通道,或阻止特定分量对后续计算产生影响。 输入: Vector : float4 要遮罩的矢量。 输出: Output : float4 已遮罩的矢量。 |
红色/X 若要遮住红色 (x) 分量,则为 False;否则为 True。 绿色/Y 若要遮住绿色 (y) 分量,则为 False;否则为 True。 蓝色/Z 若要遮住蓝色 (z) 分量,则为 False;否则为 True。 Alpha/W 若要遮住 alpha (w) 分量,则为 False;否则为 True。 |
反射矢量 | 基于照相机的位置,计算正切空间中当前像素的反射矢量。 可以将此用于计算反射、立方体贴图坐标和反射照明量 输入: Tangent Space Surface Normal : float3 当前像素的表面法线,在当前像素的切线空间中定义。 可将此用于干扰明显的表面法线,如法线贴图所示。 输出: Output : float3 反射矢量。 |
无 |
反射 | 通过使用指定的表面法线,根据 Phong 照明模型计算反射照明量。 反射照明赋予对象(例如水、塑料或金属)闪亮、反光的外观。 输入: Surface Normal : float3 当前像素的表面法线,在当前像素的切线空间中定义。 可将此用于干扰明显的表面法线,如法线贴图所示。 输出: Output : float3 反射高光的颜色量。 |
无 |
筛选节点
在着色器设计器中,筛选节点会将输入(如颜色或纹理样本)转换为形象的颜色值。 这些形象的颜色值通常用于非真实感渲染或用作其他视觉效果的分量。
筛选节点引用
节点 | 详细信息 | 属性 |
---|---|---|
模糊 | 通过高斯函数模糊纹理中的像素。 它可用于减少纹理中的颜色细节或干扰。 输入: UV : float2 要测试的纹素坐标。 输出: Output : float4 经过模糊处理的颜色值。 |
纹理 与模糊过程中使用的采样器关联的纹理寄存器。 |
去除饱和度 | 减少指定颜色的颜色量。 删除颜色后,该颜色值将近似于其灰度等效值。 输入: RGB : float3 要去除饱和度的颜色。 Percent : float 要删除的颜色百分比,以范围 [0, 1] 中的标准值表示。 输出: Output : float3 去除饱和度的颜色。 |
亮度 为红色、绿色和蓝色分量指定的权重。 |
边缘检测 | 使用 Canny 边缘检测程序检测纹理中的边缘。 边缘像素输出为白色;非边缘像素输出为黑色。 它可用于识别纹理中的边缘,以便可使用其他效果处理边缘像素。 输入: UV : float2 要测试的纹素坐标。 输出: Output : float4 如果纹素位于边缘,则为白色;否则为黑色。 |
纹理 与边缘检测过程中使用的采样器关联的纹理寄存器。 |
锐化 | 锐化纹理。 它可用于突出显示纹理中的细节。 输入: UV : float2 要测试的纹素坐标。 输出: Output : float4 经过模糊处理的颜色值。 |
纹理 与锐化过程中使用的采样器关联的纹理寄存器。 |