使用Substance 3D Designer制作森林地貌材质

灵感
多年来,我参与了各种项目,从而深深地爱上了制作生物群落和地形纹理。我之前曾经研究过森林地面的纹理,但现在我渴望进一步提高其质量,并把我所学的所有技能付诸实践。
小时候,我和家人一起去法国南部度假时游览过一片松树林。那片树林给我留下了深刻的印象,特别是那些密集的针叶和干燥的元素。由于厚厚的落叶覆盖,几乎看不到地面土壤。现在,我的目标非常明确:使用Substance 3D Designer按照程序化的流程完全重现这片松树林。
当然我也可以使用 MegaScan 图集,这将大大加速和简化这个过程,但我想建立一个小型生成器库,看看只用SD可以做到什么程度。
参考
我首先通过在 Google 图片上进行快速搜索来收集参考资料。对我来说最重要和最有用的是找到我想要包含在纹理中的每个元素的特写的参考(针、松果、枯枝等)。
我还使用了更加普通的参考资料来理解不同元素在落地后是如何相互作用的。在这个阶段,最好已经了解了如何进行操作、从哪里开始、所需要的不同生成器、不同的层及其顺序。这样可以帮助我更好地理解和实现目标效果。
定义要复现的地面的大小也非常重要。就我而言,我决定复现一个 4 米的地表,因为我想制作一个可以实际游戏中使用的纹理。换句话说,相对较大的纹理可以在大表面上使用并且易于平铺。
生成器
这个纹理的创建完全依赖于生成器的使用,因此我必须精心制作相当多的生成器。同时,为了提高效率,我重复使用了之前为其他纹理创建的一些生成器,例如几个月前为草地材质所制作的生成器。通过这种方式,我不仅能够大大提高工作效率,还能够确保纹理的质量和一致性,从而呈现出更加逼真的效果。
制作一个生成器并不是一件很难的事情(当然,这取决于它的复杂程度),但考虑到我得做很多很多所以我只关注主要的。
针叶生成器
首先,我创建了一个球体并将其细长化,改造成类似于针的形状。接着,我利用2D变换技术,对中轴进行重新缩放和重新定位,使其底部与空间中心相契合。
此步骤将让我可以自动创建多个针的变体,确保它们始终通过底座连接。
请注意,我使用了简单的混合仅通过修改裁剪区域参数来裁剪针的底部部分。
我在看 Jonathan Benainous 的GDC 2023 演讲《The Last of Us Part 1》的材质艺术时发现了这项技术。
这个参数非常有用,有助于保存用于手动创建蒙版的节点。然后,我通过使用Warp和Perlin Noise创建了针的几种扭曲变体,并小心地遮盖针的底部,使其不受扭曲影响并保持在中心。
在使用噪点、渐变、均匀颜色或其他任何贴图时,要仔细考虑是否需要它们与其他贴图具有相同的分辨率。在很多情况下,答案可能并不需要。因此,我们需要根据具体情况来决定是否需要调整贴图的分辨率。
均匀颜色可以减少到 1x1px,渐变可以限制为 1px 宽、几个像素长的细带,Perlin 或高斯噪波(已经是非常软的噪波)也可以减少几个分辨率,而不会看到任何质量差异。
同样,当你想要模糊纹理时,首先要考虑降低其分辨率。这会自然地模糊它,并且您将节省一个节点和一些计算时间。
创建变体后,我将它们输入到 Splatter Circular 中。这就是为什么将针根置于中心很重要的原因。
这确保了每个实例的位置和旋转点对于所有实例来说都是相同的,并且它们的所有底座都在一个点上重叠。为此,还必须将 Splatter Circular 的 Position 选项卡中的 Radius 减小到 0。
接下来,我创建了一个 ID Map,这样我以后就可以独立控制每根针(允许我给它们不同的颜色和正常方向)。
为此,我复制了Splatter Circular,仅更改亮度随机以获得灰度蒙版。我使用Vincent Gault's Fine Edge Detect转换了这张地图。
(它产生比基础的Edge Detect更精细和更精确的边缘)。
右边是系统自带的边缘检测。
然后我将它连到Flood Fill和Flood Fill to Random Color。最后,我通过使用Distance节点从边缘检测中删除边缘(通过将最大距离设置为最大值并将源/距离组合为仅源 Only Sources)。
最后,我通过使用Swirl和Directional warp为针提供了扭曲效果,并公开一些有用的参数。
这个 Needles 生成器已完成,但实际上不会在最终图中使用,所有元素将在最终图中发生散射和分层。事实上,我正在使用它作为创建其他生成器的基础。
针堆
我决定在最终图表中创建一堆针,而不是直接使用针生成器。原因是我将使用 Shape Splatter 节点来分散我的元素,与 Tile Sampler 不同,它有一个缩放为 5的限制。
这意味着你根本无法超过该值。由于我想用厚厚的针层覆盖整个纹理,因此我需要大量分散的实例。
由于实体越多,它们就越小,我就会被 5 的缩放限制所阻碍。
为此,我简单地创建了一个 Shape Splatter,在其中输入了 Needle 生成器的一些变体。
通过使用像圆盘(disk)这样的原始形状,我能够隐藏纹理边缘的针并制作出我想要的堆叠效果。
然后,我使用两个Shape Splatter Blend Color来重新创建我的法线贴图和 ID/矢量贴图。
带针树枝生成器
为了创建这个生成器,我还重复使用了上面制作的Needle(针)生成器,我使用了三个非常相似的具有不同随机种子值的Shape Splatters来分散它。
我只使用了Shape Splatters的很少的参数。实际上,你所要做的就是将针分散在一根垂直的线上。
完成后,我使用 Shape Splatter Blends 重建了之前创建的其他贴图(法线贴图、ID/矢量贴图),并通过warp和调整level为其提供了最终效果。
在继续讨论下一个生成器之前,我公开了一些对于创建变化有用的参数。
第二种带针树枝生成器
该生成器重用了上面创建的 Needles Branch Generator(带针树枝生成器
)。为了做到这一点,我简单地创建了一些分支变体并手动放置它们(这可能是该纹理中程序最少的部分)。
我创建了 3 个不同的分支,并将它们连接到 Switch Material 节点,这样我就可以选择要使用的分支。
幼冷杉球果生成器
对于这个生成器,我首先使用原始形状创建圆锥(cone)形状。冷杉锥鳞片是使用 Polygon 2 和 Shape Extrude 获得的,我使用 Tile Sampler 将其分散。
然后我将它与形状混合。使用Swirl Grayscale来弯曲它,最后我添加了一些小细节。
冷杉球果生成器
冷杉球果的创建与前一个非常相似,只是我使用两个Tile Samplers来分散鳞片。一个用于圆锥体的中心,一个用于圆锥体的边界。对于他们每个,我都创建了两种不同的大小。
一个用于左侧并向左倾斜,另一个用于右侧并向右倾斜。然后,我使用遮罩来控制我想要的每个变化的位置。
我还使用比例贴图来控制它们的大小,并在圆锥体的内部具有较大的比例,在外部具有较小的比例。这为圆锥体提供了凹凸不平的 3D 效果。
枯枝生成器
对于枯枝,我首先使用Gradient Linear 2创建了一个圆柱体。然后,使用Directional Warps和基于 Directional Noise 4的噪波,我磨损了圆柱体的末端,以创建碎木头的外观。
在这个阶段,树枝仍然是完全笔直的,所以为了解决这个问题,我使用Directional Warp和Crystal 1来扭曲它。
现在我已经有了主树枝,是时候添加小树枝了。为此,如上所示,我首先重新缩放树枝,使其中心轴点位于其底部。这将确保它们的基地在旋转期间不会移动并保持与主分支合并。
然后,我创建了一系列3个Tile Samplers。前2个将左右两侧旋转散布小枝。我使用具有大量实体的第三个,这让我可以给树枝添加微观细节和全局的粗糙层。
由于这些树枝代表纹理的重要部分,因此我决定公开某些参数以确保我可以轻松生成非常不同的树枝实体。
其中,最重要的是大小、扭曲强度以及小枝的数量和大小。
地面
我并没有在地面花费太多时间,因为它的重要性完全微不足道。我对其的制作过于繁琐,超出了应有的范围,原因是我以为它会在某些区域显现出来。然而,在我进行纹理制作时,却发现它根本无法被看到。
尽管它并不起眼,但这个地面对于创建一个广袤的土地仍然非常有用。它可以帮助我们创作出各种元素分散在其上的不平坦地面。请记住,我们只需要非常宏观且模糊的噪波来表现这种效果。Perlin noise或模糊的Cloud 2都可以很好地实现这一目的。
散布
现在我已经拥有了所有的生成器和基础土壤,是时候真正开始工作并将所有内容分层在一起了。该过程的这一部分实际上相当快,因为一旦创建了第一个散布(splatter)的设置,其他生成器就可以直接复制或者调整使用它。
为了完成这个环节,我决定只用Shape Splatter 和Shape Splatter Blend (颜色和灰度),因为它提供了一种非破坏性方法,并且有助于同时构建高度图、法线贴图、和颜色贴图。
因此,我首先设置我的Shape Splatter,将我的生成器实例连接到它以及在背景输入连上创建好的地面。
对于第一个Shape Scatter,不需要太担心参数;这里的想法只是用均匀的松针层覆盖地面。为此,我确实修改了一些参数,例如X和Y数量、比例、随机比例、随机位置、随机旋转、高度比例、符合背景和平滑符合背景。
然后,我通过将 Shape Splatter 的 Splatter Data 1 输出转换为灰度(R为 1,G 和B为0)来创建代表针散射的黑白遮罩。该蒙版将用于混合基色和法线贴图。
另外,请注意Shape Splatter和Shape Splatter Blend (Color and Grayscale)输出是 32 位,这有时会产生问题。在这种情况下,您可以通过将格式更改为 8 或 16 位来简单地修复它。
然后,我创建Shape Splatter Blend Color and Grayscale,以生成在生成器中创建的其他贴图:法线贴图、ID/矢量贴图、蒙版以及其他(如果需要)。这样,我可以在生成高度图的同时生成法线贴图和颜色贴图。
法线贴图
对于法线贴图,我首先使用Shape Splatter Blend Color重新创建矢量贴图和法线贴图(不要忘记在Shape Splatter Blend选项中选中“是法线贴图”)。
创建后,我将它们与普通组合混合在一起,并在必要时修改强度。然后,我将它们组合成直接从Shape Splatter结果派生的新法线贴图。
这种创建法线贴图的方法使我能够为元素的每个实例获得不同的法线方向,并且具有以不同方式重定向光反射的效果,使得针看起来铺在地面上并在连续的致密层中交织在一起。此技术避免了直接转换为法线贴图的高度图的平面外观。
这种技术对于表示草、苔藓和许多其他植被元素也非常有效。
颜色贴图
由于大多数元素都非常小,并且已经创建了非常复杂的法线贴图,因此没有必要,而且在我看来,甚至不建议添加太多细节,尤其是 BaseColor 中的微观细节。
这个过程中最重要的是赋予它们独特的颜色,以创造多样性和轻微的颜色变化。每个元素的确切方法可能略有不同,但在大多数情况下,他们的步骤都一样。
我首先将矢量贴图转换为灰度,以便我可以在渐变贴图中使用它。渐变编辑器中的“拾取渐变”(Pick Gradient)选项可以让你用鼠标取色。
最重要的是,即使在Substance 3D Designer窗口之外也可以进行选择!
然后我添加了相当精细的噪波,也与贴图渐变一起使用,这次是为了添加微观细节。根据具体情况,我还可以添加更多细节,例如基于 AO 和曲率。
然后,我使用上面制作的黑白蒙版将其混合到地面BaseColor或之前混合的元素中。
创建第一层后,我通过复制图表的整个部分并将其重新连接到前一个层,对我希望分散的所有元素重复此过程。
唯一的区别是使用随机蒙版来遮盖纹理的某些区域。该贴图是一个黑白遮罩,源自高度图或简单的噪波,例如云、水分或其他噪波。
我还创建了一个法线贴图,用作来自相同类型噪波的矢量贴图,但这次按比例缩小以删除它可能包含的任何微观细节。
该法线贴图一旦连接到矢量贴图输入,就允许我以更加有机和真实的方式修改元素的位置。随机位置以相同的强度以随机方向移动实例。
这意味着你最终得到的效果不再是基于网格的,而且在宏观尺度上也不是很有机。
整个纹理具有相同的密度级别,而使用矢量贴图会根据矢量贴图为每个实例提供不同的强度值,从而导致某些区域非常密集,而其他区域同时几乎是空的。
通过将其与蒙版相结合,结果变得非常有机并且视觉上更加有趣。
一旦我的所有元素都散布好了,我会通过添加一点环境光遮挡来最终确定我的基色,特别是为了伪造针层的深度和厚度。
我还使用平衡和HSL调整颜色、亮度和对比度,并通过锐化整个结果来完成。
至于法线贴图,我通过将法线贴图与模糊版本的高度贴图混合来添加更多体积,以仅保留宏观细节。
小想法
快速总结一下,对于此纹理,有超过 16 个不同的元素散布。好多啊!当然,这对性能有巨大影响,因此当您想要创建具有大量元素的这种类型的纹理时,请非常小心它可能产生的潜在影响,并始终记住,每个步骤都会添加一个大量的计算时间。
就我而言,我显然可以进一步减少和优化某些步骤,或者选择减少纹理中存在的元素的丰富度(即更少的shape splatters和要计算的生成器),但如上所述,我的目标是建立一个小的生成器库并创建具有多种元素的纹理,以尽可能接近现实。
在 Substance Designer 中工作时的一个小建议 - 尝试尽可能多地对图表进行排序,尤其是当它变得像这样巨大时。这将使您能够更清楚地看到事物并更轻松地修改或定位零件。
就我个人而言,几年前我发现了牛逼的Ben Wilson制作的BWTools 2.0 。
这个小插件包含多个选项,包括重新组织图表以及自动创建图钉和框架。最重要的是,它是免费的!老实说,它已经成为我日常生活的一部分,没有它我就无法生活。我强烈推荐它!
以上就是材质部分的制作教程啦,希望大家喜欢。