创建风格化的战斗视觉特效
介绍
我的名字是 Soenke Seidel,但您可以在网上找到我为“Warby”。我是一名自学成才的技术艺术家。我没有接受过图形学、计算机科学或类似方面的正规教育,但由于这个行业重视你的投资组合而不是任何学位,这对我来说从来都不是问题。
我的职业生涯始于 20 多年前,当时是一名关卡设计师。当环境艺术/关卡设计开始占领世界各地的游戏工作室时,我切换到环境,因为我总是更喜欢创建精美图形的过程而不是设置游戏玩法,即使最终结果同样令人满意。
但我真正的热情一直是性能优化。考虑到这一点,不可避免地,我还需要大量使用 FX 和着色器,因为这通常是您的大部分 GPU 周期都将用于的。当技术艺术家这个词越来越突出时,我就明白了:“这就是我一直以来的样子……只是没有一个词来形容它”。
我参与了 50 多个不同程度的游戏,最著名的项目无疑是 IO Interactive 的两个 Kane 和 Lynch 游戏。我制作了一堆多人游戏地图,还做了一些 FX 和大量的性能优化。我最著名的独立游戏可能是 Codename: Gordon,这是一款用 Flash 制作的 2D 半条命粉丝游戏。Valve实际上在平台上没有第三方游戏的时候在Steam上发布了它。如果您下载了 Steam 并且没有半条命 CD 密钥,那么它是您可以在那里玩的唯一游戏。
我目前在 Deep Silver Fishlabs 从事科幻太空射击游戏 Chorus 的工作,而且我总是至少有一个未宣布的独立项目烹饪。https://www.youtube.com/embed/D_GSWY9TIoY
程式化的战斗视觉特效:项目理念
在一个人的投资组合中展示性能优化工作是相当困难的,并且通过一些夸张的视觉效果进入大门总是容易得多。我认识和喜爱的所有 FX 艺术家在他们的作品集/FX 卷轴中都有这些“2 球格斗”演示场景,我感到有压力要遵守这个新形成的标准以保持自己的就业。另外,我有一份文档,其中包含我想深入研究的技术艺术主题。里面有这样的东西:
- 试用 Quixel Megascans
- 使用 EmberGen 实时流体模拟制作动画书
- 在风格化效果方面做得更好
- 从头开始创建流图着色器,无需使用开箱即用的材质函数
- 了解如何制作视差贴图着色器
一个条目是:“逆向工程师塞尔达:荒野之息旋转云溶解。它看起来像一本手工动画的翻书,但事实并非如此!”
因此,一年多前,当我开始 Combat VFX 项目时,我的任务目标是制作一种风格化的效果,让我在未来再次受雇,并使用流程图和任天堂在其 BotW 云中使用的相同技术。用一块石头杀死四只鸟……因为时间是比金钱更宝贵的资源,永远不要让任何人告诉你!
为了收集参考,我使用 Nvidia Shadowplay 从 YouTube 上录制了一些 Breath of the Wild 镜头,并使用 Avidemux 从视频中提取了各个帧,以便我可以轻松地逐帧循环播放云溶解。
我还投入了守望先锋并为每个英雄录制了所有战斗效果的视频。为什么要守望先锋?好吧,除了这款游戏看起来令人惊叹并具有游戏中一些最美丽的色彩组合外,我认为整个“2 球体格斗”的事情都始于英雄联盟的 FX 竞赛。守望先锋是我真正知道和喜欢的最接近的模拟!自上而下的相机视角和间接控制不适合我。
分析守望先锋和塞尔达传说的效果
事实证明,守望先锋的效果比我预期的要简单得多,毫无疑问是为了保持高帧率和游戏可读性。
塞尔达云漩涡有很多东西在发生,每个精灵似乎有两个不同的纹理层,第一个在分解过程中显示第二个。但有趣的是,第一个纹理在溶解之前被流图/UV 噪声扭曲,看起来像是一个连续的运动。这种效果有很好的时机。我毫不怀疑,创作这些流图和溶解遮罩的人对传统的 2D 动画有着深刻的理解,并且可以轻松创建外观相同的翻书纹理。我认为他们选择了基于着色器的解决方案,因为 Wii-U 和 Switch 在像这样的大型游戏中受到严重的内存限制。
这种效果非常非常规的是,BotW 云会随着时间的推移加速旋转。通常,对于爆炸或烟雾,移动速度在开始时会很快,然后几乎停止,而旋转会随着时间的推移而减慢或保持不变。随着时间的推移,没有人会加速它们……除了任天堂。
我很高兴在逐帧分析中看到他们使用了流程图。这意味着我可以从待办事项列表中杀死另一只鸟。
我总是听到包括宫崎骏等大师在内的人感叹,这么多艺术家只是以现有艺术为参考,在这个过程中一切都变得同质化了。他们说应该多出去走走,以自然为参考……也就是说,我不确定人们会去哪里看到现实生活中的爆炸,尤其是科幻/幻想/超自然类型的爆炸。
第 1 个,共7 个
创建战斗 FX
计划是有枪口闪光、弹丸、撞击和爆炸,因为这些在任何动作游戏中都是基本且无所不在的,因此几乎适用于我想与之合作的任何工作室和项目。后来添加了小小的充电介绍和火热的后果。
每个独立开发者总是被建议“把玩具放在第一位”,意思是让你的“东西”变得特别的东西,从它开始,给它最多的时间和注意力。对我来说,那是爆炸,因为它拥有我以前从未使用过的最有趣的技术。https://www.youtube.com/embed/P2oAw-60_k8
接下来,我制作了弹丸,它们只是四个不同的弯曲多边形条带,它们具有滚动/平移的 alpha 蒙版纹理。它们会围绕它们的前轴随机旋转生成。我稍微减少了随机旋转值的范围,因为有时拱门会夹在地面上。两条带实际上像十字架一样交叉。现在想想,这几乎使这种效果无法在第一人称游戏中使用。如果这必须在实际游戏中实现而不仅仅是在 YouTube 视频中实现,则必须以非常不同的方式处理射弹可以覆盖的距离 – 通过缩放前轴上的网格以覆盖到撞击位置的可变距离或与纹理到达条带末端所需的时间同步向前移动它们。在这里,我只是享受固定固定距离目标的简单性。我怀疑很多这些“2-sphere FX”卷轴视频只能在固定距离下工作,这很好,但我认为如果有人在求职面试中问你需要改变什么才能使其在现实世界中工作,你最好准备好一些答案。https://www.youtube.com/embed/F2xoOrKE_DE
接下来是枪口闪光。我重用了爆炸云中的流动贴图溶解着色器,让它有一点翻书的感觉,并让手绘的枪口纹理在几帧内变形。这很微妙,但我认为它有效。
导弹弹幕起源于一个地点,但立即向不同的方向飞行,而枪口闪光呈严格的前倾角。它看起来很奇怪,我通过复制粘贴一堆枪口闪光的角度来解决这个问题,这些角度大致对应于可能的随机导弹方向。
默认情况下,Unity 每次播放 FX 时都会使用随机生成的种子。因为这个项目是为了一个视频,我不想给任何机会留下任何机会,所以我为所有 FX 手工挑选了种子。使枪口闪光的种子与射弹的种子一起播放非常耗时,但它得到了回报。另一种方法是捕获数百个视频并选择具有最佳随机种子的视频,但谁有时间呢?同样,这不是您可以为实际游戏做的事情。
我不知道为什么,但从枪中弹出的炮弹是我通常作为枪口闪光的一部分所做的事情。Unity 允许粒子与世界(或者只是一个便宜得多的地平面)碰撞,并让东西“半物理地”反弹。炮弹上还有烟迹和热光,这是我以前从未做过的事情。这是受到一个名叫 Gunship MK2 的人的启发,他用更酷的电影 FX 为旧的《半条命》游戏拉皮条。我认为它被称为“MMod”。 https://www.youtube.com/embed/J4owiBkH-XI
接下来是撞击,因为弹丸和爆炸没有因果关系。我截取了球体的屏幕截图并在其上手绘了裂缝,以找到我喜欢的残骸形状。然后我在 Maya 中切割球体,将其分成不同的块,并制作一个网格来表示从内部穿过裂缝的小光束。再一次,如果您的冲击和损坏反馈 FX 必须适合 100 个不同的动画骨架网格物体,那么这可能是您无法逃脱的。您可能不得不接受光辉会在随机位置达到峰值。
实际的火花和尖刺与枪口闪光完全相同,只是具有不同的纹理和不同的生成角度。始终重用您拥有的东西!否则你将永远完成不了任何事情!
至此,所有“必备”功能都完成了。我对 Unity 项目进行了一些测试构建并捕获了 Shadowplay 视频。可能有更专业的方法可以从 Unity 中获取视频,但这对我有用。我觉得整个事情的时机不知何故。视频开始了,在观众有机会在场景空间中定位之前,地狱已经开始崩溃,一切都已经结束,VLC 跳到了视频结尾的黑框。我立刻知道我需要更多的呼吸空间,但由于这是一个 FX 视频,不可能有 5-10 秒与 FX 无关的虚无。
这就是介绍/充电和火热的后果想法诞生的地方。我再次查看了许多其他 VFX 艺术家的作品集,看看他们是如何将充电可视化的,普遍的共识似乎是抽象的东西需要飞向正在充电并被某种反向打断的主题冲击波圈。我该和谁争论呢?它绝对在视觉上推销了主题像海绵一样吸收东西的想法。
我还制作了一个新的着色器,看起来它会扭曲帧缓冲区,但实际上发生的是精灵使用已经存在的像素作为纹理,然后我们应用一些 UV 噪声或流图来扭曲它。这是一个和可编程着色器一样古老的技巧。但即使在高端 AAA 游戏中我仍然看到的一件事是:人们使用单通道纹理的值(0 到 1)作为偏移量。它在大多数情况下都能完成工作,但您的失真现在仅限于将所有像素推向一个方向,可能是向右(u+ 正)。在这里使用推送确实是一个错误的类比。采样的像素被偏移,所以它更像是拉而不是推。如果使用两个通道并偏移着色器中的 RGB 值以占据 -1 到 1 范围,则可以向上、向下、向左“拉”像素,
既然我有了这个着色器,我就有了在任何地方使用它的冲动。我在球体周围的地面上添加了小冲击波,并添加了由爆炸引发的大冲击波。
最后缺少的部分是火和烟。通常,我会使用预渲染的 Maya 流体动画书来做这样的事情,或者从存档中提取已经存在的纹理。但由于塞尔达云有这种强烈的“手绘传统 2D 外观没有翻书”的主题,我想加倍努力。所以我选择复活我多年前从分析 Guacamelee 中学到的我最喜欢的技巧!:
制作一个纹理,在三个 RGB 通道中具有三个不同的蒙版——火焰的底部在一个中,火焰的左右“侧面”但作为一个垂直条。然后使用着色器代码向内旋转这两个侧面,直到它们在顶部相遇。使它们以不同的速度平移/滚动,然后……瞬间开火。面具也有一个朝向内部的渐变,具有不同的截止阈值,它们增加了一些更明亮的内部火焰。
如果您是 FX/Shader/Tech 艺术家,我相信您熟悉使用 UV 噪声通过在从纹理采样之前在 UV 坐标上添加/滚动随机纹理噪声值来使东西摆动的概念。不好的是,这是你在着色器网络开始时必须做的事情,而当一切都结合起来时,你不能在最后做。但是您可以通过使用镶嵌平面而不是精灵然后让噪声驱动顶点偏移来实现类似的效果。这就是我在这里创造风的方式。https://www.youtube.com/embed/LLAa1p3o2tw
烟雾只是三个手绘层,使用相同的顶点风技巧向上平移。我尝试使用 Unity 的色带,但就像 Unreal 的一样,如果单个控制点的速度存在任何随机性,它们会立即分开。它只是不适合任何看起来像是受风影响的东西。https://www.youtube.com/embed/dkX_xpN_3KA
在这一点上,我开始进行许多小规模的润色更改,这些更改一直困扰着我,但我怀疑其他人甚至会注意到它们。例如,我为爆炸云选择的种子会留下一些小区域为空,并且没有产生足够的体积,所以我制作了一个新的发射器,它会喷出一个精灵来填充屏幕上的那个小空间。我真的开始在这里直接播放相机并引入了一些强制透视调整以获得更好的屏幕构图。例如,这两个球体实际上不在同一高度。
我实际上已经完成了,但我已经在网上发布了足够多的内容,我知道只要你按下发布按钮,你就会发现一些可怕的错误。相反,我选择了多一轮反馈,然后在这个反馈上坐了一个星期,真正地深思熟虑。我将视频发送给了我的一群精通 FX 的朋友和我认识的实际上在暴雪工作的人(有些甚至是守望先锋)。反馈很明确——效果看起来很酷,但爆炸云很糟糕!
必要的牺牲
最大的挑战是逆向工程着色器和一堆基于压缩视频帧的纹理贴图。即使我确定我在正确的轨道上,而没有实际看到使用的着色器代码和贴图,但我永远不会知道质量的增量是我做错了什么,还是只是我缺乏传统的 2D 动画艺术技能。
人们向我提出的所有改进建议都会使其离我的参考更远。你在这种情况下所做的就是“杀死你的孩子”!爆炸云是我心爱的核心,其他一切都只是为了支持它,现在它是整个视频中最弱的元素。我所能做的就是尽量减少损害……而不是从头开始。
每个人都说看到一个精灵在哪里结束和另一个精灵从哪里开始太明显了,没有人“得到”旋转的加速,即使时机与塞尔达完全相同。我将它全部缩小,将其寿命减半,更快地淡出它,使其边缘更加透明和柔软。我尽可能地不再强调云。
如果您想创建塞尔达效果
如果有关于塞尔达效果的教程,并且除了任天堂还有其他来源,您不妨尝试自己逆向工程。我们都只是在黑暗中拍摄。你的方法和其他人一样有效。
对于初学者 FX/Shader/Tech 艺术家,我强烈推荐Simon Trümpler 的博客。我偶尔会在那里做客座贡献者,有一些塞尔达分析内容就足够了(参见Wind Waker)。如果您正在寻找灵感,我喜欢关注Harry Alisavakis 的 Technically Art Issues。