本文转自公众号:虚幻引擎
大家好!如果你现在已经在我的各种网站(LinkedIn或Instagram)上关注了我,你就会知道我最近对Nanite和植被的兴趣。通过这篇文章,我想详细介绍我的工作流程以及我在这个项目中所学到的东西。
请注意,这绝不是一个教程或做事的唯一方法。这只是我开发并用来创建此场景的工作流程。我坚信它仍然还有很大的改进空间。
Speedtree - 树木创建
尽管Nanite在三角形(tris)预算方面具有很大的自由度,但它并不是无限的。这就是为什么我决定将每棵树的多边形数量设定为一百万到两百万个三角形。对于一款游戏来说,这样的资产精度有点过高了,但现在只是制作一个场景,我就放飞自我了。还需要知道的是,大部分多边形数量来自于树叶,树叶可以进一步优化。请注意,无论你是否使用Nanite,创建逻辑都保持不变:多边形数量越低越好。
使用扫描树干 - 创建树木的第一步是充分利用Nanite,这就是我决定使用Megascans扫描树干的原因。尽管使用了Nanite,我还是选择使用LOD3以获得更大的舒适度。更低的LOD会过重。
![]()
在继续处理树之前,我总是尽可能先创建可平铺的扫描纹理。有些资产非常特殊,有时最好使用Megascans或其他库提供的可平铺纹理。要根据扫描部分创建可平铺的纹理,你可以使用为此目的制作的网格体转换器工具。还要注意,它可以帮助你将扫描的资产转换为Speedtree资产,这在进行大规模优化时非常有用。
借助“Stitch”工具,可以非常轻松地组合自定义资产和Speedtree资产。虽然需要正确定位,但它对于将两种资产类型结合在一起有很大帮助。请注意,Stitch总是带有一个分支,代表主干的连续性。你必须将我们之前创建的纹理分配给这个分支。

需要了解的是 - 为了使Stitch和网格体之间的过渡完美进行,你需要通过选择网格体、转到“材质”并使用“烘焙缝合工具”选项来烘焙此信息。从这里你可以仅烘焙纹理,或使用它们自动创建着色器。
结构工作流程 - 其余结构总体上与Speedtree非常相似。但是由于使用Nanite,你不必烘焙整个树枝,在平面上使用来尽可能地优化树木,因此真正的区别在于3d树枝级别的数量,这比传统工作流程要多。

Nanite图集规格 - 虽然通常需要在地图集中包含尽可能多的不同大小的分支,但在这里Nanite也要求你以不同于传统植被的方式工作。
无需烘焙具有数十个不同分支阶段的图集,只需几个小分支就足够了。这不仅减少了图集中元素的数量,还意味着元素可以变得更大,从而提高其质量。由于元素更大,其分辨率也更高,从而减少了在元素过多或元素大小未被合理控制的图集中出现的“模糊”现象。
你可以亲自查看传统方法图集与Nanite方法图集之间的比较。

