用于Blender的Verge3D：着色器节点参考 - Soft8Soft
Description: 有关Blender Shader编辑器在Verge3D中所支持的功能的信息。

# 着色器节点参考/Blender

在某种程度上，Verge3D支持Blender材质编辑器提供的几乎所有节点。但对于大多数基于 Web 的实时图形任务，只使用其中的一组就足够了。下面我们只列出了Verge3D官方演示中所使用到的节点。

Verge3D 支持的输入和输出标有绿色复选标记，而不支持的则标有红色复选标记。

## 内容

- 着色器节点
  - 原理化BSDF(Principled BSDF)
  - 漫反射BSDF(Diffuse BSDF)
  - 光泽BSDF(Glossy BSDF)
  - 发射(Emission)
  - 透明BSDF(Transparent BSDF)
  - 折射BSDF(Refraction BSDF)
  - 玻璃BSDF(Glass BSDF)
  - 半透明BSDF(Translucent BSDF)
  - 相加着色器(Add Shader)
  - 混合着色器(Mix Shader)
- 输出节点(Output Nodes)
  - 材质输出(Material Output)
- 输入节点(Input Nodes)
  - 几何数据(Geometry)
  - 属性(Attribute)
  - 纹理坐标(Texture Coordinate)
  - UV贴图(UV Map)
  - 菲涅耳(Fresnel)
  - 层权重(Layer Weight)
  - RGB
  - 数值(Value)
  - 摄影机数据(Camera Data)
  - 切线(Tangent)
  - 颜色属性(Color Attribute)
  - Object Info
- 纹理节点(Texture Nodes)
  - 棋盘格纹理(Checker Texture)
  - 图像纹理(Image Texture)
  - 渐变纹理(Gradient Texture)
  - 泰森多边形纹理(Voronoi Texture)
  - 噪波纹理(Noise Texture)
  - 波浪纹理(Wave Texture)
- 颜色节点(Color Nodes)
  - 亮度/对比度(Bright/Contrast)
  - 色调饱和度值(Hue Saturation Value)
  - 混合(Mix)
  - RGB曲线(RGB Curves)
  - 反转(Invert)
  - 伽马(Gamma)
- 矢量节点(Vector Nodes)
  - 凹凸(Bump)
  - 映射(Mapping)
  - 法向(Normal)
  - 法线贴图(Normal Map)
  - 矢量曲线(Vector Curves)
  - 矢量旋转(Vector Rotate)
  - 矢量转换(Vector Transform)
- 转换器节点(Converter Nodes)
  - 钳制(Clamp)
  - 颜色渐变(Color Ramp)
  - 映射范围(Map Range)
  - 着色器到RGB(Shader to RGB)
  - RGB转黑白(RGB to BW)
  - 数学(Math)
  - 矢量运算(Vector Math)
  - 组合/分离节点(Combine/Separate Nodes)
- 脚本节点
- 世界专属节点(World-Specific Nodes)
  - 背景(Background)
  - 世界输出(World Output)
  - 环境纹理(Environment Texture)
  - 光程(Light Path)
  - 天空纹理(Sky Texture)
- 性能考虑因素
  - 原理化BSDF的性能
  - 性能较慢的程序纹理

#

## 着色器节点

这些节点是对物体表面进行着色计算的所有材质的核心。其中，以下节点在 Verge3D 工作流中使用最多：

#

### 原理化BSDF(Principled BSDF)

这个通用节点实现了基于物理的渲染模型（又名 PBR）。适合为Verge3D创建大多数材质。

通过调整Principled BSDF节点中的几个选项，您可以快速设置各种好看的材质。为获得最佳效果，您看以使用提供反射和基于图像照明的 环境纹理 ，或者仅使用为已经设置好环境的默认立方体模板。

请参阅Blender手册中关于Principled BSDF节点的更多信息： 链接。

#

### 漫反射BSDF(Diffuse BSDF)

该节点实现了 PBR 的漫反射组件。它用于为材质添加烘焙的环境遮蔽，或有时与光泽BSDF节点结合，以获得比原理化BSDF节点更大的灵活性。

在下面的示例中，扩散BSDF用于向Chrome材质添加已烘培的环境光遮蔽：

请参阅《Blender手册》中关于扩散BSDF节点的更多信息： 链接。

