用 Substance、3ds Max 和 Marmoset 制作世界末日地铁

简介
你好,我叫 Sasho Lazeski。我是一名住在德国科隆的 3D 环境艺术家。我拥有数字营销学位以及销售和业务开发方面的职业,但我大部分空闲时间都在使用和学习 3D 环境艺术和一般艺术,试图在游戏行业中取得成功。大约 5 年前,当我开始在 ZBrush 中涂鸦并在 Blender 中移动顶点时,我发现了我对 3D 艺术的热情。当时我确信 3D 工作是我真正想做的,但我不确定选择哪个方向。在其他学科中,我尝试了一些可视化和角色项目,直到我意识到环境艺术是我最喜欢的。您仍然可以在我的ArtStation上看到我的一些旧角色项目。
我对 3D 游戏艺术的热情源于我的童年,我想对许多其他人也是如此。我记得小时候在 PS1 上玩过 Crash Bandicoot、Spyro、Medal of Honor 之类的游戏,以及我如何真正享受这种体验并在这些世界中想象我的真实自我。我认为有机会成为团队的一员,为世界各地的人们通过电子游戏探索和享受这种故事和美丽世界的体验,真是太棒了。

项目动机、故事和准备
我想制作一个场景,通过它我将提高我在模块化和程序艺术方面的技能,即使用修剪表、可平铺纹理、模块化资产集、注意保持纹素密度等。简而言之,我想用一个 AAA 游戏制作管道,但不确定选择什么样的场景。我还希望场景相当大,并有机会根据您在场景中的位置来播放不同的讲故事和情绪元素。我经常去乌克兰旅行,因为无论如何我都使用地铁,所以我总是确保停下来参观基辅的“Zoloti Vorota”地铁站。我总是这样做,因为它是如此美丽和鼓舞人心,每次我在那里都感觉像第一次访问它。从那里我得到了制作那个地铁站的后世界末日版本的灵感,因为除了真的很喜欢它之外,它还有可能实现我想通过这个项目实现的所有目标,我可以自己拍一些照片作为参考。旁注:我建议任何对马赛克和苏联历史感兴趣的访问乌克兰的人参观基辅和哈尔科夫的地铁站。您只需支付一次即可进入整个地铁网络,因此如果您在车站下车然后再次上车,直到您走出城市的网络,也不会产生额外费用。我建议任何对马赛克和苏联历史感兴趣的访问乌克兰的人参观基辅和哈尔科夫的地铁站。您只需支付一次即可进入整个地铁网络,因此如果您在车站下车然后再次上车,直到您走出城市的网络,也不会产生额外费用。我建议任何对马赛克和苏联历史感兴趣的访问乌克兰的人参观基辅和哈尔科夫的地铁站。您只需支付一次即可进入整个地铁网络,因此如果您在车站下车然后再次上车,直到您走出城市的网络,也不会产生额外费用。
我为这个场景设想的主要故事是,地上有战争,一个部落在地铁下面避难,在那里他们设法创造了一个能满足他们基本需求的可持续环境,但仍然需要出去和突袭食物和特殊物资。即使在这些最黑暗的时期,人们也没有失去对上帝和彼此的信仰,因此他们已经适应了新常态,并在他们现在称之为家的安全避风港过着平静的生活。

