森林废墟环境 Breakdown:从 SpeedTree 程序化树木到模块化场景搭建

AI3D 发表于 4 周前 浏览 0 分类 创作分享

介绍

大家好!我叫 Heather Geiger,是一名环境艺术家,拥有三年游戏开发经验。我最初是自学成才的通才,过去两年转向环境美术。我现在是 ACE Entertainment LLC 团队的一员,正在参与他们即将推出的游戏。

我进入 3D 领域的道路始于童年早期。我曾花大量时间玩剧情驱动的冒险 RPG(《最终幻想》系列我全都玩过),并观看《黑水晶》《大魔域》和《魔幻迷宫》这样的电影,正是在那时,我第一次培养起对科幻和奇幻类型的热爱。我一直梦想从事游戏行业。然而,我从未想过这真的可能实现,因此我成年后的大部分时间都在从事时尚/商品企划工作。

当我终于决定放手一搏时,我报名参加了 Vertex School 的环境美术课程。在那里,我有幸从导师 David Lafuente 和 Kem Yaralioglu 那里学习行业工作流程。之后,我通过 Sierra Division Academy 的 Jon Arellano 的导师指导继续提升自己的作品。正是在他的指导下,我创作了这个奇幻废墟环境。所有资产都在 10 周的导师指导期内完成,随后我又在接下来的几个月里利用周末时间进行打磨、打光和渲染。

Breakdown:
Breakdown:
Breakdown:

项目目标与灵感

这个项目的主要目标,是挑战自己完成一个由雕刻元素构成的有机场景。在此之前,我大多使用硬表面工作流程,所以我很期待练习雕刻,同时学习一些有趣的技术来引入模块化。我非常喜欢制作废墟这个想法,因为我曾见过其他艺术家做出的如此美丽的范例,也想了解它们背后的制作过程。

在风格方面,我的灵感来自那种老派奇幻电影的审美——在 CG 尚未被大量使用、所有布景和角色都由手工打造的时代。那种“近乎写实”的感觉对我来说有种超凡脱俗的味道。在这个意义上,我希望遵循 PBR 贴图的规则,同时在颜色和剪影上允许一点风格化。

我先从收集参考资料开始,包括建筑细节、材质、光照、植被和雕刻。我拟定了一段简短的叙事提示,用来在决定道具和整体艺术方向时作为指引。

Breakdown:

在收集景观和植被参考时,我从北加州我住处附近的橡树林地中汲取了灵感。我希望植被呈现出蔓生且略带奇幻的感觉,因此我选用了野三叶草、荨麻和乳蓟这类杂草。

Breakdown:

场景白模搭建

拿到参考图后,我在 Unreal Engine 中设置了初始相机镜头,并搭建了简单的白模,以确定整体比例和构图。如你所见,在整个过程中,我的构图和道具发生了相当大的变化,但这就是我的起点。

Breakdown:
Breakdown:

为了堵住道路,我使用了虚幻引擎的断裂模式。它有几个预设,可用于将网格打散,这对碎玻璃、瓦砾甚至损坏变体之类的东西很有用。这一次,我还没准备好打开 Maya,所以就直接在虚幻引擎里做了。我经常使用虚幻引擎内置的建模模式,从给定摄像机角度创建和调整我的粗模布局。

Breakdown:

当我确定自己喜欢最初的构图后,我把所有内容导出到 Maya,将我的粗模拆分为模块化套件部件。在流程早期定义整体套件有助于我规划时间和策略。当我看到我需要的所有部件后,我就能识别出哪些会最耗时或需要额外研究。下面你可以看到我最终的“动物园”。

Breakdown:

建模/雕刻

我有一些作品比较棘手,比如主树和花环。我需要集思广益,想办法让它们模块化。下面,我将深入介绍我认为最有用的策略。

树木

我的树木需要满足几个要求:

  • 由于时间限制,它们必须至少部分程序化生成,这样我就能为背景树木快速创建变体。
  • 树根需要以自然的方式在岩石堆上延伸。
  • 树干需要雕刻,以契合场景的美术风格。

我首先在 SpeedTree 中制作了作为基础的大橡树。我的石块堆白模充当碰撞体,让根系可以攀附蔓延其上。为了模拟出正确的行为,我设置了两个“力”。第一个是岩石本身,它起到吸引器的作用。我添加了一个曲线函数来改变强度。然后,一个方向力会轻轻地将根系向前向下拉。这种组合在根系之间创造出一些空间,从而形成更自然的轮廓。

我还在树枝周围添加了一个圆顶状的碰撞体,用于控制形状。这对于快速调整很有用。我花了一些时间在 SpeedTree 和 Unreal Engine 之间来回切换,以确保我的树紧贴建筑结构而不会出现明显的穿插,并使用 SpeedTree 的手动工具对单个树枝进行了额外微调。