#

### 光泽BSDF(Glossy BSDF)

该节点实现了PBR的镜面组件。用于纯金属度曲面，或有时与漫反射BSDF节点组合以获得更大的灵活性。

请参阅《Blender手册》中关于Glossy BSDF节点的更多信息： 链接。

#

### 发射(Emission)

此节点用于表现未被照亮的（无阴影）的对象。当与Verge3D中的bloom后期效果结合在一起时，它也被用来表现辉光效果。

在下面的简化示例中，Emission用做无阴影的UI图标的材质：

请参阅《Blender手册》中关于emission节点的更多信息： 链接。

#

### 透明BSDF(Transparent BSDF)

该节点通过与其他着色器节点（如Glossy BSDF）混合实现透明材质。

此节点被部分支持。如果您遵循这些限制， 输出将与Blender视口内效果更接近。
- 颜色的输入应该是严格的白色（R = 1, G = 1, B= 1）
- 该节点应该用在节点树的最末端， 也就是通过Mix Shader或Add Shader节点在 Material Output之前使用（见下面的例子）， 或者直接插入Material Output的Surface接口中

在下面的简化示例中，Transparent BSDF被用来作为前风挡玻璃的材质。

请参阅《Blender手册》中关于 Transparent BSDF节点的更多信息： 链接。

#

### 折射BSDF(Refraction BSDF)

此节点通过使用环境贴图来实现折射材质。

下面是一个简单的示例。

请参阅《Blender手册》中关于Refraction BSDF节点的更多信息： 链接。

#

### 玻璃BSDF(Glass BSDF)

此节点实现了PBR的镜面和折射组件。

请参阅《Blender手册》中关于Glass BSDF节点的更多信息： 链接。

#

### 半透明BSDF(Translucent BSDF)

此节点实现了半透明的效果。

请参阅《Blender手册》中关于 Translucent BSDF节点的更多信息： 链接。

#

### 相加着色器(Add Shader)

该节点将两个着色器相加。

请参阅《Blender手册》中关于Add Shader 节点的更多信息： 链接。

#

### 混合着色器(Mix Shader)

该节点将两个着色器混合在一起。

请参阅《Blender手册》中关于Mix Shader节点的更多信息： 链接。

#

## 输出节点(Output Nodes)

这些节点是一个着色器的终点。对于对象材质，只有以下节点可用（对于世界材质也有一个特殊的输出节点）。

#

### 材质输出(Material Output)

此节点提供表面点的着色结果。

请参阅《Blender手册》中关于Material Output节点的更多信息： 链接。

#

## 输入节点(Input Nodes)

这些节点为着色器提供各种输入信息。其中，以下节点在 Verge3D 工作流中使用最多：

#

### 几何数据(Geometry)

该节点（在世界空间）为着色点提供几何信息。目前，Verge3D只支持位置、法向、切向、引入和背面的接口。

请参阅《Blender手册》中关于Geometry节点的更多信息： 链接。

#

### 属性(Attribute)

此节点检索网格属性。目前Verge3D只支持顶点色。

请参阅《Blender手册》中关于Attribute节点的更多信息： 链接。

#

### 纹理坐标(Texture Coordinate)

此节点为纹理提供了从UV映射的或程序分配的坐标。Verge3D会从网格上可用的UV层列表中选取第一个UV层。

请参阅《Blender手册》中关于Texture Coordinate节点的更多信息： 链接。

#

### UV贴图(UV Map)

此节点从网格中获取指定的UV层。与纹理坐标节点不同的是，此节点适用于网格上任何可用的UV层。

请参阅《Blender手册》中关于UV Map节点的更多信息： 链接。

#

### 菲涅耳(Fresnel)

此节点计算光的反射与折射的比例。

请参阅《Blender手册》中关于Fresnel节点的更多信息： 链接。

#

### 层权重(Layer Weight)

此节点提供一个取决于观察物体表面方向的混合系数。

请参阅《Blender手册》中关于Layer Weight节点的更多信息： 链接。

#

### RGB

此节点为着色器提供一个颜色值。

请参阅《Blender手册》中关于RGB节点的更多信息： 链接。

#

### 数值(Value)

该节点为着色器提供一个数值。