一旦图集完成,我们就可以剪出详细计划来详细说明我们的各个分支。但为了让Nanite全速工作,必须去除所有透明度,尤其是植被。因此,我们需要找到一种方法,将基于不透明蒙版的经典网格体转换为完全不透明的网格体,这样就可以不用这个有问题的蒙版。
需要了解的是 - 你可以在我的Old West Environment课程中学习如何在混合工作流程(Nanite中的3D结构和LOD中的植被)中创建这些树。
Houdini - 将基于阿尔法的网格体转换为不透明网格体
这时我就非常感谢Quentin King和他的视频,视频里展示了如何创建工具在Houdini中将阿尔法卡网格体转换为不透明几何体。如果你想了解该工具是如何制作的,甚至如何重新制作它,我强烈建议你观看他的视频。
就我而言,我只会向你展示你可以使用该工具做什么。
如你所见,一旦正确配置,该工具就能完美运行,并且与手动工作相比可以节省大量时间。虽然理论上该工具适用于使用不透明蒙版的所有类型的资产,但我仅在植被上进行了测试。
现在,使用该工具对该场景中使用的几棵树进行处理,查看树枝资产的结果。
Speedtree - 地面植被创建
地面植被的处理方法与树枝的处理方法非常相似。我首先从基于不透明蒙版的剪切开始,然后使用上面显示的工具将其移除。
这种资产类型的真正困难在于保持每个资产的三角形计数一致。由于每项资产都会重复多次,因此建议不要将其价值保持在太高的位置。除了我的草((过170k三角形)和紫色花朵(接近100k)外,我的其余资产均不超过30k。

再次强调,我得出这些数值,因为我是在场景中,而不是在游戏中。如果你对游戏采用类似的方法,我建议你每项资产不要超过10k。尽管Nanite可以很好地处理具有大量三角形的资产,但资产的三角形越少,Nanite的效率就越高,你就越能管理预算。
Speedtree - 风
最初,我的场景不包含风,只有静态镜头可供渲染。因为知道给Nanite资产加上风会对性能产生影响,我不确定是否想尝试。但后来我想,如果在这一点上不去尝试失败一下,那真是太可惜了,所以我冒险尝试了。
“旧版Unity/虚幻引擎”和.st格式 - 我从经典方法开始,虽然我的资产在导入时移动得很好,但一旦转换为Nanite,就不可能让它们移动。我认为这一定是保存顶点颜色信息的问题,所以我切换到第二种方法。
Pivot Painter(IGToolsPP) - 尽管这种方法极其耗费资源,但如果它能让我的树在转换为 Nanite 后移动,我愿意采用它。而且它确实有效,树木通过这种方法移动,添加使工具与自定义着色器兼容的功能非常简单,而且风也非常有趣。
但对于我来说,必须通过特定的层来配置它似乎相当复杂,特别是在数十种不同的资产上。尽管可以使用复制/粘贴选项,但这似乎不是最好的方法。更重要的是,它似乎在主干上有一个正常问题,这可能是由于我对此工具缺乏了解造成的。就在那时,我想到Speedtree提供的第二种风。
“游戏”和.st9格式 - 在经历了前两次失败之后,我对测试这种新方法没有什么信心了。我认为它会与第一种风类似。尽管如此,我还是冒险尝试了这种新型的风。我尝试了几次才明白它是如何工作的以及每个参数起什么作用。当一切都清楚之后,我配置了我的第一个树并将其导出到虚幻引擎。
第一个结果并不是很有说服力,即使我的树在转换后移动了,它们似乎与我在Speedtree上看到的完全不同。但这种风与“旧版”的区别在于,这里的所有参数都可以从虚幻中的材质实例中获得。这为其配置提供了极大的自由。从那时起,我以树木的风为基础进行配置,不再考虑最终结果。
![]()
由于我的树的每个生长阶段都非常相似,因此只需配置一个就可以影响其他树。因此我设置了四种风型,每个生长阶段一种。大型、幼年、树苗和幼苗。
因此,如果你需要在Nanite植被上配置风,我建议使用“游戏”风类型并从Speedtree 10以“.st9”格式导出你的资产。虽然这种风在版本9上可用,但我还没有测试过。这样,这些变化就不会影响所有Actor。
关于着色器
正如你现在所知,Nanite永远不如不透明着色器更好工作,但如果你不想创建新的主着色器或担心破坏已有的主着色器,你可以直接在材质实例中更改着色器类型(混合类型)。这样,更改就不会影响使用相同着色器的Actor。
![]()
值得了解的是 - 你可以在这里了解如何创建此场景中使用的每个着色器
性能
在进一步讨论这个问题之前,请务必记住我还没有进行过任何广泛的测试或比较。因此,除了我自己的发现之外,我不会在这里分享任何其他东西。
与该场景早期仅使用传统植被相比,仅使用Nanite资产和不透明着色器所获得的性能提升相当令人印象深刻。我很难进行比较,因为我根本没有这样想过这个项目,但在我沉浸在这个主题之后不久,我就分享了我对性能的惊讶。以下我开始研究后不久在LinkedIn上发布的一篇帖子的截图,证明了这一点。
![]()
正如我所担心和已经知道的,风对Nanite资产的影响相当显著。平均来说,当有风时,我会损失大约30FPS。
最终场景在RTX 4080上以1440p分辨率、全是Nanite和风的情况下以大约45fps的速度运行,在没有风的情况下则以75fps的速度运行。值得注意的是,地貌上的Nanite极其耗费资源,因此资产远未得到最佳优化,并且这些数据来自编辑器而不是独立版本。
然而,我相信,通过采用更加以游戏为导向的方法以及随之而来的限制,在没有风的情况下,在相同条件下保持100fps以上并非不可能。
总结
在进行这个项目之前,我认为Nanite不是一种用于植被的技术,但今天我的观点发生了改变。我不会说它功能齐全、没有问题,但虚幻引擎5的各种更新所取得的进展正朝着正确的方向发展,并强化了我的信念:有一天,Nanite和植被很可能成为许多工作室的选择。
该项目将在未来几个月的课程中介绍,但我将发布一篇新的博客文章来分享有关即将开设的课程及其发展方式的信息。
感谢各位花时间阅读这篇文章。
不要犹豫,告诉我你对Nanite在植被上的看法,始终保持善意并尊重每个人的意见。
全文完
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.