一旦我找到一棵可用的基础树木,就把它导出到 ZBrush。在那里,我只对树干进行了细分和雕刻,同时把现有的树枝/树根作为参考。这样一来,我就能做出更夸张的过渡,并对形状做一点风格化处理。

对于树根,我没有时间逐一雕刻,所以改用了几轮材质置换。我先用大尺度的 Perlin 噪波,然后用细密的 Perlin 噪波,最后用我的树皮材质的 Height 贴图。效果不如自定义雕刻那么好,但它达到了目的:让树根看起来更邪恶一点,而不像面条。

Breakdown:

除了树干之外,其他所有部分我都使用了 SpeedTree 的 UV 工具。树干很大,所以我使用 RGB 遮罩来进行纹理制作。这让我能够将平铺纹理缩放到合适的纹素密度。

Breakdown:

回到引擎中,我把树枝、树根和树干分别导入。我给树枝和树根的边缘添加了抖动(dithering)效果,这样它们就能自由摆放并融入树干。最终效果看起来相当定制化,但其中 80% 是程序化生成的。我仍然可以回到最初的 SpeedTree 文件,修改树叶、优化树枝,或生成新的根系形态。 

地形

我的整个地形由一个植被面片、一块岩石、两块小石子,以及若干用于过渡并增加地面高度变化的土丘组成。这些土丘是用我已经制作好的植被、小石子和材质组合而成的。为了节省时间,尽可能通过修改或重新排列来复用资产是很有帮助的做法。

Breakdown:

第一步是处理岩石和植被。我在 Maya 中搭建了植被的粗模,并在 ZBrush 中添加了雕刻细节。接下来,我将雕刻模型投射到平面上,并发送到 Substance 3D Painter 进行烘焙/贴图。

除了常规纹理(颜色、粗糙度等)之外,我还创建了一张带有渐变的纹理来驱动风力强度。这让我能够修改默认的“SimpleGrassWind”着色器,其中黑色区域保持静止,白色区域则更加飘动。

Breakdown:

在裁剪植被卡片时,我尽量考虑我希望它们如何变形以及它们生成的频率。如果我希望卷曲有大量变化,我会添加更多边循环。如果我知道它会频繁生成,比如三叶草,我会尽可能保持简单,不产生过多多余的透明空间。我喜欢使用 SpeedTree 的一个原因是它的非破坏性特性。如果项目需要,重新导入叶子或添加 LOD 非常容易。

Breakdown:

我的常春藤使用了与根部相同的逻辑,只不过这里我使用一面墙作为碰撞体,并使用一个向上的方向力。我添加了重力,让枝条产生一些卷曲。通过随机化参数,我能够得到无数种可供选择的变体。

Breakdown:

建筑

我的建筑部分计划是制作一组经过深思熟虑的雕刻,并把它们拆分成多个部件,这样它们就可以翻转过来,在整个场景中重复使用,或者平铺起来用作饰条。在这个过程中,我对雕刻有了很多了解,也不得不丢弃了多个早期版本。尽管有时令人沮丧,但犯错对于熟悉笔刷并提升使用速度是必要的。

Breakdown:
Breakdown:
Breakdown:

为了为我的雕刻创建低多边形网格,我选择使用减面(decimation),这样裂缝背后就能有一些几何体支撑。这是我在 ZBrush 中喜欢使用的减面流程。这些步骤可以避免我在缝隙中产生数百万个多边形。 

  • 确保松散部分已合并/网格是水密的。
  • 减面降低 1-2 级。
  • 以中等分辨率进行 DynaMesh,以压平一些细节。
  • 进一步减面至合理的多边形数量。
  • 投影你的低多边形,以映射到高多边形。
Breakdown:

现在,我来稍微谈谈我是如何制作那些扭曲资产的。当我的低多边形网格烘焙完成并准备就绪后,我把它们带回 Maya,并应用其材质作为参考。我没有像通常那样大幅减面,以便它们能够干净地变形。

接下来,我使用刀具工具切分出一些区域,用来拼装出各种变体。我设计原始网格时就考虑到了它们能够平铺并延伸,这有助于防止 UV 被缩放或拉伸。一旦变形为最终形状,我就使用 Maya 中的“Reduce”功能在需要的地方进行优化。

Breakdown:
Breakdown:
Breakdown:
Breakdown:

纹理制作

纹理制作的第一步是创建一些可平铺材质。我希望尽可能使用雕刻元素,因此我选择了以下方法来实现这一点。

Breakdown:

方法 #1 —— 在 ZBrush 中制作平铺图案,雕刻出完整的 Height map。这个流程很直接——我雕刻了一个平铺砖块图案,并用一个平面烘焙出高度图和颜色 ID 遮罩。随后我用这些纹理在 Substance 3D Designer 中构建其余贴图。

