UE4VoxelTerrain 核心概念详解:密度场、材质ID与65³区块体素模型入门指南
【免费下载链接】UE4VoxelTerrainUnreal Engine 4: Smooth voxel terrian example项目地址: https://gitcode.com/gh_mirrors/ue/UE4VoxelTerrain
UE4VoxelTerrain 是一个基于 Unreal Engine 4 的程序化体素地形示例项目,本文带你快速理解它的三大核心概念:密度场(Density Field)、材质ID(Material ID)和 65³ 区块体素模型,帮你轻松看懂这套基于 Transvoxel™ 算法的地形生成系统。
什么是 UE4VoxelTerrain?
这是一个用体素(Voxel)构建平滑地形的 UE4 插件示例,主要特性包括:
- 🏔️ 程序化地形与洞穴生成
- ⛏️ 运行时修改地形(挖矿、挖洞)
- 🔍 按区块的 LOD(细节层级)
- 🌿 植被系统
- 🎨 最多支持 65535 种地形材质
核心概念一:密度场(Density Field)
密度场是体素地形的心跳——它用一个数字描述空间中每个点"是空气还是实体"。
在 CudaVdGenerator/main.cu 中可以看到核心定义:
typedef unsigned char TDensityVal; // 密度值:0~255,1 字节- 密度值
0表示空气,255表示完全实体 - 地形高度由三层不同频率的 Perlin 噪声叠加得出(见
clcGroundLevel函数:小尺度噪声 0.5 倍、中尺度 5 倍、大尺度 10 倍) - 再用 Sigmoid 函数(
clcDensityByGroundLevel)把"高度差"平滑过渡成 0~1 的密度,乘以 255 存入密度场
这就是为什么地形边缘如此平滑:密度是渐变的,网格算法在 0.5(即 127/128)附近切出表面。
核心概念二:材质ID(Material ID)
密度场决定"有没有东西",材质ID 决定"是什么东西":
typedef unsigned short TMaterialId; // 材质ID:0~65535,2 字节- 每个体素同时保存一个材质ID,最多可区分65535 种材质(泥土、岩石、草皮……)
- 生成示例中统一写入
md[i] = 1(基础材质),你完全可以扩展为按密度区间/深度分配不同材质,实现分层地质
💡 密度(1 字节)+ 材质ID(2 字节)= 每个体素仅 3 字节,这就是体素地形在内存上的巨大优势。
核心概念三:65³ 区块体素模型
整个地形被划分为一个个区块(Zone),每个区块内部是 65×65×65 的体素网格:
#define USBT_ZONE_SIZE 1000.f // 区块在世界中的物理尺寸(单位厘米) #define USBT_ZONE_DIMENSION 65 // 每个区块 65³ 个体素关键数据:
| 项目 | 数值 |
|---|---|
| 区块体素数 | 65³ = 274,625 个 |
| 单区块密度数据 | 约 268 KB |
| 体素索引公式 | x*n*n + y*n + z(见clcLinearIndex) |
为什么是 65?奇数便于区块边界对齐,同时 65³ 的规模恰好适合单线程块在 GPU 上一次算完,也方便做按区块的 LOD 与按需加载。
生成流水线:从噪声到可见地形
整体流程可以概括为四步:
- CPU 规划区块— 决定需要生成哪些 Zone,打包成
TVdGenBlock结构(定义见 CudaVdGenerator/CudaVdGenerator.h,包含区块坐标、密度、材质、缓存四类缓冲区) - GPU 并行计算— 导出函数
CudaGenerateVd启动 CUDA 内核:cudaGenerateZoneVd为每个区块填充密度场与材质ID,cudaMakeCache预计算 7 级 LOD 的体素位置缓存(LOD_ARRAY_SIZE 7),大幅减少运行时网格构建开销 - 回传内存— 数据从显存拷回主机内存,按区块索引组织
- UE4 构建网格— TerrainGenerator 中的
StartBuildingTerrain()驱动生成流水线,TerrainController 提供bUseCUDAGenerator开关,可切换 CPU/CUDA 两条生成路径;CudaTerrainGeneratorComponent 负责实际调用 CUDA 模块
新手学习路径建议
- 先通读 README.md 了解项目背景与环境要求
- 从
CudaVdGenerator/main.cu入手,重点看噪声、密度、索引三个小函数 - 动手改一改
clcGroundLevel中的噪声倍率(0.5 / 5 / 10),观察地形起伏变化 - 在 TerrainController 中打开
bUseCUDAGenerator,对比 CPU 与 GPU 生成速度 - 查阅 controls.md 熟悉游戏内操作:
V切换视角,右键使用工具,数字键 1~7 切换地形修改工具
掌握密度场、材质ID 和 65³ 区块模型这三个核心概念后,你就已经读懂了 UE4VoxelTerrain 的一半——剩下的只是网格构建与渲染细节,值得继续深入源码探索 🚀
【免费下载链接】UE4VoxelTerrainUnreal Engine 4: Smooth voxel terrian example项目地址: https://gitcode.com/gh_mirrors/ue/UE4VoxelTerrain
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考