你好,这是一条原本发布在 r/VoxelGameDev 的贴子,但他们不接受任何人工智能辅助编码,干脆算了。
我正在使用直接计算着色器为 Godot 制作体素引擎,并且因为需要在 v2 结束时进行大量代码重构(以消除 CPU 瓶颈),所以重新接手了这项工作。大语言模型也已经足够强大来完成这类任务。我只是想和大家分享进展。所有内容都是开源的,你可以从架构中获得灵感。架构仍由人决定,实现大部分是 AI 生成的,我仍需进行校对。
我成功让 Godot 链接了 mesher(数学)到渲染器(视觉)。如我在上一条贴子的评论中所说,我使用一个 MultiMesh 池,基本上把它们随处散布,从而在前端消除了任何 CPU 瓶颈。
在此基础上,我添加了一个实例系统(用于树木)。实例在近处拥有精确的 SDF,并在远处存储密度时刻。这也是为什么森林在远处呈现为绿色的球体:远处所有实例仅是叶子密度时刻的合并。目前生物系统还不够精 polished,并且消耗了过多的计算资源。
世界中的每个 SDF 都位于一个“波长带”中,该带定义其影响范围。这意味着 LOD 0 块在 LOD 0 时只计算 32³,LOD 1 时只计算 16³,以此类推,对更粗的层次则上限为 8³。目前共有 25 个 LOD 对应 25 个波长带。世界使用 int64 块坐标,LOD 0 时为 32×32×32 的块,每个块包含 5 cm 的体素。我还在实例类型中加入了胶囊和 10 cm 球体,用于在演示中刻画细节。
然而,从性能来看,它并不那么理想。我主要在笔记本电脑上使用 RTX 3060,依靠两种技巧:FSR2 的 2 倍上采样,以及在此基础上进行最近像素的 2 倍上采样。基本上,我将游戏渲染分辨率降至 1/4 以达到 60 FPS。
渲染的场景是一片无限的生物陆地,上面覆盖着 100 万棵树。每棵树都是单独的实例,你可以想象采摘它们。
该引擎仍然公开发布在 我的 GitHub。
祝大家编码愉快
评论 (0)