Breakdown:

方法 #2 —— 获取单个模型的 Height map,并用 Tile Sampler 进行散布。我就是这样构建地形材质的。本质上,我只是找出自己已有的雕刻资产,抓取不同角度的 Height map 用于 Substance 3D Designer。对于叶片类 Height map,我使用了 ZBrush 的 FiberMesh 功能。它有一个可供选择的纤维几何体库,比如草。

Breakdown:

我使用 RGB 遮罩来应用大部分材质,这为我节省了大量时间。我发现只需要少量材质,就能通过几次点击调整整个场景的数值。这在打磨阶段尤其重要。

有一段时间,我一直很难让材质获得正确的反射。即使 Roughness 设置得相当低,法线也被夸大了,有些资产看起来仍然很平。为了解决这个问题,我打开了 Unreal Engine 的 Base Color 和 Roughness 可视化模式,寻找需要处理的问题区域,比如过亮的颜色。借助 RGB 遮罩,如果需要,我可以替换整个材质,并且会实时产生广泛影响。

Breakdown:
Breakdown:

对于部分建筑,我结合使用了 trimsheet 和 RGB 遮罩。当我有经常重复的 trim,并且想加入变化时,这是我最喜欢的工作流。我把 UV 拆分成 2 套。

UV Set #1 —— Trimsheet —— 在变形前创建 —— 如果 trim 被复制或修改过,通常会有重叠 UV。这套用于法线。

UV Set #2  —— 变形后的资产 —— 所有 shell 重新打包进 0-1 空间,确保没有重叠。这套将在 Substance 3D Painter 中用于生成 RGB 遮罩。这个工作流能让你在考虑新位置和环境光遮蔽数据的情况下,为最终资产添加更符合环境的细节。纹理导入引擎后,你可以使用 Static Switch Parameter 在 UV 集之间切换。

另外,如果我确实想使用某个已经完整贴图的 trim,我会用一些 shader 逻辑来添加渐变。例如,下图展示了我的方法:为所有 RGB 资产的底部添加苔藓。由于它使用世界空间而不是 UV,因此会忽略我的 trim 位置。我只是把它与蓝色通道混合,所以不必向 shader 中添加大量额外纹理,而 shader 已经接近极限了。我确实加入了一点世界对齐纹理,以便可以选择遮掉这个效果。 

Breakdown:

场景组装

所有道具创建完成后,替换 blockout 就很容易了,因为我已经建立好了 kit pieces。我可以重新导入给定的网格,场景会自动更新。

这张图展示了我是如何用模块化 kit 部件组装废墟的。事后看来,我会在这个套件中加入一个普通的砂浆网格——那会是一个很好的混合工具。

Breakdown:

主要建筑部件放进去后,下一步是用岩石、土丘和植被将它们融合起来。在决定摆放位置时,我尽量考虑如何最好地框住视觉焦点。我先用较大的岩石和土丘营造出整体的“U”形。我把石堆放在建筑底部,让它们扎根于地面,并沿路径布置,以改变地形高度。我在背景中放置废墟以营造深度,并利用由此产生的引导线来创建次要兴趣点。

Breakdown:

接下来,我用较小的岩石、再是鹅卵石、最后是植被,把这些主要的石堆向外混合过渡。为了实现这一点,我把所有东西都加载到植被绘制工具中,包括岩石,并改变它们的大小和朝向。我经常会阻止该工具绘制到某些材质或网格之上。

这样一来,我就能轻松地在路径石块之间绘制,只把苔藓植被放在我的苔藓材质之上,等等。之后,我花时间手工打磨并绘制材质,以确保过渡看起来自然。

光照

我希望我的光照能实现几件事。我想要斑驳的森林光照、一个明显的视觉焦点、对比鲜明的剪影,以及一种纵深感。我还希望这件作品不仅仅是一幅漂亮的画面——它需要带点诡异感。

在满意之前,我测试了好几种光照设置。说实话,我获得最终效果的方法有点倒着来,但不管怎样,这就是我的流程:

确立视觉焦点

  • 我用定向光照亮了场景的大部分区域。
  • 我配置了天光,并让它偏冷色调。我为场景使用了实时捕获,但偏冷色调的 HDRI 也可以奏效。我觉得冷色调与暖色调的并置正是让这种光照更具风格化/奇幻感的原因。

这就是开启那两项后我的场景呈现出的样子。我的目标是在所有植被和树木上获得一些有趣且逼真的阴影。在之前的版本中,我注意到我的阴影区域缺乏真实感,而且我的最终场景相当暗。所以,我决定先追求真实感,然后再精心处理视觉焦点。

