news 2026/10/20 9:29:24

开放世界岩石崖壁程序化风化与裂隙生成:基于曲率驱动的 Voronoi 几何切削

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
开放世界岩石崖壁程序化风化与裂隙生成:基于曲率驱动的 Voronoi 几何切削

在次世代开放世界中,辽阔的峡谷峡壁、崎岖险峻的喀斯特石林以及风蚀荒漠中的残丘,是构成大自然壮丽地貌的骨架。然而,针对数平方公里乃至上百平方公里的庞大山脉,如果全部由 3D 美术师在 ZBrush 中手工雕刻每一块岩石的高模,不仅制作周期和资产外包成本不可承受,由于重复复用几套预制岩石资产所导致的“视觉疲劳(Visual Repetition)”更会严重破坏自然沉浸感。

许多初学者试图通过在顶点着色器中叠加坡林噪声(Perlin Noise)或分形布朗运动(fBm)来快速生成山体起伏。但单纯的平滑噪声置换会产生一种极其糟糕的“融化面团”或“发酵海绵”质感——因为真实地质学中的天然岩石并不是连续的光滑曲面,而是由构造应力断裂形成的硬朗节理面(Joint Planes)、物理切面(Fracture Facets)以及在漫长地质年代中由冻融循环(Freeze-Thaw)引发的边缘崩解所共同塑造的。

为了在自研引擎或离线 Houdini DCC 工具链中批量程序化生成兼具锋利节理切面与自然侵蚀细节的高精度崖壁,我们构建了一套基于表面几何曲率驱动与三维 Voronoi 胞体切削的程序化岩石生成系统。


一、地质节理与风化侵蚀的物理建模

在自然界中,坚硬岩石的形态演化主要受两股力量的交织主导:内生构造节理与外生风化侵蚀。

1.1 构造节理面(Structural Joint Planes)

岩石在承受地壳板块挤压或熔岩冷却收缩时,内部会产生规律分布的微裂隙系统(如花岗岩的三组正交节理、玄武岩的柱状节理)。当外力作用导致岩块剥离时,崩裂通常沿着这些平直的晶格平面展开。因此,一个合格的程序化岩石算法,必须能够生成大面积平坦光滑的微倾斜切削面,并在切面交汇处形成极其锋利的折角边缘(Sharp Creases)。

1.2 冻融与重力剥落的曲率选择性(Curvature-Driven Weathering)

雨水渗入岩石缝隙,在严冬结冰体积膨胀,导致岩缝逐渐被撑裂剥落;同时,暴露在强风暴雨中的凸出尖角更容易遭受物理磨损。

  • 高正曲率区域(Convex Peaks / Sharp Edges):尖锐凸起的岩石边缘承受最大的风化应力,发生阶梯式片状剥落,形成崩落碎屑;
  • 高负曲率区域(Concave Crevices / Shelters):凹陷的裂缝与背风避雨处,不仅风化速率较慢,反而会积聚剥落滚落下来的风化沙土与有机质腐殖土,甚至滋生苔藓。

二、三维 Voronoi 几何空间切削数学模型

为了在三维空间中切削出类似晶体断裂的硬朗平面,最优雅的数学工具是三维 Voronoi 空间剖分(Worley Cellular Function)。

2.1 胞元边缘距离与切面投影

给定一组离散分布的三维特征点集合 $\mathbf{P} = {P_1, P_2, \dots, P_k}$,三维空间中任意点 $X$ 到最近特征点与次近特征点的欧氏距离分别为 $F_1(X)$ 与 $F_2(X)$。

  • 胞体内部:距离差 $F_2(X) - F_1(X)$ 很大;
  • 胞体接触边界(节理平面):当且仅当点 $X$ 恰好位于两个特征点连线的垂直平分面上时,满足 $F_2(X) - F_1(X) = 0$。

这意味着,函数 $D_{joint}(X) = F_2(X) - F_1(X)$ 天然定义了一个由一系列平整平面拼接而成的连续标量场。我们将原始粗糙的山体几何体置入该标量场中,沿着平分面的法线方向执行有符号距离场(SDF)布尔交割切削,即可直接在网格表面剥离出一个个天然的断裂多面体。


三、工业级 C++ / HLSL 程序化切削与曲率侵蚀算法实现

下面展示在引擎离线几何生成器或 GPU 计算管线中运行的核心着色切削函数。代码实现了三维 Voronoi 晶格切面的解析生成,并结合表面平均曲率(Mean Curvature)动态衰减切削深度,模拟高凸起区域的重度崩解。

