虚幻引擎5+SpeedTree ! 制作幼发拉底河杨树和柽柳流程分享!-丨CG小苏...
1243 1
实名

通过了实名认证的内容创造者

发布于 2024-11-14 15:39:16

您需要 登录 才可以下载或查看,没有账号?注册

x
CG小苏 ”再点右上角“ ...”最后设为星标 ★
-------------------------------------- | CG小苏 | 分享最前沿的CG技术-游戏开发-CG自媒体平台 |                     
18d15873ba79733562a4b278afbbf5a7.png
         作者:Aria Baskakova   作者网站:https://www.artstation.com/artwork/3E9d1J
1c2c36fffc95f7c8fdaa21c1e23ff45c.jpg
Aria Baskakova 提供了使用 ZBrush、Substance 3D Painter 和 SpeedTree 雕刻和纹理沙漠树木和草地的全面教程,详细介绍了如何设置树叶和树枝图集以及使用 Lumen 和 Nanite 在虚幻引擎 5.2 中的渲染过程。
介绍
                                 你好!我叫 Aria Baskakova,是一名来自柏林的 3D 游戏环境/道具/材质艺术家,对植物情有独钟。我对游戏艺术的热爱源于玩《魔兽世界》:整个虚拟世界的 3D 表现的魔力一下子吸引了我。我获得了平面设计学士学位,并有一些绘画经验,因此我以社交游戏 2D 艺术家的身份开始了我的职业生涯,同时抓住一切机会学习 3D 技术。那些年,我的选择只有短期课程和教程,没有长期和昂贵的课程。我在Retry School创始人 Igor Dyatlov 的 Draft-Punk 课程中学习了道具制作的基础知识。在Anton Ageev 的课程中,我为 Substance 3D Painter 和 Substance 3D Designer 打下了坚实的基础。当然,Daniel Thiger和Javier Perez 的教程对我的学习曲线很有帮助。这条道路和所获得的技能将我带到了 Dragonfly,这是一家专注于风格化游戏方法的外包工作室。我很幸运在那里担任 3D 纹理艺术家两年,为 Airship Syndicate 的 Wayfinder 工作。Wayfinder 的艺术作品令我惊叹,尤其是Romain Durand的环境作品。



https://www.romaindurand.com/
过了一段时间,我意识到我想恢复我的其他 3D 技能并全面练习它们,从构造到引擎实现。得出这个结论后,我决定参加 CGMA 的几门课程,其中对我最有价值的是Jared Sobotta 的《游戏植被和植物》 和Hugh Trombley/Chew 的《虚幻引擎中的着色和材质创建》。



https://www.gameart.cgmasteracademy.com/courses/60-vegetation-plants-for-gamesJared Sobotta 的课程是一颗纯粹的宝石,我感觉自己就像一个德鲁伊,拥有了创造世界上任何植物的新能力。而自己选择的引擎中的着色器为艺术家提供了外观开发的最终且往往至关重要的关键。https://www.gameart.cgmasteracad ... rial-creation-in-ue


关于幼发拉底河杨树和柽柳项目
                                 幼发拉底河白杨和柽柳项目最初并不是一个只有树叶的场景,也不是从一开始就在虚幻 5.2 中创建的。它是怎么来的呢?好吧,在一个令人惊叹的概念之后,我决定总结一下我使用虚幻引擎 4.27 实时 PBR 游戏优化环境场景学到的新东西。概念艺术中没有任何活树,但我想添加它们,因为我想象一些明亮的树木会在实时构图中补充我的场景。我需要根据概念的风格将植物合理地放置在某种亚洲沙漠中。幼发拉底河白杨处于秋天的状态,树干粗糙,是理想的选择。然而,我在幼发拉底河白杨的参考照片中注意到一些有趣的红色灌木丛,原来是柽柳。柽柳有着羽毛般的蓬松树枝,给设置它带来了挑战。最后但并非最不重要的是,隐子草被选为适合荒芜地方的草本植物。在虚幻引擎 4.27 中完成场景后,我决定在虚幻引擎 5.2 中单独渲染树叶,因为我知道渲染的差异会很大。因此,我不得不在两个引擎版本中设置树叶,一个没有 Lumen/Nanite,一个有 Lumen/Nanite。当然,虚幻引擎 5.2 中的东西看起来更加精彩。除了引擎中的最终设置外,创建管道是相似的,但它们有几个细节需要考虑。

