Jarl 开发分享:基于 GPU Compute 的程序化 2D 草渲染

Jarl Frode 最近分享了一篇很棒的文章,解释了在《Jarl》(一款受《Valheim》《RimWorld》《Terraria》《The Majesty》和《The Kingdom》启发的维京殖民地模拟游戏)中,如何利用计算着色器实现 2D 草地渲染。该游戏采用像素艺术、2D 全局光照渲染器,并以区块形式流式加载程序化生成的世界。
由于世界大部分由草地和森林构成,草地几乎总是出现在屏幕上。草地系统需要具备程序化生成能力,并且足够廉价以覆盖大面积区域,同时还需匹配艺术风格,并对光照、风力以及在其中移动的生物做出动态反应。
你上面看到的并不是几何体。两个计算着色器通道每帧重新生成草叶,并将它们直接光栅化到一个屏幕大小的原子缓冲区中。
“我们最终采用的系统将草地视为图像而非几何体。为简化操作,没有草叶实体、没有网格、也没有持久化状态:每帧两个计算着色器根据哈希重新生成所有可见草叶,并逐像素写入一个缓冲区,合成器随后将其排序到场景中。这不是最快的方法,但在当前开发阶段,对于我们设定的性能目标来说是比较合理的:在 RTX 3080 Ti 上以 4K 分辨率运行,调整参数后,整个通道耗时远低于 1 毫秒。
每帧草地都从头重建。一个计算着色器遍历可见屏幕瓦片,查询一张小密度的纹理以了解该处的草量,然后根据瓦片坐标和索引的哈希生成每根草叶。哈希提供了草叶的所有属性:瓦片内的位置、高度、颜色变化、摆动相位。由于哈希输入是世界坐标,因此无论相机在哪里,每一帧相同的草叶都会出现在相同的位置。”
在这篇技术解析中,你会找到交互式演示的链接,可以探索该系统并检查风场、深度缓冲区、密度遮罩等内容。开发者还引用了《对马岛之魂》的 GPU 驱动草地和《战神》的风场系统等作为灵感来源,并提供了更多参考资源。
点击此处阅读完整的《使用 WebGPU 进行简单 2D 草地渲染》文章。
除了开放世界探索,《Jarl》还包含基地建造、资源管理、制作、Boss 战、与 NPC 互动、战斗、交易等内容。游戏大部分使用 Aseprite、FMOD 以及 Visual Studio Code 或 Zed 开发。Steam 页面已在路线图中,在此之前,你可以通过官方网站关注开发进展并了解即将到来的试玩信息。
相关链接
原文链接:https://80.lv/articles/building-procedural-2d-grass-with-gpu-compute
喜欢这篇内容吗?