请参阅《Blender手册》中关于Value节点的更多信息： 链接

#

### 摄影机数据(Camera Data)

此节点提供了对象相对于摄影机的位置信息。

请参阅《Blender手册》中关于Camera Data节点的更多信息： 链接。

#

### 切线(Tangent)

此节点提供了切线方向。 如果Direction Type设置为 "UV Map"，那么切线将从网格的活动UV层计算， 而不是从节点本身指定的UV层（不支持此参数）。

请参阅《Blender手册》中关于Tangent节点的更多信息： 链接。

#

### 颜色属性(Color Attribute)

此节点为着色器提供顶点颜色值。

有关使用示例，请查看 Vertex Colors 演示（也可在资源商店中找到）。

请参阅《Blender手册》中关于Color Attribute节点的更多信息： 链接。

#

### Object Info

此节点将各种对象参数传递给着色器。

请参阅《Blender手册》中关于Object Info节点的更多信息： 链接。

#

## 纹理节点(Texture Nodes)

此节点向着色器提供位图。其中，以下节点在 Verge3D 工作流中使用最多：

#

### 棋盘格纹理(Checker Texture)

此节点提供了一个带有棋盘格图案的位图。

请参阅《Blender手册》中有关Checker Texture节点的更多信息： 链接。

#

### 图像纹理(Image Texture)

此节点提供了一个图像文件，作为着色器中的纹理。

部分选项仅部分支持：

- 插值模式：仅支持Linear、Closest
- 图像源：仅支持Single Image、Generated
- 色彩空间：仅支持sRGB、Non-Color和Linear Rec.709

请参阅《Blender手册》中关于Image Texture节点的更多信息： 链接。

#### Verge3D设置

您可以在图像纹理上分配自定义的Verge3D设置：

Anisotropic Filtering - 各向异性过滤
  应用于纹理的各向异性过滤比率。各向异性过滤是一种提高在倾斜视角（如地面、墙壁、家具、包装盒等）下纹理表面质量的技术。更高的值提供更好的质量，但会略微降低渲染性能。
Texture Compression - 纹理压缩
  纹理压缩方法。查看纹理压缩章节了解更多信息。

#

### 渐变纹理(Gradient Texture)

此节点提供一个平滑变化的颜色和强度的范围。

请参阅《Blender手册》中关于Gradient Texture节点的更多信息： 链接。

#

### 泰森多边形纹理(Voronoi Texture)

此节点提供具有泰森多边形图案的位图。

注意：只支持3D维度，这也意味着不支持W的输入。

请参阅《Blender手册》中关于Voronoi Texture节点的更多信息： 链接。

#

### 噪波纹理(Noise Texture)

此节点提供了一个带有噪波图案的位图。

注意：只支持3D维度，这也意味着不支持W的输入。

请参阅《Blender手册》中关于Noise Texture节点的更多信息： 链接。

#### Verge3D设置

您可以在噪波纹理上分配自定义的Verge3D设置：

Falloff Factor - 衰减系数
  噪波随距离和锐角的衰减程度。指定某个 >0 的值以减轻噪波锯齿伪影。
Strength Factor - 强度系数
  噪波强度因子。指定 <1 的值以降低噪波强度。

#

### 波浪纹理(Wave Texture)

此节点提供了一个带有波浪图案的位图。

请参阅《Blender手册》中关于Wave Texture节点的更多信息： 链接。

#

## 颜色节点(Color Nodes)

这些节点提供了对颜色的各种操作。其中，以下节点在 Verge3D 工作流中使用最多：

#

### 亮度/对比度(Bright/Contrast)

该节点用于改变颜色输入的亮度和对比度。

请参阅《Blender手册》中关于Bright/Contrast节点的更多信息： 链接。

#

### 色调饱和度值(Hue Saturation Value)

该节点用于变换HSV空间中的颜色输入。

请参阅《Blender手册》中关于Hue Saturation Value节点的更多信息： 链接。

#

### 混合(Mix)

此节点使用各种混合模式将两个颜色输入混合在一起。

请参阅《Blender手册》中关于Mix节点的更多信息： 链接。

#

### RGB曲线(RGB Curves)

此节点用于颜色校正和水平调整。

请参阅《Blender手册》中关于RGB Curves节点的更多信息： 链接。