// ======================================================================= // 程序化岩石节理切削与曲率风化着色器 (HLSL) // ======================================================================= // 伪随机三维晶格哈希特征点 float3 Hash33(float3 p) { p = frac(p * float3(0.1031, 0.1030, 0.0973)); p += dot(p, p.yxz + 33.33); return frac((p.xxy + p.yxx) * p.zyx); } // 快速三维 Voronoi 距离场解算:返回 (F1 距离, F2 距离, 最近特征点法向) float3 Evaluate3DVoronoiJoints(float3 p) { float3 cellIndex = floor(p); float3 localPos = frac(p); float f1 = 8.0; float f2 = 8.0; float3 closestCenter = float3(0, 0, 0); // 遍历当前晶格及相邻的 27 个邻域晶格 [unroll] for (int z = -1; z <= 1; ++z) { [unroll] for (int y = -1; y <= 1; ++y) { [unroll] for (int x = -1; x <= 1; ++x) { float3 neighborOffset = float3(x, y, z); float3 featurePoint = Hash33(cellIndex + neighborOffset); float3 r = neighborOffset + featurePoint - localPos; float d = dot(r, r); // 平方欧氏距离 if (d < f1) { f2 = f1; f1 = d; closestCenter = r; } else if (d < f2) { f2 = d; } } } } // 返回 开方后的 F1, F2 以及特征向量 return float3(sqrt(f1), sqrt(f2), normalize(closestCenter)); } // 核心几何位移与风化剥蚀解算函数 float3 CalculateRockWeatheredDisplacement( float3 worldPos, float3 normalWS, float meanCurvature) // 表面平均曲率 (0.0 为平地, >0 为凸起边缘, <0 为凹缝) { // 1. 多尺度构造节理场 (叠加两层不同频率的 Voronoi) float3 macroVoro = Evaluate3DVoronoiJoints(worldPos * 0.25); // 宏观巨型切面 float3 microVoro = Evaluate3DVoronoiJoints(worldPos * 1.20); // 次级碎裂小平面 // 计算切面边缘距离差 (越接近 0 代表越靠近节理断裂缝) float macroJoint = macroVoro.y - macroVoro.x; float microJoint = microVoro.y - microVoro.x; // 2. 利用阶跃与平滑函数构造“平整台地 + 尖锐边缘”的梯形断裂切面 float macroFacetDisplacement = smoothstep(0.05, 0.45, macroJoint) * 0.8; float microFacetDisplacement = smoothstep(0.02, 0.30, microJoint) * 0.2; // 3. 曲率驱动的风化剥落衰减 // 当曲率大于 0 时(凸角暴露区域),风化崩解加剧,切削位移向内大幅凹陷 float erosionFactor = saturate(meanCurvature * 2.0); float weatherChipOffset = (1.0 - smoothstep(0.0, 0.25, microJoint)) * erosionFactor * 0.35; // 4. 计算沿法线方向的总形变位移 float totalDisplacement = (macroFacetDisplacement + microFacetDisplacement) - weatherChipOffset; // 5. 产生带有倾角重力剪切的位移向量(模拟天然层理沉降) float3 layerShear = float3(0.1, -0.2, 0.05) * macroJoint; return normalWS * totalDisplacement + layerShear; }

四、层积节理微表面与多通道材质融合(Layered Strata Splatting)

仅仅具备大结构的几何切面,在摄像机贴近崖壁时依然会缺乏触感。真实的岩层受沉积地壳运动影响,往往具有极其强烈的水平或倾斜层叠纹理(Strata Layers)。

4.1 基于绝对世界坐标的三平面映射(World-Space Triplanar Mapping)

由于崖壁极其陡峭,直接使用网格的原始 UV 会在近乎直立的崖壁表面产生严重的拉伸变形。

  • 我们使用三平面映射(Triplanar Mapping)在世界空间正交投影纹理;
  • 将世界空间高度 $Y$ 坐标叠加带有轻微域扭曲(Domain Warping)的一维正弦波,生成自顶向下连续横贯数公里的水平岩层纹理(Strata Banding)。

4.2 曲率导向的双重材质遮罩分配

在材质片段着色器中,我们读取烘焙进顶点色或曲率贴图中的数值进行材质着色分层:

  1. 陡峭且平整的节理切面(Low Curvature, Steep Slope):输出坚硬、干燥、带有明显切削划痕的花岗岩裸石材质,具有高镜面高光与中等粗糙度;
  2. 风化裂缝与凹陷处(Negative Curvature):分配潮湿泥土、深色风化碎屑与深绿苔藓材质,粗糙度调至接近 0.9,并增加反照率变暗系数,模拟天然积水与有机物滋生;
  3. 凸出锐利脊线(High Positive Curvature):输出高光泛白、边缘发亮的物理磨损微法线,极大增强了岩石的立体硬朗感与体积感。