https://www.artstation.com/artwork/3E9d1J

在 ZBrush 中雕刻幼发拉底河杨树叶图集
                                 关于幼发拉底河白杨树的一个很酷的事实是,它们在同一棵树上可以同时拥有不同形状的叶子。我从未想过这竟然是可能的!我的叶子创作流程通常从 ZBrush 开始,用于叶子图集雕刻。这里首先要考虑的是优化:可以使用图集作为平面和切口的进一步支撑的高多边形,或者将其用作叶子低多边形网格的支撑的高多边形,以最大限度地利用 Nanite 技术。我采用第一种方法,因为我的计算机设置仍然不是高端的。我从更适合未来叶子形状的形状图元开始雕刻:在这种情况下,它是一个低多边形圆,与几何部分中的动态细分结合使用。动态细分允许使用动态厚度。这种技术可以帮助我在无错误模式下绘制主要形状,同时具有一致的虚拟网格厚度而不重叠。实际网格仍然是单侧低多边形,这意味着我可以仅借助移动笔刷轻松调整形状。如果您想要让叶子的正面和背面完美对齐,那么动态厚度就很方便了。一旦您对结果感到满意,就可以应用动态细分。这会将您的网格变成具有较低和较高细分的常规网格。一旦应用,动态厚度就无法重新计算,因此我始终建议复制。

下一步,我使用 ZSpheres 创建叶子的骨架。这种技术有一些优点。首先,制作一个基本的 ZSpheres 骨架并在不同的叶子之间交替使用会更快。其次,我发现使用 ZSpheres 比使用通常的 Dam Standard(或同等)笔刷更方便,因为 ZSpheres 允许我同时从两侧获得叶子骨架的一致轮廓,并在转换为自适应皮肤时提供多边形组。骨架的多边形组不仅在 ZBrush 中雕刻并将它们转换为遮罩以提高边缘可读性时值得注意,而且在颜色和次表面散射的遮罩进入阶段时对于进一步的纹理处理也很重要。当在 ZBrush 中雕刻以在平面上进一步烘焙时,重要的是检查 ZBrush 中的所有最终网格是否在正面和侧面与该平面对齐。当正面对齐时,需要考虑纹理填充,以及最小化留给不透明度的空间。对于 2K 纹理,填充通常为边距 8px,元素之间 16px。当从不同距离查看最终资产时,需要防止引擎中不同纹理元素相互渗透。不透明度的情况很简单:引擎中的不透明度空间越小越好。在轮廓中对齐雕塑使我们能够在接下来的烘焙阶段实现相应对齐的法线深度。
在 Substance 3D Painter 中烘焙和纹理幼发拉底河杨树叶图集
                                 首先,为了防止烘焙时内存过度绘制,使用 ZBrush 中的抽取网格会很方便。平面上的烘焙在 Substance 3D Designer 中完全可以实现。在烘焙的 ID 部分,我切换到网格 ID/Polygroup,因为它会为我提供每片叶子及其骨架的遮罩。当调色板中的次级光线参数为最高数字时,AO、曲率和厚度烘焙得很好。重要的是要记住在显示设置中选择 ACES 色调映射;否则,很难理解颜色和金属/粗糙度值在引擎中的外观。ACES 色调映射最接近虚幻引擎渲染。在 Substance 3D Painter 中进行纹理处理时,我使用了许多锚点。创建蒙版后,我可以在蒙版的图层堆栈中为其添加一个锚点,然后将此锚点重新用于任何其他蒙版。这极大地节省了时间。

在为游戏创建纹理时,有一个通用规则,即在导出时打包灰度图像。通常,任何灰度图像都可以由一个文件中的红色、绿色、蓝色或 alpha 通道表示。最终的组合取决于当前的管道:一些团队使用 ORM(AO+Roughness+Metallic 分别用于红色/绿色/蓝色通道),而其他团队可以使用 MRE(Metallic+Roughness+Emissive)等等。通用规则是使用绿色通道进行 Roughness,因为它是细节表现最高的通道。这种技术可以降低玩游戏时的内存使用量。  
Maya 中的低多边形叶子从平面到网格
                                 完成叶子的纹理处理后,就该为它们创建优化的网格了。我使用 Maya 作为盒子建模软件,但也可以在其他任何合适的软件中执行。我从一个典型的平面切割过程开始:放置一个带有来自我们纹理阶段的材质的平面(基础颜色+法线贴图+不透明度,这里不需要粗糙度/金属度,只需要完全粗糙);剪下叶子的主要形状,现阶段不用考虑拓扑;为每片叶子分别形成合乎逻辑但又不太密集的拓扑结构,强调它们的形状并尽量减少不透明度;每片叶子的中心枢轴点位于叶柄的起始处,并且位于世界坐标的 0/0/0 处。提示和技巧:在顶点上操作移动/旋转工具时,选中“保留 UV”框以保持纹理边界并同时调整形状。

