valorant着色器和游戏清晰度

嗨,我是Brandon“Mochi”Wang,Valorant内容支持团队的软件工程师。当您需要深入游戏引擎的变化时,我们负责从艺术家和设计师那里获取请求。我将谈论Valorant的游戏清晰度,以及我们如何平衡艺术风格,性能和游戏完整性。艺术风格与游戏设计的若干方面有关 - 有时它意味着影响光/黑暗环境中的可见性的着色器,有时它意味着像播放空间和偏离屏幕杂乱的细节中的UI考虑因素。

我专注于着色器,这是计算机图形学的重要组成部分,我的专业领域。着色器是大多数人考虑游戏的图形的程序 - 如何在GPU上运行的程序采用场景/游戏数据,并在屏幕上创建像素。因为工程,艺术和设计的交叉来说,我很高兴谈谈这一点是我的个人对我的热情。

余额

视频游戏的计算机图形有一个简单的目标 - 创建一个视觉代亚博论坛表世界的图像。这提出了许多其他更复杂的问题 - 例如,我们如何最好地研究计算机内的物理学。带着着色器,我们基本上模拟了光物理。

这可能是具有挑战性的,因为游戏具有紧密的性能要求 - 每个帧必须亚博论坛以6.9毫秒或更少或更少渲染到144 FPS质量棒。着色器必须削减角落和假效果,所以我们经常发现自己制作一个关键权衡:现实主义与表现。并记住,Valorant是一个有竞争力的游戏,所以我们还需要考虑现实主义和表现因素如何融入竞争性的完整性。

整个三角形

您在Valorant游戏中看到的一切都使用着色器在屏幕上呈现像素。我们的三个valorant主要支柱是上述三个元素 - 性能,竞争诚信和艺术。我们希望确保我们同样地击中这些支柱,以创建一个具有竞争力和极其性能的视觉上吸引人的游戏。

每个游戏都有不同的柱子,具体取决于开发团队试图实现的目标。对于valorant,我们选择了这三个支柱,因为最重要的(而不是说,现实主义,沉浸或电影),所以我们希望确保我们在这个三角形中间均匀结束。

确保竞争诚信

valorant目标最低规格GPU是雄心勃勃的 - 它应该在2012年的CPU上综合的GPU运行......所以基本上你在那个时代的薄的轻型笔记本电脑上找到了什么。着色器需要在这种旧机器上运行良好,但是我们需要确保高端机器没有竞争优势。这意味着我们需要确保低,介质和高图形质量设置之间没有差异,可以改变竞争景观。例如,我们在游戏的可玩空间中没有动态阴影,因为人们在较低质量的环境(通常切割阴影)上播放的人会错过重要信息。相反,我们专注于提高可读性。

在较旧的机器上,我们是GPU绑定的,这意味着CPU通常在等待GPU完成它的工作,然后再开始下一帧。在较新的机器上,由于GPU以比CPU更快的速度变得更加表现,因此我们是CPU绑定的。这就是为什么您要在旧机器上拒绝图形设置,以及为什么您不一定会注意到FPS在较新计算机上的设置到高电平的差异。

当我们谈论可读性时,我们考虑了几个类别 - 在缩放质量水平时,我们考虑了材料响应,特定于域的着色器和功能,以便缩短。让我们来看看这些中的每一个,以及我们如何为valorant接近它们。

材料响应

首先,让我们来看看材料响应,以及我们如何在游戏的约束范围内模拟真实的照明物理。

在现实世界中,来自阳光或灯泡等光源的光线在不同的表面上反弹,在每个反弹上改变特性,使得当它击中眼睛时,将其注册为在特定方向上看到某些颜色。这是我们必须假装的物理类型,我们通过简化三个主要成分:弥漫,镜面和环境。

扩散创造了哑光/垩白的感觉。

镜面创造了一个闪亮/塑料的感觉。

周围是间接的光,即使出于阳光直射时也会照亮一切。