[R eferences
关于参考文献,我使用了三种主要类型和来源:
基地场景(大厅、柱子、马赛克、火车)的原图,包括一些工作人员在那里使用或坐在那里应急和维护的道具和结构。
受苏联影响的后世界末日游戏,如 STALKER 和 Metro Exodus 。我只是在谷歌上搜索了这些,特别是在寻找具有不同构图、颜色和照明的镜头,我以后可以将其用作场景中每个区域镜头的灵感。这些也帮助我提供了关于讲故事和道具的想法,以在每个领域强制执行。
其他苏联地铁站的在线参考,如俄罗斯、哈萨克斯坦、格鲁吉亚、乌兹别克斯坦等。在这里我发现了有趣的元素,这些元素有助于保持一致性并增加对场景的兴趣,如大理石材料、自动扶梯、摊位和其他道具。在谷歌翻译的帮助下以每个国家的当地语言搜索这些内容,让我有更多的参考资料可供选择。我在纯参考中收集了我所有的参考图像,给每个组一个单独的部分和一个标签,以帮助组织,因为我最终得到了大量的图像。

专业指导
在构建场景的第一次迭代过程中,即最初的 Zoloti Vorota 地铁站,我参加了Clinton Crumpler 的模块化环境 CGMA 课程这对我确保我按照最初的预期以模块化方式高效工作有很大帮助。克林顿每周都在回顾现场进展,并在录制的视频回顾中解决我的所有问题,现场文件发送给他,这为我节省了很多时间自己寻找答案并彻底解释手头的整个主题. 这是一次很棒的学习经历,我会向任何想要在虚幻引擎中构建模块化环境的人推荐该课程。当我决定在场景中添加后世界末日的感觉、讲故事和情绪时,我进行了第二次也是最后一次迭代。在这里,我得到了来自超越范围的Timothy Dries 的大量宝贵意见和帮助 社区,他太友好了,没有给我他的反馈,也没有和我讨论关于如何装饰场景以使其达到想要达到的水平的想法。

封锁和计划
在收集了场景的参考资料后,下一步是封锁。正确设置场景比例和比例很重要,以便为您以后的工作提供适当的基础。由于在我的案例中的基本场景是我稍后会填充的现有地铁站,因此封锁部分并没有花费太多时间。我自己做了一些粗略的测量,并设法在网上找到了一些显示车站尺寸的草图。在这个阶段,我挡住了车站的大厅、柱子、墙壁和栏杆。
为了让您在虚幻引擎中处理块状网格时更轻松,请确保 UE 中的单位与 3D 软件中的单位一致,而 1 个单位等于 1 厘米,因此您导入的资产将具有适当的比例。您可以在 The 3D Tutor 的这个视频中看到如何做到这一点。另一个救生员是在网格上工作,这意味着导入资产时将枢轴设置为角或中心点,并在 UE 中启用捕捉,这将使您能够将墙壁等模块化资产完美地组合在一起。最好的教程是杰西卡·赫尔格森( Jessica Helgesson ) 的这个教程. 例如,这里有一些我在场景中使用的模块化资产,它们彼此相邻并以红色显示,您可以在其中为它们设置轴心点,以便它们可以轻松复制和对齐。
最后,建议使用稍后可以轻松转移到装饰板或瓷砖的尺寸,例如 2×2 米,具体取决于您为场景计划的纹素密度。使用遮挡可以让我们对比例有了一个相对的了解,因此我们知道如何使用我们应用的纹素密度将该信息适当地传输到纹理和修剪表。
我将 3ds Max 用于我的块并预先直接在 Max 中测试网格上的捕捉,所以我确信以后当我将它导入到 Unreal 中时它会正常工作。从那里我继续导入各个资产并将它们拼凑在一起,直到我准备好主厅、柱子、墙壁和栏杆。这是我在 3ds Max 和后来的 UE4 中测试时的样子。
为了让自己井井有条,我使用印象笔记,在那里我写笔记、处理“待办事项”、跟踪时间并基本上保存我认为重要和/或有用的所有信息。以下是如何在 Evernote 中创建待办事项列表的视频示例。

考虑到 Texel 密度、程序性和模块化的建模和纹理

纹素密度

在准备好遮挡之后,是时候考虑我将用于场景的纹素密度,即给定网格上的纹理分辨率量。我决定采用 5.12 texel 密度(4 米空间的 2k 纹理),这在第三人称游戏中很常见,并且足以满足我想要达到的细节水平。这是我用作参考的Leonardo Iezzi的一篇文章,其中涵盖了您需要了解的有关纹素密度的几乎所有内容。您还可以查看Anthony O Donnell的免费文章。
您可以确保与 texel 密度一致:

手动- 在具有所选标准尺寸的参考平面上应用棋盘格纹理,例如,具有 5.12 纹素密度的 2k 棋盘格纹理的 4×4 米平面。然后使用相同的棋盘格纹理手动缩放所有其他对象的 UV,直到棋盘格图案的密度与平面匹配。
使用脚本或工具- 建议使用此方法,因为它更快。一些软件包甚至集成了这样的工具,尤其是在较新的版本上。我使用了 3ds Max 2018 而不是,所以我使用了Texel Density Tool 插件来帮助我解决这个问题。还值得一提的是,美术师不应该过多强调这一点,因为映射修剪有一些摆动的空间,这意味着我们可以将 UV 岛上下缩放 20-25% 以适应修剪纹理,只要它在视觉上不太明显。
鉴于场景的大小,我尝试尽可能多地应用平铺和修剪纹理,以节省时间并在场景的各个部分保持一致。因为我的网格被设置为真实世界的比例并且我想知道使平铺和修剪纹理空间有多大,所以我使用了 UV 岛作为参考。修剪最常见的是方形,如果您使用正确的纹素密度,UV 岛将完美契合。但是,如果您正在处理不均匀的资产,例如 4×2 米,修剪 4×4 米,并使用“蝴蝶”技术来处理该资产 – 在网格上添加额外的边缘并翻转 UV,以便它完美地平铺在资产上或到给定的边缘,如下例所示(只需观察红色大正方形中的平面以及纹理如何从红色矩形中的边缘切出)。
下面我将进一步详细介绍我如何处理场景中的特定材料,但是根据经验,我使用 Marmoset Toolbag 进行烘焙,使用 Substance Painter 处理大多数独特资产,使用 Substance Designer 处理大多数平铺和装饰板纹理, Photoshop 用于快速调整,例如我在网上获取的 alpha 和输入纹理以及其他所有内容的组合。对于马赛克,我结合使用了 Photoshop、Materialize 和 Substance Painter。以下是我在整个场景中使用的一些最突出的平铺和装饰材料,我将在下面的文本中更详细地介绍它们。

修剪表
我在场景中使用了大量的装饰板来节省时间并加强空间的一致性。为了创建它们,我事先做了一些计划,这让我很好地了解每种材料需要多少空间才能在其中表现出来。在这个阶段,如果我想让自己更有条理,我喜欢使用 Photoshop 来用颜色标记我的修剪计划,甚至可以使用思维导图。

图块纹理和顶点绘制
对于图块,我主要使用 Substance Designer。在这里,我会推荐 YouTube 频道“ Get Learned w/ Chunck ”,因为我使用了 Chunck 的不同教程来创建我自己的纹理。一旦您掌握了在 Designer 中创建的任何材质背后的逻辑,就可以轻松调整节点以实现您想要的结果。例如,如果您找到有关厨房瓷砖的教程,您可以通过主要调整现有节点轻松地将其转换为地砖。3DRedBox 也有一些不错的,在那里我找到了帮助我创建铁丝网的教程。
现在是准备一些顶点绘制材料的时候了。顶点绘制在应用它的资产上混合了多个材质集,这通过在资产顶点上使用 R/G/B 进行绘制来控制。通道输入可以单独或同时组合绘制,直到达到您的目标。这是我的设置的一些照片,但为了仔细观察,我推荐本教程来帮助您了解其背后的逻辑。
对于其他材质,我有一个非常基本的主材质设置,但它对我有用,因为它使我能够从中创建材质实例,我只需替换它们将要应用的资产的纹理输入贴图。Ryan Manning 在此处详细介绍了该主题。
每当处理不带有顶点涂料替代品的平铺纹理时,我都试图小心不要让它们明显地平铺。这意味着纹理上的任何一点,如垃圾或污垢都不应该太突出,因为这样一来,当它们稍后被分配到场景中的大型平铺空间(如地板或墙壁)时,就会很明显。
因此,如果我需要应用任何变化,我会使用贴花或应用顶点绘制。以下是我采用顶点绘制方法和随附的可变材料的一些示例:
地板(干净、脏和脏/湿)——我使用 Substance Designer 创建这些材料,Kalyson 的灰色地板材料在前面提到的基础和逻辑中派上用场,然后将其转换为地砖类型我需要我的项目。由于我在一个项目文件中包含所有节点,因此在节点网络的末尾我使用了“ multiswitch ”和“ multiswitch grayscale ”节点,我分别插入了 Albedo、Normal、Roughness Maps 等的所有 3 种变体,因此我可以只需通过多重开关快速切换输入,即可相应地导出每个纹理包。
木结构(明亮的、深色的和涂漆的)——对于我用作基础的木材,我使用现成的反照率木材纹理,我在 Photoshop 中对其进行了编辑以使其成为瓷砖,然后通过添加污垢和油漆创建其他变化,然后提取其他在 Designer 中从中提取基本纹理。这将在下面的“资产套件 – 木结构”中更详细地阐述。
顶墙(干净、脏/发霉和脏/定向)——与地板类似,我在 Sharpstance 的混凝土材料教程的帮助下使用 Substance Designer 创建这些材料。

资产套件
为了节省时间,考虑到我计划在整个场景中重复使用的对象,我决定创建各种资产套件。以下是我在整个场景中使用的一些套件:

木结构——我创建了一个基础木结构模型,以及它的另外两个具有不同 UV 布局的变体,从底座旁边的一侧堆叠和重复使用。然后我在结构和梯子上应用了一种带有干净和涂漆版本的顶点油漆木材材料。对于木质材料,我使用了在 textures.com 上找到的平铺纹理,然后在 Substance Designer 中为顶点绘制变化添加了一些颜色叠加。我在 3ds Max 中用样条线创建了绳索,然后在 Substance Painter 中借助一些可用的集成图案应用了绳索纹理。
衣服- 我在 Marvelous Designer 中做了一些基本的衣服(G Tutorial 的快速教程),并从杆子的顶部向下模拟它们,因为我打算将它们挂在电线上或稍后将它们放平。然后我对它们进行纹理化,并在 alpha 或手动绘画的帮助下放置一些孔和撕裂作为不透明贴图。使用 Marvelous 很有趣,也用于垃圾袋、床上用品、窗帘、枕头等其他资产,我向没有尝试过的人推荐它。有很多关于所有这些事情的 youtube 教程。当你把补丁缝在一起时,你需要像裁缝一样思考,我发现这非常有趣和平静。
斑块——我从谷歌搜索中收集了一些真正的苏联斑块,并将它们保存在纯参考文献中。然后我在 Photoshop 中以地图集的方式将它们分布在 2k 画布上。首先,我取出所有颜色并使用级别仅从所有颜色中获取措辞。从那里我在 3ds Max 中创建了一些斑块模型变体,使用我在 Photoshop 中创建的基本纹理的尺寸。我在 Substance Painter 中导入了所有内容,在那里我对斑块进行了纹理处理,并使用 Photoshop 纹理作为法线贴图文本缩进的蒙版和文本着色蒙版。在此之前,我还创建了一个颜色 ID 映射,在 Substance Painter 中使用黑色遮罩轻松组织文件夹,并使用“按颜色选择遮罩”快速隔离每个斑块。
调色板——我雕刻了几块木板和一个角立方,在它们的低多边形版本上烘焙普通细节,然后从这些木板和立方体组装 3 个调色板版本。对于纹理,我在 Substance Painter 中使用现成的“胡桃木”材料作为基础,添加了一些污垢、边缘高光、颜色变化以及 Painter 提供的一些垃圾作为黑色遮罩、一些额外的正常细节和指甲印章顶。
我为整个场景中的其他资产创建了类似的工具包,例如石棉和金属屋顶、海报、地图、其他纸张以及上面在“修剪表”部分下提到的储物柜工具包。我的建议是在你不准备英雄道具的时候尽可能多地使用它们来节省自己的时间,特别是对于更大的场景,事后看来,我也可以在这个场景中使用更多。

独特的资产
对于我想应用独特纹理的其他资产,我要么使用标准的高到低多边形烘焙过程,要么使用中多边形工作流程来节省时间并避免烘焙,在那里我使用面加权法线脚本来实现平滑看起来几乎没有手动顶点法线调整。沃伦马歇尔在这里很好地讨论了这个话题. 与 texel 密度插件的情况一样,默认情况下,该插件也随新版本的 3ds Max 一起提供,它要么是一个插件,要么已经集成到其他 3D 软件包中。FWN 通过将顶点法线更改为垂直于较大的平面多边形来改进模型的着色,而无需从高多边形模型中烘焙该信息。例如,这是我使用该工作流程创建的手风琴模型,尽管事后看来我可以对其进行更多优化:至于标准的高到低多边形工作流程,有时我直接使用 3ds Max 中的高多边形,而在其他情况下,我需要创建更多细节,而这些细节在 Substance Painter 中直接创建更具挑战性,我使用的是 ZBrush。床垫就是这种情况,我在 ZBrush 中创建了高多边形,从烘焙开始,我通过弯曲和展平低多边形模型创建了几个版本,无论是放在柱子上的床垫,还是更平坦的版本我用于医疗区的病床。
对于 Substance Painter 中的纹理,真正有帮助的是烘焙 ID 贴图。有了这个,我可以轻松地掩盖纹理的特定区域,如内海绵、外布和轮辋橡胶,而无需手动进行。对于为床垫布料添加的正常细节(不考虑污垢和其他细微效果),我使用了垃圾点、方向性噪声 4、六边形三角形边框和 Substance Painter 布料材料作为基础。然后我用 Levels 节点控制每个的强度,使床垫达到我满意的细节水平。

贴花
贴花是我们可以在整个场景中添加的叠加效果,我们希望在其中添加额外的细节或讲故事的元素。为了演示它们是什么以及如何使用它们,这里有一个小视频解释了如何在 ZBrush 的帮助下创建普通细节贴花以及如何在 UE4 中使用它们。贴花也可以像任何其他材料一样具有其他信息 – 正常、颜色、粗糙度等。一些典型的贴花候选者可能是例如血迹或油漆污渍、墙壁裂缝、弹孔、污垢和灰尘。它们还可以用作涂鸦等表面文本的叠加。在未点亮模式下,您可以看到我用红色复选标记标记的一些地方,我在这些地方使用了贴花——房间名称、入口说明、污垢和渗漏、墙壁裂缝和血迹。
对于大多数贴花,我使用了 Substance Designer,这次引入了不透明贴图,它控制将显示的部分以及不显示输入纹理的部分。对于文本,我只是使用 Photoshop 创建了被重用为颜色和不透明度的纹理——因为它是黑色背景上的白色文本,我也将它用作那些特定贴花中的不透明度贴图。这是 Ryan Laley 的视频,演示了如何在 UE4 中创建贴花以供参考。最后,我还使用了一些 Quixel Bridge 贴花,最显着的是“沥青裂缝”和“损坏的混凝土”用于降低不透明度的墙壁,以补充我已经在那里设置的顶点油漆材料。
我还使用了其他外部资源,如 Google Images 和 Textures.com,它们帮助我找到输入图像,从中导出各种贴图以创建材质或 alpha 用于纹理,这些都帮助我更快地完成了我的项目。

马赛克和物化
对于马赛克,我首先使用 Photoshop 编辑了我在 Zoloti Vorota 站找到的马赛克的真实照片。由于我使用了部分、侧面和有时倾斜的图像,我首先将它们“粘合”在一起,然后取出光信息,所以我只剩下颜色数据,以便稍后在其他地图中添加其他信息。最后,我进行了转换,使马赛克适合矩形形状,以便以后完美地布置 UV。对于条纹马赛克,我还在 Photoshop 中进行了额外的编辑,以便它们在侧面平铺。
一旦我对我创建的反照率感到满意,我就使用Materialize从它们中提取额外的贴图。Materialize 是一款免费软件,可从输入图像生成纹理贴图(即高度、法线、AO、曲率等)。通过对 Materialise 提供的滑块进行一些调整,我得到了我想要的法线和 AO 贴图。我对所有马赛克都做了同样的过程。
从那里,我在 Substance Painter 中获取了所有这些输入贴图,必要时烘焙了其余的输入贴图,并在那里完成了纹理处理。我没有在 Substance Painter 中做任何太花哨的事情。主要是我玩弄粗糙度并对反照率做了一些小的颜色调整。
当我为入口处的大马赛克制作相同的过程时 – 登记区,我发现,考虑到我的纹素密度限制,我的初始 UV 设置无法适应 0-1 空间中的 UV 壳,即使我将马赛克分成两半并转动 UV。我本可以破例并为此使用 4k 纹理,但后来仍然找到了使其工作的方法。我使马赛克的两半都适合 2k 纹理,通过重叠它们并共享每一半的右上角部分,并将这些部分“粘合”在一起以形成反照率,如下所示。这样,UV 就可以通过重叠来拟合。我很高兴我的想法成功了,有时如果你相信你会从中获得一些额外的知识和经验,那么经历额外的麻烦是值得的。

照明和最终构图
在遮挡之后,在灯光和最终构图之前,场景经历了三个阶段:

致力于封锁并测试一些占位符材料和低质量的光烘焙
完成地铁站的干净版本并导入一些道具进行测试
根据参考资料将道具和套件组装在一起,并应用新的构图和照明理念
场景照明是这个项目中最具挑战性的阶段之一,因为我对它不满意,因为我对其他 3D 领域不满意,特别是因为这是要完成的室内照明。我的目标是获得一种舒适的心情,但同时表明外面的日子很艰难,生存是生活在里面的人的首要任务。
我使用了很多橙色的煤气灯,并将它们与一些白色到蓝色的电灯和电池灯进行对比,因为他们想节省能源并且很少使用。最重要的是,我应用了一个微妙的蓝色雾,我上下调整了很多,让它与其余的照明方案融合在一起。我试图推动这种配色方案并在整个场景中保持一致,只有少数例外。一般来说,一致性对人的眼睛很有吸引力,您希望避免以任何方式使您的工作看起来太凌乱。
起初,我在场景中散布了太多灯笼,但由于场景看起来太忙,所以几乎取出了一半。我发现最好像处理初始遮挡一样处理照明 – 从小处开始并将后期处理和其他效果保留到最后,否则,它们不仅会决定照明,还会决定您如何对场景进行纹理化,这应该反过来。一旦我对我在场景中放置的点光源和聚光灯感到满意,我就开始调整一些后期处理设置,如曝光、绽放和色调,间接照明强度在房间内有足够的反射以避免完全黑点,和世界设置 – Lightmass。我首先烘焙质量较低的灯以节省时间,只有在对灯光进行重大更改时才进行高质量的烘焙。
作为最后一步,我添加了一些额外的微妙点光源和球体反射捕捉。这是为了突出场景中我希望玩家注意的一些区域,例如马赛克、入口和其他已经没有光线的焦点区域。我将这些灯光保持得非常微妙,因为您希望作为最佳实践,仅在它们的真实来源存在时才添加灯光。因此,如果您决定应用假光,最好保持微妙,因为玩家可以注意到它,这会破坏沉浸感。
关于反射捕捉,除了包含整个场景的捕捉之外,我将更多它们放在水坑和局部闪亮物体旁边),否则存在反射与周围世界不匹配的危险,尤其是在关键物体上。您还可以增加反射捕获的亮度,使反射更亮。这不符合 PBR 标准,因为您不自然地提高了亮度,但是如果您像上面提到的假灯一样谨慎而巧妙地做到这一点,那也没关系。

