全部文章
教程 · 8 min read

随机散布不是自然运作的方式。成团、物种间的吸引/回避关系、边缘渐变、结构化的尺寸变化和地形逻辑——五条把程序化摆放变成可信生态系统的规则,附上让每条奏效的数字。

Illustration comparing an evenly spaced grid of dots with natural clusters

简而言之: 纯粹的随机读起来很假,因为真实植被是随机的反面——它是争夺光、水与土壤这场竞争的可见结果。 你不需要模拟这套生态中的任何一环。你需要五条摆放规则来伪造它的结果:成团、让物种相互关联、把边缘做成 渐变、把尺寸结构化,并让地形决定长什么。本文给出每条规则及具体数字,外加那道比谁都早揪出假分布的灰度测试。

山间谷地:针叶树按湿度与坡度成团,其间是草地 没有园丁摆过这个。树木沿水与庇护成团,在岩石与山脊上稀疏,草地到森林的边缘是一道渐变——本文的每条规则 都能在一张照片里看到。

## 核心洞见:自然是规则加噪声

在五条规则之前,先建立让它们咔嗒到位的心智模型:真实的地貌既不随机也不有序——它是由规则驱动、上面盖着 噪声。种子落在亲本附近,植物争夺光照,水在谷地积聚,风惩罚暴露的山脊。结果之所以显得有机,恰恰是因为简单 规则先造出它,随后随机把边缘弄糙。均匀随机摆放跳过了规则,只留噪声,所以读起来像"这是电脑干的"。以下的一切 都是把规则廉价地加回去的办法。

## 规则一:自然会成团

均匀随机摆放产出一种地球上任何地方都不存在的均匀撒点——真实植物围着播下它们的东西成团,团与团 之间有真正空的间隙。把成团推得比让你感觉安全的更远。

树木立成小树林;花朵开成一片片;连沙漠灌丛也沿排水线成簇。团与团之间的空白不是浪费——正是它让团读得出来, 给视线以喘息之地,还(附赠)比均匀填充渲染更省,因为空地不花成本,而团作为整体被剔除。一个实用目标:瞄准 每团 3–12 个实例,团间留几个团宽的间隙,而不是一片数学上均匀的场地。

为什么要"比感觉安全的更远"?因为在编辑器里,从俯视看,强成团显得稀疏——你的本能是把间隙填满。然后你 降到视平线走一遍,间隙已变成空地、视线通廊和光线积聚之处。信地面的读数胜过俯视的读数;俯视视角在对你的 密度感撒谎。

## 规则二:物种之间有关系

两种关系类型覆盖生态的大部分——吸引(蘑菇靠近树干、常春藤靠近墙、芦苇靠近水)和回避(地面花远 离密林冠、幼苗远离成熟树)。一小把配对胜过把资产数量翻倍。

森林地面一段长满苔藓的原木上成团的蘑菇 蘑菇不会随机撒满草地——它们跟随枯木与湿气。一条"吸引到树干和原木"的规则就能立即重现这点,观众读作真实 却不知为何。

在几乎任何温带场景里都能回本的配对:

  • 蘑菇 → 吸引树干和倒下的原木(分解者跟随枯木)
  • 草 → 回避密林冠(它在光照竞争里落败)
  • 蕨类 → 吸引阴影边缘(它们要湿气,不要黑暗)
  • 幼树 → 回避老树(亲本把幼苗遮进阴影)
  • 芦苇 → 吸引水线;草地花 → 回避它们
  • 岩石/巨砾 → 吸引坡脚(它们滚下坡并聚集)

这之所以如此廉价地卖出真实感:观众并不自觉地懂植物学,但他们走过一万个这些相关性成立的真实场景。违背会被 登记为"游戏味",而玩家说不出森林为何不对劲。一套用距离参数说吸引/回避关系的散布设置——如 Numivo 的散布所做——把上面整张列表变成五六条规则项,在你涂抹时自动求值。

## 规则三:森林是在边缘造出来的

森林边界不是一堵成年树之墙——它是渐变:草,然后灌木,然后小树,然后林冠,通常跨越 5–15 米。凡两 个区域相接处都划出一条过渡带。

生态学家称之为群落交错区,那里也是眼睛停留最久的地方,因为小径、道路、营地和战斗空间都紧贴边缘——深处的 森林反正大多被遮挡。一道好的边缘渐变每次都胜过一份好的深林混合。同一原理适用于每条边界:草地/岩石、岩石/ 水、水/沙、耕地/野地。若你对植被只做一件"进阶"的事,就让它是带有各自物种混合的边缘带——这是可用杠杆最高的 改动。

要避免的失败模式是边缘:密林骤然变成光秃草地的一条利落的线。自然里除了修剪过的草坪或推土机,没有那条线。 连火烧边界或树线也在数米内羽化开来。硬植被边缘读作关卡设计的边界,恰在玩家最常看的地方打破沉浸。

