之前有一名用户(runevision)在贴吧公布了一个很酷的视频,并且附带了一个关于如何在像素级别实现地形蚀刻的技术。这种技术是通过在shader中实现的。点击以下链接可以进入视频的内容,视频中详细说明了技术的实现过程:https://blog.runevision.com/2026/03/fast-and-gorgeous-erosion-filter.html

我为这个贴都亲自打包了BURST兼容的c#代码,以便使它可以直接应用到我的行星地形系统中。

想看具体的代码内容,可以点击以下链接进行浏览,代码完全开源,并且允许商用:https://github.com/lpmitchell/AdvancedTerrainErosion

在上述链接显示的视频中,那名用户的视频中有很多技术细节值得学习,而且非常有意思。为了使代码和shader的内容接近,我尽量保持了原来的代码,不会让程序接近。这是我在原来的代码基础上添加的一些功能包括:

  • 能够传输一个种子
  • 在3d空间中采样API(用于产生球形地形);这个API是基于一个立方地图,然后会平滑处理立方边缘
  • 双精度和单精度支持(用于行星地形系统,这里可以添加一个编译指令使其支持双精度浮点数)
  • 能够给出一个配置结构,同时还可以覆盖某些重要的参数值(例如,在上述视频中,沙漠生态的蚀刻更加粗糙)

整个程序都封装在一个单文件中唯一的依赖是Unity.Mathematics - 所以你可以直接将这个代码片段粘贴到你的项目中。而这个程序也是一款整体的Unity包装,你可以直接从Unity的包管理器中进行安装,具体的包管理器配置详见Github README。

---

贴士:感谢这个视频,我会将这个视频的链接插在下面。我的游戏就是在这个视频中所展示的游戏。我的游戏已经在steam上架了,如果你喜欢这个视频,也希望能推荐一下我的游戏。点击一下以下链接即可:https://store.steampowered.com/app/4272440/SLOP_Crew/?utm_source=reddit&utm_medium=social