制作程序性护盾生成器

介绍

大家好,我叫Lucas DZIURA,今年 19 岁,目前是法国蒙彼利埃ArtFX游戏艺术专业的三年级学生。大约一年半前,我开始自己学习 3D,从那时起我就爱上了它。我首先在Blender 中进行水模拟,因为我偶然发现了一个关于流体和粒子模拟的 SIGGRAPH 视频。我很快开始探索 3D 的无限可能性,大约 8 个月前,我发现了Substance套件,尤其是Substance Designer,这让我找到了更复杂的软件解决方案,例如Houdini. 就在那时,我爱上了程序主义。我发现你可以“教”电脑如何在很短的时间内制作大量独特的内容,质量接近手工道具,这非常吸引人。这就是为什么我受到启发成为一名技术艺术家。

除了学习之外,我目前在3D 体素游戏The Sandbox上担任 Pixowl 的自由艺术家,我正在努力寻找进入这个美妙行业的方法。

护盾发生器

在我看到Abdulla Mannuthodikayil 的这幅作品后, 我尝试在 Substance Designer 中“雕刻”。我开始只做一个基础盾牌,并试图让一切都到位。我不记得具体是怎么做的,但我想我可以用这个基础盾牌制作一个盾牌发生器,这就是整个事情的开始。

程序主义不仅是一个选项,而且是这个项目的要求,因为我的目标是:

  • 使护盾发生器能够产生大量的护盾变化
  • 找到一种方法,让从 Substance Designer 到UE4集成的步骤尽可能少
  • 将纹理转换为具有适当多边形数量的 3D 网格,以符合“游戏就绪道具”的要求

有些功能不是预先考虑的,而是在我做项目的时候考虑的,比如获得随机盾牌或不同 LOD 的能力。

胡迪尼工作流程

Houdini 在这个项目中的作用是将我的 2D 盾牌纹理转换为 3D 模型。

为此,我使用了一种异国情调的方式来做到这一点。我将我的盾牌高度图转换为地形,使用具有特定设置的高度场工具在 Houdini 中获取最多的数据。然后将其转换为网格并调整其大小。我减少了它的多边形数量,直到一个合适的多边形数量,合并正面和背面,UV 展开它们,就是这样!

3 个 LOD 和使用的网络:

有很多 poly reduce 节点,因为我想逐步减少 polycount 以保留最多的信息,而不仅仅是一次减少。UV 只是一个正交投影,因为我们是从纹理中提取网格,而不是相反。

这允许跳过高/低烘焙部分,因为从中提取数据的贴图是“高”并且生成的网格是低的。因此,高质量的法线将完美地贴合在网格上,并提供通过烘焙实现的效果。

导出到 UE4

为了将此内容导出到 UE4,我导入所有网格并打开 LOD0 网格,滚动到详细信息中的 LOD 设置,并将另外两个网格定义为 LOD1 和 LOD2。与 Unreal Auto LOD 系统相比,这让我可以更好地控制优化。

我也有这种材质的实例,允许我将盾牌纹理拖放到其中。

将它应用到网格,就是这样。只需点击十几次,我们的盾牌就已集成并准备就绪。

在 UE4 中以这种方式渲染的屏蔽网格示例

物质设计师工作流程

这个项目的最大部分是 Substance Designer 中的生成器本身。

这就是图形的样子,有 11 个输出,每边 5 个和 1 个不透明蒙版。

还有 33 个参数,其中三分之二允许您创建自己的盾牌,另外三分之一是随机生成的盾牌。

我的过程是创建不同的模块,如基本形状、中心图案、主要图案、铆钉、木材等,然后用混合节点的“装配线”组装它们。

通过这种方式,我可以单独控制盾牌的每个部分,并且更容易使它们通过一些定义的规则相互交互。

事实上,正如我们稍后将看到的,一些模块值定义了一些模块是否出现,如果出现,则它们出现的数量。