#

### 反转(Invert)

此节点将颜色输入反转，产生一个负数。

请参阅《Blender手册》中有关Invert节点的更多信息： 链接。

#

### 伽马(Gamma)

该节点对颜色输入进行伽玛校正。

请参阅《Blender手册》中关于Gamma节点的更多信息： 链接。

#

## 矢量节点(Vector Nodes)

这些节点提供对矢量的各种操作。其中，以下节点在 Verge3D 工作流中使用最多：

#

### 凹凸(Bump)

此节点用于生成一个凹凸贴图。

参见《Blender手册》中关于Bump节点的更多信息： 链接。

#

### 映射(Mapping)

该节点用于转换位图，包括移动、旋转和缩放。

请参阅《Blender手册》中关于Mapping节点的更多信息： 链接。

#

### 法向(Normal)

此节点用于定义法线矢量和生成点积。

请参阅《Blender手册》中关于Normal节点的更多信息： 链接。

#

### 法线贴图(Normal Map)

此节点提供来自用作法线贴图的位图的法向向量。

注意：只支持Tangent Space。

参见Blender手册中关于Normal Map节点的更多信息： 链接。

#

### 矢量曲线(Vector Curves)

此节点用于将输入的向量映射到曲线上。

参见Blender手册中的Vector Curves节点的更多信息： 链接。

#

### 矢量旋转(Vector Rotate)

此节点用于将输入的矢量围绕一个支点进行旋转。

请参阅Blender手册中的Vector Rotate节点的更多信息： 链接。

#

### 矢量转换(Vector Transform)

该节点用于在世界、摄影机或物体坐标空间之间转换输入矢量。

请参阅《Blender手册》中关于Vector Transform节点的更多信息： 链接。

#

## 转换器节点(Converter Nodes)

这些节点提供了在各种类型的数据之间进行转换的方法。其中，以下节点在 Verge3D 工作流中使用最多：

#

### 钳制(Clamp)

该节点将输入值约束在指定范围内。

注意：只支持Min Max钳制类型。

参见Blender手册中关于Clamp节点的更多信息： 链接。

#

### 颜色渐变(Color Ramp)

此节点将数值转换为颜色后用作渐变。

注意：有些选项是部分支持的
- 颜色模式：只支持RGB
- 插值: Linear，Constant。