Substance 3D Designer 中的幼发拉底河杨树皮纹理通常,树干和树枝上的树皮是不同的。因此,我为我的树创建了两个可平铺的纹理。其中一个用于树枝,并且只进入相应的图集,引擎项目中的最终纹理集数量仍将是两个:树皮可平铺和树枝图集。对于树干树皮,我使用了两个 Tile Generator、各向异性噪声和三角网格灰度作为主要图案的基础。我非常喜欢三角网格灰度节点;当你希望形状的角度更加不可预测时,它作为斜坡模糊的驱动程序非常有用。创建这种分层纹理的过程对我来说并不容易。在达到理想的结果之前,我进行了很多次迭代和反复。

树枝树皮节点图要简单得多:两个各向异性噪声和一个 Crystal 2、许多 Slope Blurs 和 BnW Spots 3,瞧,基本高度就在这里。圆形疤痕是用 Tile Generator 中的随机环形铃铛形状制作的,然后,这些形状底部的凸起是用非均匀模糊实现的。我使用 Height Blend 和 Blend 节点来混合基本高度和圆形疤痕:有时,两者结合比单独使用效果更好。

提示和技巧:不要害怕在树皮纹理中使用高法线强度,但重要的是要了解实际中最大深度在哪里。我的白杨树小树枝的主要表面非常静止,而圆形疤痕则深而粗糙。在这种情况下,我将两个法线贴图(一个强度为 3,另一个强度为 30)与圆形疤痕蒙版和法线混合节点相结合。  
SpeedTree 中的幼发拉底河杨树枝图集
                                 准备好所有树木纹理和树叶低多边形后,就可以使用 SpeedTree 创建树枝图集了。我发现 SpeedTree 几乎是完美的植被创建软件,因为它提供了全面的程序流程,并可以进行深度手动调整。在我看来,有机形状的诗意真正依赖于艺术触觉,因此对我来说,能够手动调整到自己喜欢的样子至关重要,而 SpeedTree 的手动模式给了我这种自由。  树冠的主要规则(无论是图集还是最终的树枝布置)是中间留有“空气”,注意不要让树叶过多。当渲染中有光和阴影的空间时,引擎中的事物看起来会很好。树叶/树枝布置得太密集会导致树冠看起来沉重而黑暗。

如果在图集剪切处使用树枝,则可能在此阶段不必考虑多边形计数优化,因为这些网格仅用于烘焙贴图。但如果您也想将最终的树枝用作网格,则“分段”菜单将为您提供许多设置,以保持多边形计数合理(即使使用 Nanite)同时维持所需的形状。就我而言,我使用此图集进行进一步的平面卡片剪切。在 Artstation 上由Decogon Studios 和 Cat Yang编写的教程中,可以找到有关在 SpeedTree 中创建树枝图集/导出纹理的相当深刻而简单的教程。在创建树枝图集期间,SpeedTree 中唯一对我来说不太好用的就是最终的 AO 贴图,它不够精确,所以我通常会在 Substance 3D Designer 中从高度贴图重新烘焙它。

https://www.artstation.com/learning/courses/QBp/tree-production-using-speedtree/chapters/3NB1/reference-gathering-and-planning提示和技巧:始终使用手动模式作为植被创建的最后一步,因为它在进一步调整节点方面具有破坏性。仅当您对程序实现的效果感到满意时才建议实施您的艺术触觉。事先保存文件的副本。
SpeedTree 中的最终树
                                 虽然 SpeedTree 很棒,但尽快在您选择的引擎中设置测试场景很有用,因为 SpeedTree 和 Unreal 等引擎中的东西看起来不同,这是由于渲染的关键差异。看起来空灵的原因是 SpeedTree 在 Unreal 中很容易过于密集。形状也是如此:从不同角度检查引擎中树的开发阶段将节省您的时间。