此外,这允许在某些模块中快速实现新功能而不会破坏整个事情。

在这里,我只更改了基本形状的 1 个节点,并且所有内容都进行了调整,尽管我一开始并不打算添加不同的形状。这显示了如何通过一些调整我们可以非常轻松地实现主题 Alpha 形状以创建特定时期的盾牌,例如罗马或希腊重装步兵盾牌。

这是分层模块以创建最终高度图的过程:

以下是来自生成器的 5 个 PBR 纹理(用于正面):

多样性和随机性

形状的多样性是这个项目的主要焦点之一。

除了我手工制作的中心图案,其余的都是程序生成的。为了实现这一点,我使用了很多飞溅圆形、镜像灰度和边缘检测。

以下是模式的创建方式以及随机生成模式的一些示例:

创建图案的每一步都会受到形状、图案数量、比例等变化的影响,这就是图案具有多功能性的原因。

我谈到了每个模块如何根据某种规则与另一个模块交互。为了制定这些规则,我使用了一些特定参数的函数图

下面是一个例子:

我把这个基于节点的函数图翻译成右上角的C++代码。Substance Designer 非常了不起,因为我们可以按照与 Houdini 非常相似的方式对参数的反应进行逐字编码。

对于随机生成,我必须对每个可以使用“全局随机”节点手动更改的参数进行编码。该节点由自定义参数驱动,该参数通过平方根、乘法等一组操作进行修改,以使每个“全局随机”节点在每个函数中的输出数量不同。

此外,“全局随机”将一个浮点数作为输入,它定义了生成数字的范围。这是非常实用的,因为钳制随机生成数字的输出不是最佳的。假设您将其限制为最少 3 和最多 9,9 以上的所有内容都将返回 9,这是很多数字。它将对模式如何重复产生影响,因为它会经常返回 9。

此外,我必须牢记,我们看到生成内容的方式与其构建方式大不相同。例如,从代码角度来看,0, 0, 0 黑色与 1, 1, 1 黑色不同,但从视觉角度来看,它是无法区分的。这就是为什么我必须对颜色实施步骤,所以我只能生成被认为不同的颜色(即使变化非常微妙),而不仅仅是使用 255^3 种颜色。

另一个特点是在随机生成后,您仍然可以更改一些屏蔽参数,例如金属颜色或图案编号。

刚刚最终成为可能的未计划功能之一是种子编号可以足够大以适合像 DDMMYYYY 这样的生日,这是我用来测试我的随机参数是否没有冗余的。有一些完全独特的东西出现在你的眼前实际上是非常令人兴奋的。

游戏开发中的程序主义

我认为这个项目更像是一个实验室实验,而不是一个可行的工作流程,因为它不如手工制作的道具优化,而且你对自己所做的事情的控制也更少。然而,我认为对游戏制作中的程序主义越来越感兴趣是一件好事。在我看来,它会让艺术家们将更多的时间花在纯粹的艺术创作上,而不是像重新拓扑、UV 展开等无聊的东西上。育碧在《孤岛惊魂 5》和《幽灵行动:荒野》中多次证明了这一点,他们使用 Houdini 生成了整个世界完全程序化。它为艺术家们提供了创造现实世界的坚实基础。对我来说,这种方法的缺点是它需要对程序包装有深入的了解,而且相当复杂,但在正确的人手中可以创造出漂亮的结果。虽然像育碧那样生成地形是个好主意,

在我看来,最好的工作流程已经在一些工作室中使用,它结合了手工艺术和程序主义,可以非常快速和高质量地完成工作。

总的来说,我认为 Houdini 和 Substance Designer 是创建包含大量内容的开放世界的必备软件解决方案。

之后

我希望我通过这篇文章帮助了某人。这是我的艺术站,我将在其中发布我的新项目,如果您有任何问题,可以向我发送问题。

此外,我要感谢 Sofie Chabrol 的中肯反馈和帮助。

返回首页 

作者 CG-BOX

发表评论