65.9K
CodeProject 正在变化。 阅读更多。
Home

游戏公司使用 Intel® 示例代码加快开发速度

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2015年5月26日

CPOL

9分钟阅读

viewsIcon

15865

游戏公司使用 Intel® 示例代码加快开发速度

英特尔®开发人员专区提供跨平台应用开发的工具和操作指南、平台和技术信息、代码示例以及同行专业知识,帮助开发人员进行创新并取得成功。加入我们的物联网Android*英特尔®实感™技术Windows*社区,下载工具,访问开发套件,与志同道合的开发人员分享想法,并参与黑客马拉松、竞赛、路演和本地活动。

所有游戏开发人员,无论独立开发者还是终身专业人士,在某些时候都会从他人编写的代码中受益。无论是为了理解新功能、解决以前无法解决的问题,还是为了节省时间而不是从头开始编写,许可宽松的示例代码都是一种宝贵的工具。英特尔在英特尔®开发人员专区的游戏开发人员部分提供了丰富的游戏示例代码。

图1:英特尔在https://software.intel.com/en-us/gamedev/code-samples 提供游戏示例代码

在过去的几年里,英特尔与许多游戏开发人员合作,优化他们在英特尔®硬件上运行的游戏性能。我们的合作通常会产生一些见解或功能,这些见解或功能应以示例代码的形式与世界分享。有时我们会根据开发人员的需求创建示例,以完美满足他们的需求。在过去的几年里,我们创建的示例已被暴雪和Codemasters发布的几款游戏所采用——特别是自适应体积阴影贴图 (AVSM)、保守形态抗锯齿 (CMAA) 和软件遮挡剔除

AVSM 为 GRID* 2 带来提升

Codemasters 和英特尔工程师在游戏领域合作多年。对于 GRID 2,Codemasters 正在寻找一种方法,以在英特尔硬件上为其游戏提供更强的视觉冲击力。他们与英特尔工程师集思广益,决定使用英特尔的 PixelSync 功能来实现更逼真的烟雾效果。这被认为是赛车游戏中的一个高可见度效果,用户可以通过汽车漂移制造大量烟雾。最初的起点是英特尔工程师 Marco Salvi 的工作,他使用 DirectX 11 创建了 AVSM 实现,并在 Siggraph 2010 上进行了展示。英特尔示例代码使用原子操作来确保独立于顺序的透明度 (OIT)。为了将这项工作应用于 GRID 2,Codemasters 和英特尔工程师合作修改了使用 PixelSync 的算法,使其可以在有限的内存中运行。这个修改版本的有限内存 AVSM 也作为英特尔示例发布。

集成工作在14天内完成,英特尔工程师在 Codemasters 现场协助。当 Codemasters 拥有一个可用的测试级别,该级别使用游戏自身的粒子效果生成 AVSM 纹理并应用自阴影时,初始实现被认为是完整的。完成后,Codemasters 工程师扩展了系统,以支持动画纹理,以更好地匹配游戏的外观和感觉。同时,Codemasters 的艺术家设计了与新技术互补的粒子效果,使用更多数量的较小粒子,而不是显示多个烟雾粒子的大广告牌。Codemasters 工程师发现,改进的照明效果突出了叠加混合粒子系统中的排序问题,需要重新设计以创建更健壮的 CPU 粒子排序。

在确保效果正确后,工程团队开始寻找在极端条件下可能出现的问题。由于游戏支持玩家控制的摄像头,摄像头可能会非常接近烟雾效果,以至于屏幕被烟雾覆盖。这引入了巨大的过度绘制,而 AVSM 示例并未处理这种情况。工程团队将 AVSM 与屏幕空间细分的每个顶点(而不是每个像素)照明相结合。这种新方法处理了大量的过度绘制,以应对游戏可能面临的最坏情况。

英特尔示例代码在这个故事中扮演了多个角色。最初的研究工作激发了 Codemasters 添加新功能。Codemasters 随后推动了修改,使示例更适合他们的游戏。英特尔随后更新并重新发布了改进的示例,供其他游戏开发人员使用。

图2:Codemasters GRID* 2 应用英特尔® AVSM 示例以实现更好的视觉效果

CMAA 使《魔兽世界*》更加流畅

随着图形效果更惊艳的《魔兽世界》扩展包《德拉诺之王*》的推出,游戏图形选项中引入了一种新的抗锯齿算法。CMAA 旨在为主流硬件提供快速、有效的抗锯齿效果,是由英特尔工程师 Filip Strugar 开发的一种基于图像的后处理技术。通过对最终帧缓冲进行操作,它可以独立于渲染管线中的任何其他更改执行抗锯齿。正如《魔兽世界》最新的一些延迟渲染技术所示,这种方法允许抗锯齿独立于所选的着色模型运行,从而为开发人员提供了更大的灵活性。

CMAA 也是一种易于修改的算法,允许开发人员在一定程度上自由地将其用于特定需求并进行自己的增强。 《魔兽世界》的 6.1 内容补丁包含另一种新的抗锯齿模式,称为 SSAA 2x + CMAA。它通过在 2x 帧缓冲对象上执行 CMAA 计算,然后下采样到原始分辨率,将朴素的超采样与后处理抗锯齿配对。这种算法组合为高级用户提供了最高保真度的抗锯齿效果。

开发人员总是先决定一项技术是否值得探索。在《魔兽世界》的案例中,由于英特尔提供了 CMAA 示例,尝试 CMAA 的决定变得容易得多。该示例有一个默认的测试场景,但也允许开发人员插入自己的图像来预览 CMAA 的有效性水平,并测量其在任何分辨率或测试用例下的额外毫秒成本。这使得开发人员能够做出经过深思熟虑和有根据的决定。《魔兽世界》开发团队能够将当时潘达利亚团队副本内容的屏幕截图放入示例中,并准确地看到他们将获得多少边缘平滑效果的性能成本。