请看Blender手册中关`于Color Ramp节点的更多信息： 链接。

#

### 映射范围(Map Range)

该节点用于将一个值从一个范围转换到另一个范围。

注意：只支持Linear插值。

参见Blender手册中关于Map Range节点的更多信息： 链接。

#

### 着色器到RGB(Shader to RGB)

该节点将着色计算结果替换为纯色。通常用于非写实的渲染。

参见Blender手册中关于Shader to RGB节点的更多信息： 链接。

#

### RGB转黑白(RGB to BW)

该节点通过使用亮度将彩色图像转换为黑白图像。

参见《Blender手册》中关于RGB to BW节点的更多信息： 链接。

#

### 数学(Math)

此节点对数字值进行数学运算。

- 加、减、乘、除、乘加、幂、对数、 平方根、反平方根、绝对值
- 最小，最大，小于，大于，符号，比较， 平滑最小，平滑最大
- 圆整、下限、上限、截断、分数、模数、包络、吸附、 乒乓
- 正弦、余弦、正切、反正弦、反余弦、反正切、 二元反正切、双曲正弦、双曲余弦、 双曲正切
- 转换为弧度, 转换为度

参见Blender手册中关于Math节点的更多信息： 链接。

#

### 矢量运算(Vector Math)

此节点执行对矢量的操作。

- 加法、减法、乘法、除法
- 交叉积，投影，反射，点积
- 距离、长度、比例、归一化
- 绝对值、最小值、最大值、下限、上限、分数、模数、包络、 捕捉
- 正弦、余弦、正切

参见Blender手册中关于Vector Math节点的更多信息： 链接。

#

### 组合/分离节点(Combine/Separate Nodes)

这些节点由一个颜色或矢量组成，或将其分割到单独的通道。

请参阅《Blender手册》中关于Combine和Separate节点的更多信息： 链接。

#

## 脚本节点

此节点允许在材质中使用以OSL编写的自定义着色器。

例如，要绘制数字材质：

您可以使用以下节点设置：

此示例展示了OSL着色器的强大功能。您可以在运行时中更改或设置所有参数（UVW、Number、Digits、Decimals、Scale、BGColor、OnColor、OffColor、UseOffColor）的动画！digits.osl 着色器如下：

`// A shader that emulates a 7-segment numerical display // Digits.osl by Zap Andersson // Modified: 2019-11-25 // Copyright 2019 Autodesk Inc, All rights reserved. This file is licensed under Apache 2.0 license // https://github.com/ADN-DevTech/3dsMax-OSL-Shaders/blob/master/LICENSE.txt int inBit(vector pt, point start, point end) { if (pt[0] > start[0] && pt[0] < end[0] && pt[1] > start[1] && pt[1] < end[1]) return 1; return 0; } int inDigit(vector in, int digit, int dp, int ms) { vector pt = in; pt -= point(0.5, 0.2, 0.0); pt *= 2.5; pt += point(0.5, 0.2, 0.0); if (ms && inBit(pt, point(-0.9, 0.9, 0.0), point(-0.2, 1.1, 0.0))) return 1; if (pt[0] < -0.1 || pt[1] < -0.1 || pt[0] > 1.3 || pt[1] > 2.1) return -1; if (dp && inBit(pt, point(1.15, -0.1, 0.0), point(1.3, 0.1, 0))) { return 1; } if (inBit(pt, point(0.1, -0.1, 0.0), point(0.9, 0.1, 0.0))) { if (digit == 2 || digit == 3 || digit == 5 || digit == 6 || digit == 8 || digit == 9 || digit == 0) return 1; else return 0; } if (inBit(pt, point(0.1, 0.9, 0.0), point(0.9, 1.1, 0.0))) { if (digit == 2 || digit == 3 || digit == 4 || digit == 5 || digit == 6 || digit == 8 || digit == 9) return 1; else return 0; } if (inBit(pt, point(0.1, 1.9, 0.0), point(0.9, 2.1, 0.0))) { if (digit == 2 || digit == 3 || digit == 5 || digit == 6 || digit == 7 || digit == 8 || digit == 9 || digit == 0) return 1; else return 0; } if (inBit(pt, point(-0.1, 0.1, 0.0), point(0.1, 0.9, 0.0))) { if (digit == 2 || digit == 6 || digit == 8 || digit == 0) return 1; else return 0; } if (inBit(pt, point(-0.1, 1.1, 0.0), point(0.1, 1.9, 0.0))) { if (digit == 4 || digit == 5 || digit == 6 || digit == 8 || digit == 9 || digit == 0) return 1; else return 0; } if (inBit(pt, point(0.9, 0.1, 0.0), point(1.1, 0.9, 0.0))) { if (digit == 1 || digit == 3 || digit == 4 || digit == 5 || digit == 6 || digit == 7 || digit == 8 || digit == 9 || digit == 0) return 1; else return 0; } if (inBit(pt, point(0.9, 1.1, 0.0), point(1.1, 1.9, 0.0))) { if (digit == 1 || digit == 2 || digit == 3 || digit == 4 || digit == 7 || digit == 8 || digit == 9 || digit == 0) return 1; else return 0; } return -1; } shader Digits [[string help = "A shader that emulates a 7-Segment display of numbers.
Useful for debugging and showing numbers in SME", string category = "Textures"]] (vector UVW = vector(u, v, 0), float Number = 42, int Digits = 2[[int min = 2, int max = 8]], int Decimals = 0[[int min = 0, int max = 6]], float Scale = 1.0, color BGColor = 0.0, color OnColor = color(1, 0, 0), color OffColor = color(0.1, 0.0, 0.0), int UseOffColor = 1 [[string widget = "checkBox", string label = "Use OffColor"]], output color Out = BGColor, output float Fac = 0.0, output float NumberOut = Number[[string label = "Number"]] ) { int mult[9] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000 }; point px = UVW / Scale; int number = int (Number * mult[Decimals]); int minus = 0; if (number < 0) { number = -number; minus = 1; } int digits = Digits; // Figure out how many digits we need int leftOfDecimalPoint = (int (floor(log(fabs(Number), 10.0)))) +1; // ...but at least one if (leftOfDecimalPoint <= 0) leftOfDecimalPoint = 1; int maxdigi = leftOfDecimalPoint + Decimals; if (maxdigi > digits) digits = maxdigi; if (px[0] > 0 && px[0] < 1 && px[1] > 0 && px[1] < 1) { px -= point(0.9, 0.5, 0.0); px *= (digits * 0.8); px += point(0.9, 0.5, 0.0); for (int i = 0; i < digits; i++) { int x = inDigit(px, int (number) % 10, Decimals == i, minus && i == digits - 1); if (x == 0 && UseOffColor) { Out = OffColor; Fac = 1.0; } if (x == 1) { Out = OnColor; Fac = 1.0; } number /= 10; px += point(0.6, 0.0, 0.0); } } }`