我们以独特的方式在Valorant上创建环境光 - 以后更多。让我们首先看看弥漫和镜面光线,为什么他们很重要,以及我们如何模拟它们。

扩散

材料的“漫反应”响应基本上产生了哑光外观。

真实世界的例子:

粉笔,普通纸

兰伯蒂安的反思

我们在这里借用的物理术语来描述光的行为是“兰伯蒂安的反思“ - 广泛的照明,不依赖于您从中查看它的位置。在代码中,我们代表这一点,其中“光”是朝向光源的方向,并且“正常”是直接从表面外面面向的方向。这是一个点产品,基本上意味着在直接面向光的表面上总是更亮的外观。

在下面的图像中,我们只是使用在每个模型上。这是遮罩物体最基本的可视化。

表面的遮罩部分。最基本,常见的漫射照明类型。

半兰伯特

Valorant在一个叫做半兰伯特的概念上建立了浅色。这是第一个由阀门为TF2创建,并用于高度风格化的游戏,使黑暗区域感觉不那么黑暗。亚博论坛

半兰伯特灯光。

梯度兰伯特

Valorant的半兰伯特的延伸认识到我们希望远离光线互动的近乎现实物理,而是从艺术阴影原则借更多。

此实施允许我们借用传统艺术阴影的概念。

在传统的半兰伯特以恒定的数量亮起对象的核心阴影,valorant的延伸将在亮点,中音和核心阴影中提供亮度控制,并允许艺术家根据偏好照亮或变暗。我们进一步迈出这一步,允许艺术家甚至修改它们之间过渡之间的大小和位置。

这是通过重新映射的代码中完成的到A [0,1]范围,并使用该范围以在梯度纹理中进行另一个重新映射。由旨在以交互方式创建这些纹理的UE4发动机修改产生梯度纹理。在此视频中,您可以看到艺术家使用我们的一些UE4控件调整着阴影。

这种技术使我们能够避免多个动态灯的性能成本 - 在valorant上,我们使用单一的光和风格,使其掉出来使它看起来很好。

Valorant的梯度兰伯特灯光。

镜面

材料的“镜面”反应最容易被描述为闪亮的亮点。

真实世界的例子:

镜子,金属,光泽

考虑如何在调查镜子或金属时移动头部改变了你在表面上所看到的。我们通过调节表面的金属或粗糙度来控制这种光反射 - 这基本上改变了反射的颜色和突出的形状。

流行方法

旧游戏使用已亚博论坛知为型号Phong Shading.,它具有看起来像的等式,其中“反射光”是在“正常”表面上反射的光矢量。亮点锐化并随着你的观点而移动。

这个明亮的闪亮点“反射”太阳是一个镜面亮点

现代游戏通常会亚博论坛选择一种更复杂的镜面模型,其中有很多,包括Blinn-Phong,和贝克曼

这些是使用虚拟点灯计算的良好的镜面模型。Valorant的方法从使用全景HDR图像的技术源于技术。这使我们可以在我们的场景中具有复杂的镜面照明,而无需添加许多着色器指令,用于计算每个光源的镜面光贡献。

粗糙

与上面的镜面方法的主要区别是它们如何治疗粗糙度。粗糙是大致如何刮削表面,但在微观水平上。这意味着闪亮的铬金属比被刷的厚度较小。每个分析虚拟动态光线方法(PHONG,Blinn-Phong,Beckmann)使用指数函数来驱动它,下降到更粗糙的表面。

如果我们正在使用全景图片,我们在这里做的是一点相反 - 我们想要模糊HDR图像,使其在表面粗糙时较少收到的照明。我们必须在如何将图片与镜面模型表现出来的情况下进行一些照顾。如果我们使用正常模糊,就像高斯模糊一样,它不会是正确的 - 它看起来像模糊的反射而不是粗糙的表面。我们与Beckmann Blur Kernel迷重以保持看起来像亮点的亮点。

这些不同的模块存储为mipmaps.在较低分辨率下的全景图片,我们选择最合适的MIPMAP用于我们表面的粗糙度。

