Bacteria 节点是 Unity URP Shader Graph 中一个功能强大的程序化纹理生成工具,专门用于创建有机、细胞状或细菌状的图案效果。这个节点基于 Worley 噪声算法实现,能够生成高度可定制的生物形态纹理,非常适合用于模拟微生物、细胞结构、有机表面或科幻风格的视觉效果。
在实时渲染中,程序化生成的纹理相比传统位图纹理具有诸多优势,包括无限分辨率、无内存占用、动态变化能力以及参数化控制的灵活性。Bacteria 节点正是这种程序化纹理生成的典型代表,它通过数学算法在着色器运行时实时计算纹理图案,为材质创作提供了更多可能性。
描述
Bacteria 节点生成基于输入 UV 的细菌状纹理图案。这种图案由一系列随机分布的点状特征组成,每个点周围形成渐变的影响区域,多个点的区域相互叠加和影响,最终形成类似细菌群落或细胞组织的有机图案。
从技术实现角度来看,Bacteria 节点基于 Worley 噪声(也称为细胞噪声)算法。该算法的核心原理是在二维空间中随机分布多个特征点,然后对于空间中的每个像素,计算它到最近的特征点的距离,根据这个距离值生成图案。通过调整特征点的分布密度和随机种子,可以创建各种不同的有机图案。
Bacteria 节点的主要特点包括:
- 完全程序化生成,无需纹理贴图资源
- 实时计算,支持动态效果
- 高度参数化,可通过输入参数精确控制图案特性
- 无缝平铺,适合大面积表面覆盖
- 与其他Shader Graph节点无缝集成
在创作应用方面,Bacteria 节点特别适合以下场景:
- 生物组织或微生物群落的模拟
- 科幻游戏中的外星表面或有机科技材质
- 腐蚀、氧化或有机沉积效果
- 特殊视觉效果中的能量场或魔法图案
- 抽象艺术背景或用户界面元素
核心算法原理
深入了解 Bacteria 节点的算法原理有助于更好地掌握其应用方式。Worley 噪声的基本算法步骤如下:
- 将二维空间划分为规则的网格单元
- 在每个网格单元内随机放置一个或多个特征点
- 对于空间中的每个采样点,找到最近的几个特征点
- 计算采样点到这些特征点的距离
- 根据距离值应用适当的函数生成最终输出
Bacteria 节点通常使用到最近特征点的距离作为输出,这会产生以特征点为中心的圆形渐变区域。当多个这样的区域相互靠近时,它们的边界会形成类似细胞壁的线性结构,这正是细菌状图案的来源。
端口

Bacteria 节点包含三个输入端口和一个输出端口,每个端口都有特定的功能和数据类型。理解这些端口的特性和使用方法对于有效利用该节点至关重要。
输入端口
UV 输入端口:
- 数据类型:Vector 2
- 默认绑定:UV(0)
- 功能说明:提供纹理坐标,用于确定图案在模型表面的映射位置。此端口接收二维向量,表示在纹理空间中的坐标。当未连接任何输入时,节点默认使用模型的主UV集。
Tiling 输入端口:
- 数据类型:Vector 2
- 默认值:(8, 8)
- 功能说明:控制图案在U和V方向上的重复密度。较高的值会增加图案的密度,使细胞状结构更小更密集;较低的值会减少密度,使细胞结构更大更稀疏。X分量控制水平方向的平铺,Y分量控制垂直方向的平铺。
Seed 输入端口:
- 数据类型:Float
- 默认值:0
- 功能说明:控制随机数生成器的种子值,影响特征点的分布模式。不同的种子值会产生完全不同但同样有机的图案变化,而相同的种子值总是生成相同的图案。这保证了图案的一致性,同时提供了丰富的变异可能。
输出端口
Out 输出端口:
- 数据类型:Float
- 功能说明:输出基于输入参数计算的细菌状图案值。输出范围通常在0到1之间,表示采样点距离最近特征点的相对距离。值为0表示采样点正好在特征点上,值为1表示采样点远离所有特征点。
端口使用详解
UV 输入端口的深入应用:
- 直接使用模型UV:当需要图案跟随模型表面时,可直接使用默认UV绑定
- 使用世界坐标:通过Position节点和适当的转换,可以创建基于世界空间的图案,使图案在物体移动时保持固定
- 使用物体坐标:基于物体自身坐标系的图案,在物体移动时图案会随之移动
- 自定义UV变换:通过组合Tiling And Offset节点或Rotate节点,可以实现图案的平移、旋转和缩放效果
Tiling 输入端口的进阶技巧:
- 非均匀平铺:通过设置不同的X和Y值,可以创建拉伸或压缩的细胞结构
- 动画平铺:通过Time节点驱动Tiling值的变化,可以创建细胞生长或收缩的动态效果
- 渐变平铺:通过其他纹理或节点控制Tiling值,可以在表面不同区域创建不同密度的图案
Seed 输入端口的创造性应用:
- 随机化种子:通过Random Range节点驱动Seed输入,可以在不同物体或表面区域创建独特的图案
- 时间驱动种子:通过Time节点影响Seed值,可以创建图案逐渐演变的动态效果
- 基于位置的种子:通过表面位置计算种子值,可以创建在大表面上无缝但多变的图案
输出端口的数值特性:
- 输出值表示相对距离,不是绝对距离
- 输出值在特征点处最低,在细胞边界处最高
- 通过反转输出(使用One Minus节点),可以交换明暗区域
- 输出值可以作为遮罩、高度图或直接作为颜色值使用
端口连接示例
以下是一些常见的端口连接方式,展示了Bacteria节点的灵活性:
基础UV连接:
css
[UV] → [Bacteria UV]
世界空间图案:
css
[Position] → [Split] → [Swizzle XZ] → [Combine] → [Bacteria UV]
动画平铺效果:
css
[Time] → [Sine] → [Remap -1-1 to 2-10] → [Combine] → [Bacteria Tiling]
随机种子变化:
css
[Object ID] → [Hash] → [Bacteria Seed]
【Unity Shader Graph 使用与特效实现】专栏-直达 (欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)