Script节点不被Blender Eevee支持，您应该使用Blender Cycles或Verge3D来预览它。

#

## 世界专属节点(World-Specific Nodes)

这些节点要么只适用于 世界 材质 （Background, World Output）， 要么通常用于世界材质（Environment Texture, Light Path, Sky Texture）。

#

### 背景(Background)

此节点用于设置背景颜色，以及基于图像的照明和反射。它很少单独使用，因为它只生成一种纯色。您可以将其与 环境纹理 结合起来使用以得到最佳效果。

请看Blender手册中关于Background节点的更多信息： 链接。

#

### 世界输出(World Output)

此节点是世界材质的终点。它表示环境的着色结果。

请参阅《Blender手册》中关于World Output节点的更多信息： 链接。

#

### 环境纹理(Environment Texture)

此节点提供了一个图像文件，作为着色器中的环境纹理。这些图像必须是等距长方投影，而且通常应该是HDR格式，尽管也可以使用JPEG或PNG格式。

默认的立方体模板包括一个HDR图像，可用于您自己的项目。

注意：有些选项仅部分支持
- 插值模式：仅支持Linear、Closest
- 图像源：仅支持Single Image、Generated
- 色彩空间：仅支持sRGB、Non-Color和Linear Rec.709

在下面的例子中，一张JPEG图像被同时用来提供基于图像的照明、反射和背景。

请看Blender手册中关于Environment Texture节点的更多信息： 链接。

#### Verge3D设置

您可以在环境纹理上分配自定义的Verge3D设置：

Texture Compression - 纹理压缩
  纹理压缩方法。查看纹理压缩章节了解更多信息。

#

### 光程(Light Path)

此节点向着色器提供各种布尔类型的信息。Verge3D支持Is Camera Ray输出，目的是控制 环境纹理 在背景中是否可见。

下面是一个典型的设置，用于为场景提供环境光照和反射，但在背景中只渲染白色纯色。

参见Blender手册中关于Light Path节点的更多信息： 链接。

#

### 天空纹理(Sky Texture)

此节点提供了一个程序性生成的天空纹理。

注意：此节点只适用于Cycles，不适用Eevee渲染器。

更多关于Sky Texture节点的信息，请参见Blender手册： 链接。

#

## 性能考虑因素

#

### 原理化BSDF的性能

作为最经常使用的节点，Principled BSDF需要您的GPU提供更多的计算能力，并减慢应用程序的加载速度。如果您的场景中有很多这样的材质，这会尤其明显。

有几种方法可以优化基于原理化的材质。

- 对于非镜面或非金属表面，用漫反射BSDF代替原理化BSDF。
- 对于纯金属材质，用光泽BSDF代替原理化BSDF。
- 如果您渲染的是纯色材质，用Emission代替原理化BSDF。
- 调整 Cubemap大小 或 IBL环境模式 属性以改善环境照明性能。
- 切换到 glTF 2.0模式。

请记住，后两种方法会使您的材质看起来与Blender视口中不同。

#

### 性能较慢的程序纹理

有一些程序纹理会降低性能。

- 噪波纹理，特别是在高细节属性情况下（数值16时是性能杀手）。
- 泰森多边形纹理，使用F1作为特征参数，因为它比其他参数好用得多。

您可以把这些纹理烘焙成位图，并使用图像纹理节点来达到更好的效果。

## 遇到问题？

欢迎您随时在 论坛上提问！您还可以加入中文用户社区QQ群(171678760)，在线寻求帮助。