valorant镜面

Valorant使用现实生活摄像头HDR捕获或预先汇位的游戏从级别的几个点捕获。如果材料是非常接近镜子的东西,我们只使用渲染的场景反射,就像范围的玻璃一样。

valorant在这里使用它只要这些全景反射对于大多数情况下的镜面亮点,而不添加任何虚拟灯,这需要需要相当多的GPU计算。我们的艺术家在我们的静态HDR图像上绘制热点,以推动他们想要的突出显示的形状和行为。由于我们的漫反射响应主要由单个方向光源驱动,因此在该光的方向上绘制明亮的亮点,可以在镜面和漫射反应之间造成相干性。

此图像是一家股票HDR Cubemap,我们经常用来添加现实的反思。这里的值在浮点中,因此右边的明亮的白色区域实际上比图像的其余部分更亮了数百次。

此图像中的模型都具有储存对镜面光的valorant的实施。

周围

“环境”光在整个物体上是一个恒定的光,以模拟间接照明。

真实的界限:

阴影不是完全黑暗的,因为光从其他物体反弹,给了一些灯光到阴影区域。

Valorant在传统的方式中并不完全使用环境 - 我们的漫反应已经设计出于使用梯度来完成黑色。为了保持与环境一致的间接照明,我们使用虚幻的间接照明缓存,其在整个场景中输入传入的静态灯光。我们使用这些样本在地图上的任何给定位置测量环境光。

每个动态对象都找到最近的照明样品,并使用它以分别照亮或使物体的漫反射和镜面反应变暗。这些保持分开,因此我们可以使用镜面在较深的区域变暗,模拟出直接阳光。我们还调整地图上每个区域的最大“黑暗”或“亮度”。这样,我们仍然有能够在水平中响应照明的对象,同时防止值过高或太低。

这些图像将不同点亮环境中的相同对象进行比较。

Valorant中的着色器类别

Valorant使用A.转发渲染器,它拍摄每个对象并告诉它完全呈现自己。这允许您使用延迟渲染器的更好照明效果成本的一些专业优化。但是,我们也会获得某些好处,如对VRAM的影响降低,并且具有较低填充率的旧GPU上的性能,并且我们能够有许多不同类型的着色器,这些着色器与相同的输入不同。

我们有四个主要的着色器输入:

  • 字符(第一人称,第三人,以及字符选择)

  • 武器(第一人称和第三人)

  • 环境(由主导物资反应决定)

  • VFX(几乎所有单项为单项)

让我们来看看每个类别,然后潜入一些具体的例子和他们着色器的细分。

字符

在漫射的漫画,镜面和环境的valorant口味之上,字符有很少的额外功能,以便清晰和风格。我们将看一下这些功能中的几个功能,包括朋友或敌机照明,皮肤阴影,纹理和深度调整。

朋友或敌机

要在valorant中添加清晰度,我们添加了额外的照明放牧角度角色(远离你的角度)创造剪影效果。这种光线着色,不同地调整盟友,对于敌人来说,敌人有一个红色菲涅耳,盟友有一个中性的蓝色菲涅耳。

我们调制菲涅耳效应,以防止它过于亮,分散注意力,我们的目标是模仿光束看起来将直接落在角色中的光线。我们通过优先考虑面向上面的放牧角度而不是面向朝下的放牧角度来实现这一点,并且我们在角色的上部区域上显示了更多的效果。

皮肤

皮肤通常看起来像光线的方式一样肉质通过皮肤而不是反射关闭它。这称为地下散射,并模拟这一般的技术通常是昂贵的并且创造了显着的性能成本。在Valorant中,我们使用更多程式化的着色器功能假装自己。

首先,我们修改了漫反缩梯度的颜色,以在较深的区域中创造更多红色。

这让我们关闭,但仍然缺少其中一些模糊/半透明的感觉。我们的艺术家引用了ZBrush的蜡预览材料来解决这个问题。