## 规则四:尺寸讲一个故事

一模一样的缩放当场露馅,但天真的随机缩放也好不了多少——把它结构化:庇护中心里更大的个体,暴露 边缘上被风咬过的更小者,外加小幅旋转和几度倾斜。

经得起推敲的有用默认值:

  • 同一物种内缩放范围 0.85–1.25×,在边缘和高海拔偏小——均匀 ±40 % 的随机看起来像玩具箱,因为它毫无逻辑 地把巨人摆在侏儒旁边。
  • 一切都加随机偏航;阔叶树额外获得 2–5° 倾斜。斜坡上完美垂直的树在喊"摆上去的"——山坡上的真树会倾 斜、向光伸展、长得歪。
  • 把实例沉入地面 2–5 厘米。悬在脚踝高度的浮草是存在的最常见散布瑕疵,编辑器里看不见,截图里刺眼。
  • 每实例几个百分点的颜色变化,比添加网格变体更有效地打破大片场地里复制粘贴的闪烁——眼睛抓重复的颜色比 抓重复的形状更快。

更深的一点:尺寸应当编码成团与边缘所讲的同一个故事。谷地里高大受庇护的树,山脊上矮化的,光线照进的明亮森林 边缘的幼苗。当尺寸与位置一致,场景读作一个有历史的生态系统;当尺寸随机,它读作撒在地形上的资产。

## 规则五:地形决定长什么

坡度与高度遮罩是免费的生态——陡面留住岩石与耐性灌木,而非草坪;谷底比山脊线更葱郁;物种随海拔而 变。你手头已有的几何就把它编码了。

与感知对应良好的阈值:草与地被在约 30–35° 坡度以上淡出;灌木撑到约 45°;再往上是裸岩和偶尔的崖居者。 高度带即便在小场景里也重要——把谷地混合与山脊混合在过渡上融合,卖出一种平坦均匀覆盖永远达不到的大世界逻辑。 在引擎允许处把湿度作为第三张遮罩加入(近水处、洼地里),你就编码了真实生态系统实际响应的三条轴:光、海拔与水。

地形遮罩之美在于创作不花成本——坡度与高度数据已存在于你的高度图中。你不是在涂草往哪去;你是在告诉系统"要草, 但别在悬崖上",而悬崖自己把自己遮掉。

## 把它拼起来

令人鼓舞的部分:这些规则在一遍里就能组合。成团的橡树 + 被吸引到它们的蘑菇 + 回避林冠的草 + 森林边缘的一条 灌木带 + 让悬崖保持裸露的坡度遮罩——这是五个设置,不是五周的手工摆放。然后跑最终检查。

灰度眯眼测试: 给场景截图,翻成黑白,眯起眼。真实植被产出不均、成团的明度图案——暗块、亮空地、一种不安分 的质感。如果你的灰度看起来像平滑均匀的噪声,你的分布底下仍是均匀的,你得回到规则一,把成团推得更狠。这道 测试之所以有效,是因为去饱和剥掉了一直在讨好你的颜色,只留下分布——那才是真正读作自然或虚假的东西。

## 值得偷师的现场数字

  • 读起来自然的团大小:3–12 个实例,团间几个团宽的间隙
  • 森林边缘渐变宽度:5–15 米的专用过渡带
  • 缩放方差:0.85–1.25×,在边缘和高海拔偏小
  • 倾斜:阔叶树 2–5°;下沉入地:一切 2–5 厘米
  • 草的坡度截止:约 30–35°;灌木:约 45°
  • 一个丰富场景所需物种:约 2 林冠、2 灌木、2–3 地被、1–2 点缀——分布胜过数量

## 迷你 FAQ

这适用于风格化游戏吗? 完全适用。成团、边缘和地形逻辑关乎的是分布,不是保真度——一个手绘且分布自然的 世界,比一个照片级真实却均匀撒点的更可信。分布是玩家先于纹理读到的那一层。

我到底需要多少物种? 比你以为的少。一个场景在两种林冠树、两种灌木、两三种地被和一两种点缀物种之上,而且 彼此有关系,就撑得很好。分布质量每次都胜过物种数量——十个按规则摆放的资产胜过四十个随机摆放的。

性能怎么办? 成团是你的朋友:团作为整体被剔除,间隙不花成本,边缘带把细节集中到玩家看的地方。看起来自然的 散布通常比均匀密度更便宜,而非更贵——你曾想填满的空白就是免费的帧时间。

我能用一张大噪声纹理伪造这一切吗? 部分能——噪声给你成团,但给不了物种关系或边缘渐变,而那些才是读作 生态而非仅仅变化的部分。噪声只是规则一;可信度来自规则二和三。

五条规则,一遍,加上用来验证的灰度测试。自然不是随机——它是由规则驱动、上面盖着噪声,而这正是一套好的散布 设置的样子。