最后的想法
我真的从这个项目中学到了很多东西,它让我走出了舒适区。对于任何新项目,我都会尝试将我学到的至少 20% 的新技术或经验教训应用到场景中。在我搭建场景的过程中,也能得到行业专业人士的反馈,比如 Clinton Crumpler 和 Timothy Dries,真是太棒了,我从中学到了很多新东西。这是我第一个专注于模块化和程序性的个人项目,特别是在资产和可平铺和修剪纹理方面。话虽如此,我从这个项目中学到的最大教训是熟悉 AAA 游戏和真实游戏制作中使用的模块化工作流程,而不是我通常习惯的独特资产构建和纹理。我很高兴在未来的项目中应用这个工作流程更加自在。
我在项目中遇到了一些挑战。我要指出的最大的可能是坚持不懈地完成它,同时平衡和抵制如此多的新想法,将越来越多的东西添加到最初没有计划的场景中,因为这总是会增加完成项目的时间。由于我目前在不同领域有一份全职工作,因此有时在精神上做好准备并每天花几个小时投入到该项目中也很有挑战性。我还从中吸取了教训——强调计划项目的重要性,优先分配时间,并对你的工作负责。
我觉得我可以在项目中改进很多东西,比如优化资产、照明和总体构图,然而,这是艺术的本质——它从来没有真正完成,我们最终只能称之为完成并继续前进到另一块。当然还有很多东西要学,正如前面提到的,我计划在未来的项目中逐步解决,这也是这个行业的美妙之处。作为一名艺术家,您不断学习——新的工作流程、软件、技术等。
最后,我要再次感谢 Clinton Crumpler 和 Timothy Dries 的宝贵反馈,他们帮助我将场景带到了我想要的地方。此外,我还要感谢 Beyond Extent 社区提供的反馈。最后但同样重要的是,非常感谢 80 Level 让我有机会分解我的项目以及他们为艺术家提供的所有帮助,因为我自己从那里的文章中学到了很多东西。
我希望本文对您的 3D 环境项目有所帮助。如果您有任何问题或相信我能以某种方式为您提供帮助,请随时通过 ArtStation 与我联系。我很高兴与志同道合的艺术家联系和交流,他们对艺术和游戏有着同样的热情!

返回首页

作者 lll

发表评论