Breakdown:
  • 接下来,我放置了阴影遮挡物来框定场景,并营造出类似暗角的效果。我把它们用在背景树木和前景上。要做到这一点,你可以在场景中的任意位置放置一个投射阴影的网格体,并勾选“Actor Hidden in Game”和“Hidden Shadows”。
  • 阴影遮挡物放置好后,我调整了定向光的源角度,直到获得柔和的衰减效果。
Breakdown:
  • 接下来,我添加了一盏聚光灯,以增强焦点处的光照,并让它稍微暖一些。我的目标是营造一个向外扩散的渐变。
  • 我使用点光源设置了柔和的烛光,以吸引视线并增添更多温暖感。
Breakdown:

强调深度

  • 我添加了细微的体积雾并开启了体积阴影。我想要从地面向上升起的雾渐变,所以把“Fog Height Falloff”(雾高度衰减)提高到 1。
  • 我把雾的颜色稍微调整了一下,以匹配自然光。然后,我通过“Start Distance”(起始距离)将雾向后推,使其刚好从焦点之外开始。

对比剪影

  • 我用了一到两个额外的聚光灯来突出遗迹和主树的剪影。我确保这个效果相对微妙,并且与太阳光来自同一光照方向。
  • 我在关键结构后方放置了雾卡片,前景也放了几张,让整体氛围看起来更统一。
Breakdown:

斑驳的森林光照

  • 我给平行光添加了一个光照函数来制作斑驳效果。这基本上只是一个驱动光照强度的噪波。你可以把任何灰度贴图接入其中。对于我的版本,我将 Perlin 噪波与树枝纹理结合起来,以模拟云层和树木的阴影。
  • 我按每盏灯逐一决定是否使用光线追踪/Megalights。例如,我发现开启 Megalights 会投射出我非常喜欢的更柔和阴影,但副作用是会产生一些伪影。
  • 注意:如果在使用光线追踪时阴影中出现看起来静止的伪影,有时将 Final Gather Quality 提高到至少 5,然后提高主光源上的“Samples Per Pixel”,直到伪影消失,会有所帮助。

额外技巧:增强材质反射

这是我从导师 Jon Arellano 那里学到的我最喜欢的技巧之一。如果你在阳光照射到的地方、靠近地面放置一盏点光源,把强度调低到微妙的程度,并大幅增加衰减半径,你就可以在材质上投射出微妙的反弹光。它会创造出一些漂亮的反射,并让阴影区域更有生气。如果你看下图中的石径,就能看出它带来的差别。

Breakdown:

后期处理/编辑

当我对自己的灯光效果满意后,我渲染出一张图像,并在不同场景下查看它——在我的手机上、不同的显示器上,以及缩小到缩略图大小的图像。我试着考虑这个场景最常被观看的方式。例如,由于大多数在手机上滑动浏览的人会看到一个小版本,我选择比最初认为必要的程度更夸张地处理某些灯光。

接下来,我在 Photoshop 中编辑它,尝试不同的滤镜和设置。然后,我把那次编辑作为参考,调整我的 Unreal Engine 场景以匹配它。有时候,在花时间调整所有小设置之前,有一个视觉指南可以遵循确实很有帮助。 

最终想法与建议

这个过程教会了我很多关于项目管理的知识。如果我能给同行艺术家一些建议,那就是在规划阶段尽早确定哪些东西对你的场景最重要,并经常重新调整这个列表的优先级。我总是试着考虑什么会带来最大的视觉冲击,并先做那些事情。

例如,如果一个材质覆盖了大多数表面并且靠近相机,那就值得花时间让那个材质高质量。同时,我的一些背景树木并不是我最好的作品,但最终你甚至不会注意到它们。其次,如果你的目标是在游戏行业工作,我建议你也了解一下开发方面。最终,当你在工作室工作时,你会与其他学科的人密切合作,你的资产需要为这些目的设置好。

我认为熟悉命名约定、碰撞、LOD、绘制调用、着色器复杂度、为潜在动画准备资产、关卡设计以及其他与玩法相关的考虑因素很重要。这样,你可以从一开始就建立良好的习惯。最后,我想强调社区的重要性,以及让自己周围有其他艺术家的环境。我取得的许多突破都来自获得反馈,以及向我的导师、朋友和同行学习。

特别感谢 Jon Arellano 教会了我许多你在这里读到的工作流程。这件作品真正是协作的成果,如果没有那些支持我、激励我,甚至在事情不顺利时直接告诉我真相的人,我不可能在这个过程中成长这么多。对此,我非常感激!

另外,如果你读到了这里,我真的很感谢你花时间阅读,并祝你在艺术之旅中一切顺利。

Breakdown:

Heather Geiger,3D 环境艺术家

采访者:Emma Collins

相关链接

原文链接:https://80.lv/articles/breakdown-how-to-create-a-dark-fantasy-environment-of-ruins-in-a-forest

喜欢这篇内容吗?