通过将其解构成具有镜面状反应的褶皱,我们可以调节它在较深区域中具有增加的效果,远离明亮的光线。

字符使用顶点颜色的频道(在网格上播放)以掩盖此效果打开或关闭。使用顶点颜色将我们保存额外的纹理,因为更改足够微妙。

没有皮肤着色器,角色看起来更加赌博。

纹理

以其最基本的形式,字符使用4个纹理:

  • Albedo /碱颜色:表面的一般颜色,这增加了表面变化而不增加几何复杂性。

  • 硕士:金属(突出显示和漫反应),环境遮挡(创建添加深度的阴影),发光(直接显示特定颜色的掩模区域),粗糙度(镜面亮度的形状)。

  • 正常:表面细节没有建模到几何形状中。

  • 梯度

    • 弥漫灯光衰退

    • 皮肤漫射照明衰减

    • 皮肤底布下降

    • 敌人菲涅耳角度

    • 盟友菲涅耳角

我们在这里没有将镜面添加为控制,因为我们发现使用倒粗糙度图作为镜面地图工作很好。我们还装满了AO(环境遮挡)和发光,因为我们很少同时使用它们;低于0.5的值被视为AO,高于0.5的值被视为发射。

深度调整

深度对于角色可读性至关重要,在Valorant中非常重要 - 人物需要总是从他们的环境中脱颖而出。艺术风格的柱子有助于区分字符当你关闭时,但你得到的进一步,细节越突破了。

为了弥合差距,我们的许多效果都是由深度调制的,着色器用于提高可见性的进一步字符。例如,距离中的字符亮起,敌人的Fresnels越来越差异。我们就像我们用环境光/暗控件一样夹紧了这些调整。

让我们来看看这个场景,两个人在不同的距离。

如果你仔细观察,你可以看到远远贤者更加明亮,并且在红色菲涅耳覆盖的她的性格表面上有更多。如果我们调整两个行剧大小,更容易看出它们彼此相邻。

铸造阴影

我们只在第一人称的物体上施放阴影,就像你自己的手和武器。这是为了避免铸造阴影是两种效果的竞争因素(知道您的展示阴影的位置)和性能(低规格机器不能与铸造阴影合理运行)。

武器

武器使用较旧的迭代我们的弥漫性造型 - 而不是使用梯度,我们使用asmoothstep.调制功能

顶部:仅扩散。中间:仅限镜面。底部:全面的游戏内破坏者。

环境

游戏的环境占据了大部分球员的屏幕,因此自然倾向是使它尽可能详细。但是,它需要大多数屏幕意味着我们需要考虑性能影响 - 因此,环境应尽可能便宜。这里的小昂贵调整可能导致巨大的整体富含成本。无论如何,玩家通常是精神上堵塞周围的环境使他们能够专注于角色和能力。

换句话说,我们的环境着色器需要极其优化,以便为其他效果留出房间,同时保持帧的频率在战斗中的热量中。

灯具

照明是在离线环境中完成的,其中包含作为纹理的传入的光和主导方向虚幻的萤火虫。我们将其用于漫反应,并实际上不像我们为动态对象那样相同的方式风格。

通过这样做的离线,我们能够使用我们用于对象的单个衰减光的灯光,这意味着环境艺术家可以以更传统的方式控制地图的外观。LightMaps允许我们做更高级的照明效果(如阴影),因为用LightMaps点亮的物体是在游戏中永远不会移动的物体。

这是我们的灯光中的入射光,由Lightmass计算,没有材料的颜色和纹理。请注意,它比我们动态字符和武器的照明更复杂。

VFX.

视觉效果通常由VFX艺术家控制,并且很少融合我们的照明和材料响应。在着色器上工作的工程师只有在这里有助于系统渲染问题,如烟雾半透明。

半透明排序

半透明排序是一个特别困难的问题,同时仍然保持我们的目标Minspec性能水平。例如,CS:Go的烟雾使用半透明,但莫洛托夫等其他公用事业将意外地显示不可见的人物的剪影,因为它们在烟雾中。