我的树的多边形数量相当少,但使用虚幻引擎中的 Nanite 技术,可以采用更密集的拓扑结构。最终的选择取决于您的计算机设置和项目的需求。树干起始处的小树枝是从 SpeedTree 内部的树枝图集切割的平面,而如果您的多边形数量预算更高,则可以将它们放置为真实网格。至于有趣的节点,我使用了 Substance 3D Designer 中的 Peeling Bark 节点和不透明蒙版来获取树皮的额外块。此外,我还实施了一种仅 Spine 假树枝放置技术:如果您希望您的切割卡表现为树枝,您可以创建树枝节点,将 Skin 面板中的 Type 改为仅 Spine,然后附加 Mesh 节点,其中您的图集切割在 Material 面板中分配。Spine 树枝以这种方式不可见,并且仅作为操作切割卡的驱动程序。


需要注意的一点是:我不建议在最终的植物构造中使用材质的颜色变化设置(但对于图集来说没问题)。SpeedTree 只是复制了带有色调的纹理,在这种情况下,它并未针对游戏引擎进行优化。最佳解决方案是通过引擎内的着色器逻辑实现颜色变化。在导出最终的树之前,可以启用风力生成器。SpeedTree 中的风力系统用途广泛,在软件内部和引擎中都有许多设置,是现成的着色器/材质实例。在 Generator -> Wind 中,选中 Enabled 框,然后转到 Wind Wizard。最后一个是使用现成的预设添加一些风力运动的简便方法。尽管 SpeedTree 为我们的树叶创建了自动光照贴图,但它还可以得到更好的优化。要在建模工作结束时检查其状态,请点击 Ctrl+7 或转到视图 -> 渲染 -> 光照贴图。您将看到您的植被模型呈绿色和蓝色,绿色表示光照贴图密度较高。通常,我们希望为更靠近玩家眼睛的元素分配更多的光照贴图空间。此外,我们希望摆脱计算的光照贴图右上角过多的自由空间。可以在光照贴图属性中调整植被每个部分的光照贴图权重。例如,如果您注意到某些树枝在引擎中看起来太暗,而其他树枝看起来还好,这是因为光照贴图,可以通过在 SpeedTree 中调整其权重轻松纠正。

SpeedTree 的最终导出非常简单,因为该软件有一个现成的 Unity 和 Unreal Engine 导出器。您将在一个带有实例材质的特殊着色器中打包并链接所有纹理,以便稍后在引擎中调整参数。                        
柽柳植物方法
                                 柽柳枝条的制作过程有些不同。这种植物的叶子呈非常薄的羽毛状,因此无需雕刻。我在 Substance 3D Designer 中创建了这张包含三片叶子的小图集,其中有全新的样条线节点和一个散布在最终样条线轮廓上的形状。

生成的迷你图集被发送到 SpeedTree,我在那里为普通卡片创建了更大的图集,我打算使用交叉平面技术。对于这种技术,需要沿其中心旋转平面以创建具有体积的网格,该网格仅使用一个图集纹理集。因此,对象的旋转轴应该是直的。我将交叉平面网格剪下来后在 Maya 中组装起来,就像杨树叶图集一样。如您所见,我为每个树枝只使用了两个交叉平面,而且它们的多边形数非常低。将平面组合成一个网格后,您可以使用 Lattice 或 Bend 工具弯曲它们以消除不自然的直线。

可能需要修正多边形顶点法线的方向,因为一旦我们从平面上切出平面,如果不修正它,它在引擎中就会表现为平面。首先,我们需要查看顶点法线。在 Maya 中,它是显示 -> 多边形 -> 面法线/顶点法线(选择网格)。您将看到从多边形顶点发出的箭头,它们是顶点法线。它们显示了光矢量朝哪个方向的光数学。我需要引擎将我的树枝计算为圆形蓬松的东西,所以我创建了一个简单的球体并将其顶点法线属性转移到树枝网格。在下面的屏幕截图中,黄色箭头是使用来自拉伸球体的“传输属性”校正的顶点法线,而绿色箭头则不是。虽然结果在 Maya 或 SpeedTree 中并不总是视觉上明显的,但它在引擎中很重要。这种技术通常用于应该类似于圆形的植被,当然,您可以创建用于传输顶点法线的不同形状的对象。