图3:英特尔® CMAA 示例有一个默认场景,也允许在自定义图像上测试效果

一旦决定将 CMAA 添加到游戏中,就需要对《魔兽世界》引擎进行一些更改,以支持 CMAA 使用的 DirectX 11 功能。虽然该技术可以很好地融入渲染管线的末端,但数据仍然需要以特定的方式准备。该算法需要一个只读深度缓冲区视图,这意味着某些引擎可能需要为纹理和帧缓冲区对象添加一个可选的只读标志。它还依赖于无序访问视图(UAV,也称为 ImageBuffers)来实现其部分功能和性能。虽然许多 DirectX 11 引擎已经支持此功能,但其他引擎需要更新以添加 UAV 支持。除了这些支持性添加之外,示例的着色器代码几乎可以整体重用,只需对某些结构进行少量修改。

CMAA 在价值与成本之间取得了重要的平衡,并且对整体过程的侵入性最小。这使得它能够以 FXAA 3.8 90%-120% 的成本,保守地提供比其更好的图像质量和稳定性。“增强型子像素形态抗锯齿”(SMAA)是另一种流行的后处理抗锯齿选项;成本最低的版本——SMAA 1x——提供更多的抗锯齿效果,产生更少的整体图形伪影,但会导致更多的模糊、形状变形,并且更容易受到细微的逐帧变化(时间不稳定性)的影响,所有这些的运行成本都比 CMAA 高 30%-120%。Leigh Davies 和 Filip Strugar 对这些算法的分析可在 IDZ 上获取。

与 MSAA 不同,CMAA 的平滑处理也将应用于 Alpha 测试纹理,从而提供更完整的帧抗锯齿。 《德拉诺之王》甚至演示了 CMAA 可以与 SSAA 搭配使用,以提供比任何其他可用选项更美观、更准确的抗锯齿水平。该算法旨在在 1600x900 分辨率下,在 15W 第四代英特尔®酷睿™处理器上运行时,保持在 3 毫秒以下。从算法复杂度的角度来看,其成本可以计算为 3 次 ½ 分辨率的通道 + 1 次最终原始分辨率的通道。

图4:暴雪的《魔兽世界*》使用 CMAA 在主流 PC 上实现了出色的视觉效果

《魔兽世界*》中的软件遮挡剔除减少了不必要的渲染

另一个吸引《魔兽世界》的英特尔示例是软件遮挡剔除。通过只渲染摄像机实际可以看到的物体,渲染时间大大减少,同时对结果几乎没有影响。Fabien Giesen 撰写了一个多部分博客系列,分析了英特尔的示例(此后已更新),暴雪认为它是一个很好的选择。

通常情况下,示例代码需要重写以适应游戏引擎。暴雪工程师采用了这个示例的核心,并在此基础上构建了其余部分。在 2013 年 3 月首次实现时,整个遮挡过程的成本范围很低,在 0.2 到 1.5 毫秒之间。从那时起,它已成为游戏更集成和有益的一部分。

这些技术的使用帮助《魔兽世界》继续流畅运行,同时暴雪工程师在不抛弃主流硬件用户的情况下改进了游戏的视觉效果。包含所有类型机器的自由为工程师开辟了追求新机遇的大门,而且前景一片大好。

英特尔® 示例代码惠及每个人

英特尔的游戏示例代码团队致力于支持游戏开发人员的需求,识别实际需求并为所有开发人员构建有用的实现。英特尔®代码示例许可证不会减慢您的开发速度,也不会阻碍您的游戏发布。本文中给出的示例只是英特尔开发人员专区的示例代码如何帮助您的游戏提高图形保真度和改善性能的几种方式。

参考文献

英特尔游戏开发者社区的代码示例 - https://software.intel.com/en-us/gamedev/code-samples

自适应体积阴影贴图 - https://software.intel.com/en-us/blogs/2013/03/27/adaptive-volumetric-shadow-maps

保守形态抗锯齿 (CMAA) - 2014 年 3 月更新 - https://software.intel.com/en-us/articles/conservative-morphological-anti-aliasing-cmaa-update

《德拉诺之王》中基于边缘检测的后处理 (暴雪和英特尔®的 GDC 演示) - https://software.intel.com/sites/default/files/managed/4a/38/Edge-Detection-based-Post-Processing-in-Warlords-of-Draenor.pdf

工程师工作坊:《德拉诺之王》中的引擎进化 - http://us.battle.net/wow/en/blog/15936285/

英特尔®代码示例许可协议 - https://software.intel.com/en-us/articles/code-samples-license-5/

具有像素同步的独立顺序透明度近似 - https://software.intel.com/en-us/articles/oit-approximation-with-pixel-synchronization-update-2014

软件遮挡剔除更新 2 - https://software.intel.com/en-us/blogs/2013/09/06/software-occlusion-culling-update-2

关于作者

Brad Hill 是英特尔开发人员关系部门的软件工程师。Brad 研究英特尔硬件上的新技术,并通过英特尔®开发人员专区和开发者大会与软件开发人员分享最佳方法。他还是学生/独立黑客马拉松的工程总监,负责在全国各地的大学举办 Code for Good 黑客马拉松和游戏开发活动。

John Hartwig 是英特尔开发者关系部门的软件工程师。John 的工作重点是通过与开发者合作优化和独特的硬件功能,帮助 PC 客户端和 Android 移动领域的游戏开发者。John 自 2010 年加入英特尔以来,最初是一名 GPGPU 和媒体驱动程序的图形驱动程序开发人员。他制作 DIY 艺术玩具,并获得德保罗大学游戏开发学士学位。

© . All rights reserved.