Smoke effects are often created as a camera-facing card - this means the effect looks different to each player depending on where they’re standing, but allows an artist to use a “smoke” texture and have it read like a 3D object in-world. This makes it possible for an enemy to see you without you being able to see them.

为了解决这个问题,烟雾等烟雾的视野阻挡元素具有苛刻的几何游戏边缘,无论观察角度如何看。这确实会导致我们的烟雾看起来非常几何,但我们避免了关键的半透明分类问题。

缩放

我们以不同方式规模环境,角色和武器,因此我们可以在低质量设置上的视觉保真度和性能之间取得平衡。

我们最积极地放弃环境特征,因为他们占据了大部分屏幕,如上所述。对于低质量水平的每个物体,我们可以保持要么它的漫反应要么它的镜面反应 - 但不是两者。我们测量着色器计算复杂性说明或者添加或乘法的基本操作量,着色器需要执行。我们从100到41个指令中缩放到大多数对象,从高度到低质量。

人物需要保留所有游戏机影响功能,所以我们拖放镜面,因为字符不需要闪亮才能读得很好。我们在这里从128到84指令等级。

武器大多是闪亮的金属,所以我们通常会降低漫反应。我们从103到73个关于基础武器的说明。

VFX.

VFX与游戏中的不同物体不同地处理,因为能力VFX彼此彼此如此不同,因此无法始终如一地缩放一切。相反,我们尊重我们的游戏诚信支柱,并要求所有VFX在Minspec硬件上击中严格的性能目标。低,培养基和高质量水平的唯一变化是轻微的化妆品效果。

例如,Omen的烟雾最终是一个阻挡视觉的硬球。在更高的质量水平上,我们添加了粗糙的效果,但这些不影响您与烟雾互动的方式。

测试

由于性能对我们来说这么巨大关注,因此我们在具有不同规格的不同机器上进行了显着的兼容性测试。即使具有既定的建模预算和纹理用法,我们也希望确保我们将游戏保持为表演,因为我们认为我们是。

能力

这种测试对角色能力尤为重要,每个能力都如此独特。我们与第三方开发合作伙伴合作,在低中和中型机器上运行每种能力,并记下其帧。任何问题都由团队中的工程师或艺术家解决,如果问题不可解决,我们与设计师合作以查找备用选项。

SOVA和VIPER的最终态是他们的设计改变为适应更好的性能的能力的例子。

SOVA的ULT.用来绘制大型半透明气缸,以在出现全不透明照明之前展示他的目标。这降低了较低的SPEC机器上的速率显着,因此我们最终切换到形状的线框状薄不透明轮廓。

VIPER的ULT.拥有全屏幕后工艺效果,以限制敌人的视线。这最初是作为一个非常柔和的近视效果,但是我们将其切换到确定视觉块结束的位置的定义范围。

结论

谢谢阅读!在我看来,图形是竞争游戏的一个令人难以置信的有趣方面,因为他们不是主要的重点,我们的目标是让事情看起来很漂亮,而不会妨碍游戏。亚博论坛着色器真的是艺术和工程遇到的地方,以及主要在工程的背景下,我也喜欢挖掘艺术方面。

我希望这篇文章中的一些内容将使您的下一个valorant游戏更加令人兴奋,并且您将能够注意到我们将游戏的一些方式讨论竞争和表现。I’m not the only person working on graphics, nor is any of this a purely engineering effort - I’d particularly like to call out Chris Gillett and Sean Marino from the art team, who I worked closely with to accomplish much of what this article has spoken about.

来自Valorant的发展的我最喜欢的艺术品 - Brandon的着色俱乐部的标志。我在整个游戏中做起着色,所以这是一个跑步的笑话,球队必须定期注册并续签他们的会员资格。

如果这对您有趣,或者如果您想了解更多,请在下面发表评论!我一定会读它们。

发表于布兰登王