我将最终的枝干网格导出到 SpeedTree 中,并构建了三种灌木类型。这里使用了平切卡和交叉平面网格,以使多边形数量足以满足我的目的。当然,在程序化构建每个植物后,需要进行大量手动调整:可以在节点模式和手绘模式下调整场景中的每个元素,但要记住的是,只有当您对程序化阶段感到满意时才这样做,因为在某些情况下,手动编辑后,程序化地重放事情并不那么容易。


虚幻引擎 5.2 植物渲染
                                 我通常将 SpeedTree 中的植被以 ST9 格式导出到虚幻引擎。导出前需要启用风系统。在虚幻引擎中创建植物场景项目后,可以打开流明。以我处理柽柳为例,我需要转到编辑 -> 项目设置 -> 引擎 -> 渲染 -> 流明并选择细节跟踪。这将有助于计算所有这些错综复杂的柽柳蓬松树枝的光线。除了流明,您还需要一个方向光和一个天窗。我将天窗的灯光颜色设为浅蓝色,其强度等级为 5。我场景中的方向光为 3.5 勒克斯,亮度由 6500 的温度驱动。

https://dev.epicgames.com/documentation/en-us/unreal-engine/lumen-global-illumination-and-reflections-in-unreal-engine正如我之前所说,SpeedTree 会创建打包的纹理集和现成的材质实例。有两点需要考虑:次表面散射轮廓有时需要进行大幅调整,而在引擎中执行此操作既方便、无损又快速。例如,我将柽柳树枝的次表面纹理亮度曲线从最初的 1 调整为 0.5。对于杨树叶图集,亮度曲线的次表面纹理校正甚至为 0.2。 每种植物的 Nanite 也需要手动启用,您会立即注意到植物渲染的精度会更高。

在每个植物的文件夹中,您将找到一个包含大量设置的材质实例,而主材质可以在 General -> Parent-SpeedTreeMaster 的设置底部找到。好消息是,我们可以重写 SpeedTree 主材质,添加一些所需的参数或更改其逻辑的大部分内容。例如,我为这个着色器添加了自上而下的渐变和随机实例逻辑的颜色变化,这有助于我强调柽柳灌木的颜色。



尽管幼发拉底河杨树和柽柳树使用了 SpeedTree 着色器并做了一些调整,但我从一开始就创建了 Cleistogenes 着色器。此着色器中的风系统更简单。当我在 Maya 中制作 Cleistogenes 网格并且不需要使用 SpeedTree(因为它经常用于草和花)时,我必须在那里定义风的顶点颜色。它通常是用作引擎中的蒙版的双色顶点信息。在我的例子中,我想将草的根定义为不在风中移动。顺便说一下,也可以在 SpeedTree 中分配顶点颜色。将网格导入引擎后,您需要将“顶点颜色导入”选项选择为“替换”,重要的是,有时在那之后,您必须重新导入网格。





最后,PostProcessVolume 的功能不容忽视。它允许实时校正阴影/中间色调/灯光,以及颜色通道。我使用 Shadows Max 0.9 将场景的伽玛调整为 1.05。中间色调和灯光中的黄色通道饱和度也得到了提升,使白杨的叶子更加突出。   总之,通过试验这个项目,我学到了很多东西。对我来说,栽种柽柳灌木丛并不容易,但结果还是值得的。接受新的挑战可以保持自我发展,在尝试将项目变成你想要的样子的过程中,每一次迭代都会导致改进。我总是对未来的任务及其挑战充满好奇。 希望本文能对各位艺术家有所帮助。谢谢阅读!  





1                                  END
声明:本文章中所有的图片和视频都归原作者所有,仅供大家参考学习和交流,不作商业用途,侵删。如果你喜欢这篇文章,欢迎转发!谢谢!更多学习和交流可扫描下方二维码哦!

本帖被以下画板推荐:

授人以鱼不如授人以渔!B站和微信公众号关注: CG小苏  每日分享最前沿视频教程和技术文章白嫖资源!
使用道具 <
ZhBJ2009  发表于 2024-12-12 20:14:49  
2#
厉害啊
回复 收起回复
使用道具
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表