五、运行时性能与资产流式加载规范

针对大规模开放世界的工业级部署,这套程序化岩石切削流程通常以“离线参数化烘焙 + 运行时高保真重构”的双轨制运作:

  1. 几何体 Nanite / 虚拟几何体直通:在离线阶段由 Houdini 或引擎管线执行切削并生成具备数十万面的高精岩石簇(Rock Clustered Mesh),导入引擎后直接接入虚拟几何体集群流式加载,彻底消除离线手工减模的繁重工序。
  2. 虚拟纹理(Virtual Texture, VT)与运行时材质合并:将三平面映射与曲率遮罩混合的昂贵片段着色器计算,在运行时按需烘焙至运行时虚拟纹理(RVT)缓存中。在常规渲染 Pass 中,像素着色器仅需采样一次 RVT,将复杂的千行着色器开销抹平为一次廉价的纹理查找。

通过深入理解岩石物理节理断裂的地质机理,以三维 Voronoi 胞体切割替代死板的传统连续噪声,并以严密的几何表面曲率指导风化侵蚀,我们得以在浩瀚的虚拟开放世界中,拔地而起一座座气势磅礴、肌理分明且经得起玩家微距特写审视的壮丽崖壁群落。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 9:28:20

gstack:面向独立开发者的AI驱动单人工程流水线

1. 项目概述&#xff1a;这不是一个工具&#xff0c;而是一套可落地的“单人工程流水线”“gstack”这个名字乍一听像某个开源库或CLI工具&#xff0c;但实际它代表的是一整套面向独立开发者的端到端工程自动化范式——不是把一堆AI工具拼在一起喊口号&#xff0c;而是用确定性…

作者头像 李华
网站建设 2026/10/20 9:27:35

PyInstaller-3.2.1 打包实战:GUI应用资源路径与静默运行原理

简介&#xff1a;PyInstaller-3.2.1 是一款面向Python开发者的轻量级跨平台打包工具&#xff0c;专为解决Python程序在无解释器环境下的分发难题而设计&#xff0c;适用于Windows、Linux及macOS系统&#xff0c;尤其适合初学者快速部署脚本、中小型项目交付或教学演示场景。资源…

作者头像 李华
网站建设 2026/10/20 9:27:34

基于PI电流控制器的PMSM矢量控制Simulink仿真实践

我前阵子做完了基于PI电流控制器的PMSM矢量控制仿真&#xff0c;模型用MATLAB/Simulink 2018b搭建&#xff0c;最后还整理了一份说明报告。这是一套最经典、也最值得反复打磨的电机控制仿真组合&#xff1a;永磁同步电机做磁场定向控制&#xff0c;电流环用PI控制器&#xff0c…

作者头像 李华
网站建设 2026/10/20 9:27:09

贪心算法与优先队列:任务调度的反悔机制详解

拿到这题&#xff0c;我第一反应是——懂了&#xff0c;又是披着物理外衣的调度题。题目叫“物理实验”&#xff0c;听着像要推公式、算误差、搞单位换算&#xff0c;结果一读题面&#xff0c;n个实验&#xff0c;每个实验有耗时和截止时间&#xff0c;问最多能做几个。这不就是…

作者头像 李华
网站建设 2026/10/20 9:24:49

近亿元融资流向核心零部件,具身智能供应链战事已起

近段时间&#xff0c;具身智能整机赛道热闹得很&#xff0c;各家都在抢着发新品、秀Demo、晒订单。但我更关注的&#xff0c;是另一条不太起眼的融资消息&#xff1a;一家做核心零部件的公司&#xff0c;连续完成两轮近亿元融资&#xff0c;客户覆盖超过一百家具身智能企业。说…

作者头像 李华
网站建设 2026/10/20 9:23:09

堆排序原理与工程应用:动态极值管理的高效解法

1. 堆排序到底在解决什么问题&#xff1f;——从“找最大值”说起你有没有遇到过这样的场景&#xff1a;手头有一堆杂乱无章的数字&#xff0c;比如某次考试的1000名学生的分数、某电商平台一天内产生的5万条订单金额、或者某传感器连续采集的8小时温度读数。现在领导突然说&am…

作者头像 李华