一条曲线可以直接变成一排朝向一致、间距可控的实例:Curve to Points 负责取样,Instance on Points 负责摆放,必要时再用 Realize Instances 把实例变成可编辑的真实几何。

这套节点适合做路径灯、围栏、树列、散布的模块化建筑,或任何“沿线重复出现”的元素。关键不在节点数量,而在分清三件事:点从哪里来、实例怎么朝向、什么时候需要实化。
最小可用节点树
先准备两件物体:一条曲线作为路径,一个小立方体(或任意模型)作为实例原型。把曲线添加 Geometry Nodes 修改器,然后搭出下面的链路:
Group Input(曲线)
→ Curve to Points
→ Instance on Points
→ Group Output
Object Info(实例原型)
└──────────────→ Instance on Points 的 Instance
Curve to Points 的 Points 输出提供实例位置;把 Object Info 的 Geometry 接到 Instance 输入。将模式切到 Length,并设置 Length = 0.6 m,就得到每 0.6 米一个实例的初始效果。
官方手册将 Curve to Points 定义为把曲线转换为点;节点同时提供每个点的旋转信息。Instance on Points 则在输入点上创建实例,并把点的旋转作为默认实例旋转。Curve to Points 文档 · Instance on Points 文档
间距:先选 Length,再考虑 Count
做路径灯、栅栏这类“物理间距明确”的资产时,优先使用 Curve to Points 的 Length 模式。改变曲线长度时,节点会增加或减少点数,间距仍接近设定值。
Count 模式适合另一种需求:无论曲线多长,都只要固定数量的对象。它会保持总数,因而曲线拉长后,实例之间也会被拉开。
一个实用判断:
- 关注“每隔多少米出现一个”时,用 Length;
- 关注“整条曲线总共出现多少个”时,用 Count;
- 末端不够整齐时,先检查曲线的首尾长度与
Length值是否匹配,而不是急着加随机偏移。
朝向:先利用曲线给出的 Rotation
许多“实例横着躺”或“正面不沿路径”的问题,并不是曲线出错,而是原型物体的本地坐标轴和曲线切线不一致。
最简单的检查方式是:先不要接 Rotation,确认间距正确;再将 Curve to Points 的 Rotation 接到 Instance on Points 的 Rotation。若朝向整体偏转 90 度,在两者之间插入 Rotate Rotation,只给原型补一个固定的欧拉角偏移。例如,原型的正面应沿本地 X 轴时,常见做法是在 Z 轴上补 ±90°;具体方向应以模型的本地轴为准。
不要用逐点随机旋转来掩盖轴向错误。固定校正应该在前,随机变化应该在后。
加一点变化,但让变化可复现
在 Instance on Points 的 Scale 输入前接一个 Random Value:数据类型选 Vector,最小值设为 (0.85, 0.85, 0.85),最大值设为 (1.15, 1.15, 1.15)。这样每个实例会有轻微、均匀的尺度差异。
如果需要更可控的节奏,不要只调随机种子。可以用 Spline Parameter 的 Factor 接 Map Range,让实例从曲线起点到终点逐渐变大或变小;这比纯随机更适合做道路灯带、队列或生长动画。
Realize Instances 什么时候接
实例很省内存,也能让节点树保持轻。只有当下游节点必须逐个处理真实网格时,才加 Realize Instances:
- 要对每个实例单独布尔、焊接或挤出;
- 要把结果导出为普通网格;
- 下游操作没有按实例域生效。
如果只是渲染、变换、复制或继续按实例处理,就先保持实例状态。过早实化会让后续计算面对大量重复网格,既慢,也失去实例化的好处。
一次排错顺序
看不到实例时,按这个顺序检查:
Object Info是否指向了正确的原型物体;Curve to Points是否真的输出了点;Instance on Points的Points与Instance两个输入是否都已连接;- 原型是否被缩得太小,或被局部坐标轴旋转到意外方向;
- 是否在不必要的地方提前接了
Realize Instances。
先把“曲线 → 点 → 实例”这条链跑通,再添加随机、选择和材质。它是几何节点里最可靠的一类基础组合:路径负责结构,点负责分布,实例负责重复,后续变化都可以插在这三个职责之间。
