Quantcast
Channel: 英特尔开发人员专区文章

Unreal Engine* 4/英特尔® VTune™ Amplifier 使用指南

$
0
0

无论您是第一次调整开发代码还是进行高级性能优化,英特尔® VTune™Amplifier 都能将原始分析数据转换为性能洞察。如果您需要确定通过 Unreal* Engine 开发的 PC 游戏代码中的瓶颈、同步点和 CPU 热点,则可以利用图形用户界面对本地或远程目标中的数据进行排序、过滤和可视化,并且开销较低。

在 Unreal Engine* 4.19 中,英特尔® 软件工程师使用 Unreal* 添加了对英特尔 Vtune Amplifier 仪器和跟踪技术 (ITT) 标记的支持。本指南向用户展示了如何利用新集成技术在英特尔 VTune Amplifier 2018 UI 中生成 Unreal Engine 4 (UE4) 的注释痕迹。从Unreal Engine下载 UE4。下载 英特尔 VTune Amplifier的免费试用版。

捕捉 Unreal Engine* 4 痕迹

范围内事件是逐帧分析代码块的累积 CPU 时序。现在可以使用 ITT 事件在英特尔 VTune Analyzer 分析器中捕捉和查看函数或“括号之间”级别的范围内事件。设置范围内事件可以帮助您跟踪标准的引擎统计信息。

首先,以管理员身份运行英特尔 Vtune 分析器。

对于应用,通过添加整个路径选择 UE4 编辑器。

对于应用参数,使用任何必要的设置(如分辨率)指定游戏。在下面的示例中,对 UE4 粒子效果 demo进行分析。确保在应用参数命令行的末尾添加“-VTune”(见图 1)。如果除 -Vtune 开关之外,您还需要命令行参数方面的帮助,请参见 Command-Line Arguments UE4 文档部分。

选中复选框,将应用目录设置为工作目录。如果您需要此屏幕上任何其他设置的帮助,请使用 F1 键访问 Vtune 的帮助系统。

Analysis target tab
图 1.在分析目标选项卡下设置应用、游戏和应用参数。

接下来,移至“分析类型”选项卡并在“算法分析”标题下选择“高级热点”(见图 2)。

将 CPU 采样间隔设置为 1 毫秒。

在本例中,为降低开销,请在“选择基于事件的采样集合提供的详细级别”中单击“热点”。

将事件模式设置为“全部”。

选中“分析用户任务、事件和计数器”复选框。

Setting advanced hotspots
图 2.在“分析类型”选项卡下设置高级热点。

接下来,通过英特尔 Vtune 分析器启动游戏。

在 Unreal Engine 开发控制台中(您可以在工作负载运行时用 ~ (代字号)键打开它),输入“stat NamedEvents”。现在将跟踪范围内事件。请注意,您需要开发版本才能使此功能正常运行。如欲了解更多信息,请参见 UE4帮助系统的构建配置部分。

完成收集统计数据后,停止分析器。

查看 Unreal Engine 4 痕迹

处理结果后,摘要将显示捕捉的主要任务类型统计信息,类似于图 3。

Top task
图 3.为主要任务收集的统计数据。

在“高级热点”屏幕上,移至“自下而上”选项卡(见图 4)。自下而上的视图将显示对任务的深入了解。使用“分组”下拉菜单选择“任务域/任务类型/任务持续时间类型/功能/调用栈”的视图。

Hotspots screen Bottom-up
图 4.自下而上的视图将显示对报告任务的深入了解。

您可以从“高级热点”屏幕上的其他选项卡继续浏览代码配置文件的报告。例如,“平台”视图将描述命名事件的时间(见图 5)。

Platform view
图 5.从平台视图中看到的命名事件的时间。

这些报告中有很多信息供您检查。如欲了解更多信息,请参见英特尔 VTune Amplifier 教程的文档。您将找到为您提供示例的 HTML 和 PDF 文档,以及解决能源使用、检测热点以及确定阻止并行化的锁定和等待方面的 Windows *、Linux *、C ++、Fortran、OpenMP* 和 Android* 问题的示例代码。

自定义事件

您可以对想要优化的 UE4 内的任何代码片段进行调查,方法是用本指南中介绍的循环计数器 进行封装。这可以让您定义自定义事件并在英特尔 VTune 分析器 UI 中遵照其在线程时间线方面的执行。

结论

现代处理器上的性能需求远远超过优化单线程性能。高性能代码必须是:

  • 线程化且可扩展,可利用多个 CPU
  • 针对有效使用 SIMD 单元进行了矢量化处理
  • 经过调整,可充分利用非统一的内存架构和缓存

借助英特尔 VTune Amplifier,您可以通过单一易用的分析界面获得先进的分析功能。UE4 和英特尔 VTune Amplifier 相互配合,支持您调查代码并进行分析,从而在多个内核上顺畅运行。此外,优化工具还允许您更快速地创建代码,获取更精确的 CPU 和 GPU 数据,调查线程和内存使用情况,并且开销较低。此外,您可以通过简单的分析将数据转化为洞察,从而更快速地获取答案。立即下载最新版本的 Unreal Engine 和英特尔 VTune Amplifier,将您的游戏开发工作提升到新的水平。

其他资源


做好准备:独立游戏开发人员适用的 4P 营销理论

$
0
0

若要在当今竞争激烈的游戏市场中取得成功,仅凭勤奋工作和高品质游戏是远远不够的。您需要一套像游戏设计一样精心制作的营销策略,以及将您的游戏与市场上其他众多游戏区别开来的计划。

对于那些没有知名品牌和游戏专营公司那样庞大的活跃粉丝群,也没有足够的财务资源与老牌游戏工作室一较高下的独立游戏开发人员来说,尤其如此。但好消息是,有大量渠道(只需要您投入时间和精力)可以帮助您进行宣传。

本指南将介绍一种被称为“4P”的经典营销框架。您可以使用这个框架评估游戏的商业潜力,分析竞争格局,设定战略目标并制定实现商业成功的计划。

the four Ps of marketing
图 1:4P 营销框架。

4P 营销框架

4P 概念源于一个多世纪以前的宝洁公司*。当时,4P 是指价格、地点、促销和包装(虽然产品始终是肥皂,但为不同的消费市场提供不同的包装)。后来,随着公司开始将这些新的营销方法应用到更复杂的产品中,“包装”P 被“产品”所取代。让我们回到几十年前。哈佛商学院教授 Neil Borden 在 20 世纪 50 年代初提出了营销组合的概念,指的是各种营销因素的组合。最知名的营销组合从宝洁的 4P 演变而来。

您的内部营销专家可能会问:“等等,不是 7P 吗?”。确实是这样的。在处理服务型业务时,营销组合中通常还包含另外三个 P(物证、流程和人员)。虽然有些人可能会说,基于订阅的游戏本质上是软件即服务业务,但我们本文的讨论重点是 4P 营销组合以及如何将其应用到独立游戏营销中。我们将针对如何在竞争日趋激烈的游戏市场中,使用这些 P 提高知名度和销量提供一些实用建议。

使用 4P

对于游戏开发人员而言,4P 支持您使用以下简单的矩阵进行评估和规划:

产品

  • 种类
  • 质量
  • 设计
  • 特性
  • 品牌包装
  • 服务

价格

  • 标价
  • 折扣
  • 收入模式

促销

  • 广告
  • 个人销售
  • 公关营销

地点

  • 渠道
  • 覆盖范围 商品分类 位置
  • 库存 运输 物流

首先查看并大致了解一下上面的每个 P,然后问问自己:

  • 产品:我的游戏有何不同之处(游戏类型、质量、设计和其他特性)?
  • 价格:我应该使用哪种收入模式?我应该设定什么价位(标价、折扣、订阅、免费)?
  • 地点:我有哪些分销选择(在线下载、流媒体、实体店、渠道合作伙伴捆绑等)?
  • 促销:我如何利用所拥有的资源吸引玩家的注意力(通过网络、社交媒体、与主要意见领袖/ YouTube* 玩家的关系、预告片视频、活动进行宣传)?

相互依赖的变量

4P 的一个重要方面是,各因素都相互依赖、相辅相成,您需要进行统筹规划,综合利用。

市场总是变化莫测,因此您需要投入时间和精力监控和调整您的计划,以确保营销组合中的各个因素都与当前的市场状况保持一致。如果任何一个 P 与其他 P 不一致,请务必进行重新评估和调整。

如果这听起来令人怯步并且很耗时,也请不用担心,因为它远没有听起来那么复杂。举例来说,假设您正忙于编码,突然收到了一则 Slack* 消息,告知您您的一个分销渠道临时中断。而您正打算在连接到该渠道的网站上张贴非常醒目的横幅。这时您可以延迟张贴横幅,或在渠道中断期间将潜在客户引导至其他网点,以最大限度地提高销售额,而不是将流量引导至停止运营的网站。

是的,您的游戏就是您的产品

创新人才(包括游戏开发人员)对他们的作品倍感自豪,但许多人发现很难将他们的劳动成果看作具有商业潜力的产品。然而,您必须得先接受这种想法,然后才能从一个游戏爱好者进阶成一位致力于通过生产让他人愿意付费体验的产品来创造收入的商务人士。

将您的创作视为产品还有另外一个优势。情感依附可能会影响您的判断,但如果您对所做的事情充满热情并实事求是地做出商业决策,您会有意想不到的收获。越快将您的得意/称心/扛鼎之作视作一种产品越好。

带着这种想法,问问您自己:我的产品在市场上别具一格,还是司空见惯?

  • 别具一格的产品是原创的、未经证实的、不为大众所熟悉的。假设有足够多的人认为这件产品有趣、吸引人并且价格合理,那么它就有可能具有商业潜力。
  • 熟悉的产品与现有游戏类似,可能是对流行类型的重新诠释,也可能是一种变体。如果有足够多的人认为您的产品比市面上的其他产品出色得多,那么它就可能具有商业潜力。

每种产品也都有其自己的优缺点。了解自己产品的优缺点对于制定旨在让人们相信您的产品值得尝试和购买的规划非常重要。

在这一点上,4P 中的“产品”策略可以帮助您明确和量化您的产品相比其他竞争产品的优劣势。

创建一个表格,列出排名前 5 或前 10 的竞争产品,然后列出每款产品的优缺点和特点。创建高级列表,并使用粗线条定义区别性因素。没有人会在意您将自家游戏引擎的算法效率提高了25%,但他们会在意您的游戏画面看起来比市场上其他游戏的画面更出色生动。

经常被忽略的一个因素是客户玩完一场游戏所需的时间。如果您知道这点,那么就请记录下每款竞争游戏所需的时间吧。涉及到产品定价时,这就是重要的统计数据,更多内容我们将在下一部分进行介绍。

产品竞争产品 1竞争产品 2竞争产品 3竞争产品 4竞争产品 5
种类      
质量      
设计      
特性      
品牌名称      
包装      
服务      

表 1.竞争分析样本表 — 确定您的竞争优势与劣势。

除了评估您的产品相比竞争产品的优势与劣势外,您还需考虑产品的生命周期。在产品生命周期的每个阶段(从预发布到试用版测试,再到产品发布、产品生命周期结束或后续产品发布),您都希望能够充分了解每个特定阶段的挑战并制定应对计划。

实现这一点的关键在于了解目标受众的需求,并通过以下各种方式展示您产品的价值定位:

文字— 以强调产品主要卖点的话语描述产品并阐释产品的与众不同之处。使用游戏专用术语和角色名称时要注意保持一致。

图片— 一张图片胜过千言万语,所以要注意使用图片强调您产品的亮点。游戏截图应着重于博人眼球的场面:史诗般的战斗场景、怪物、车辆、谜题等等。

视频— 游戏预告片是激起潜在玩家兴趣的极为有效的方式。预告片应注重传达您的产品值得畅玩的点。您和主要意见领袖的游戏操作影像是吸引玩家注意力的另一有效方式。

幕后采访、网络直播、博客文章— 让受众看到产品的开发历程。这种做法能够为产品预发布建立粉丝基础,而您和您的团队也能充分展现产品的价值。

在您与潜在客户互动的任何地方(包括网站、社交媒体、下载和流媒体网站以及 YouTube 游戏*中)发布这些文字、图片和视频,并使用所有可用的数字渠道进行宣传。

价格

顾名思义,价格指的是人们为购买您的产品需要支付的费用。您产品的价格应该基于其在市场上的感知价值,而不仅仅是生产和分销成本。价格高于或低于其感知价值的产品将无法发挥其商业潜力。事实上,有些人甚至认为这些产品根本卖不出去。了解目标受众对您产品的看法至关重要。

要想了解目标受众对您产品的看法,您需要冷静地审视您的产品及其竞争力,而这也正是您在评估产品优缺点时所要做的事情。调查您的竞争对手正在使用的价格和收入模式也有助于评估。如果有可能,回顾过去 6 到 12 个月竞争对手可能提供的任何折扣、提供折扣的时间以及原因。将这些信息填入另一张表中:

价格竞争产品 1竞争产品 2竞争产品 3竞争产品 4竞争产品 5
标价      
折扣      
收入模式      

表 2.确定竞争产品定价因素的样本表。

如果您能够追踪六个月或更长时间内竞争产品的定价和折扣,请将这些价格按时间顺序进行排列,以了解季节性定价和折扣趋势。例如,确定打折现象是否在寒假普遍存在,或者是否与时下流行的玩家活动和展会同步。

比较收入模式进行竞争分析可以帮助您更好地了解您的定价策略。跟踪定价和折扣也可以让您了解实际考虑事项对净收入和现金流等的影响。例如,分销渠道通常在产品总价中占据一定的百分比。对于您的业务来说,您需要知道这个百分比是多少;对于竞争分析来说,在进行收入对比时了解这个百分比也大有裨益。通过比较净价而不是标价,您可以了解您的目标受众为类似产品支付的实际费用。对于业务规划来说,了解特定分销渠道是每月、每季度还是按其他时间计划支付一次付款也很有帮助。

表 2 中的最后一个因素是跟踪收入模式,该因素可告诉您竞争对手的收入是否基于:

  • 一次性支付(下载内容定价或 DLC 定价)— 玩家一次性付款购买该产品。
  • 订阅费— 玩家支付经常性费用在线访问游戏。
  • DLC 定价— 玩家购买能够提升他们游戏体验的其他内容和升级。
  • 订阅费— 玩家支付经常性费用在线访问游戏。
  • 情景定价— 玩家支付费用访问单集游戏或整季游戏。
  • 微交易(游戏内购买)— 玩家购买钥匙解锁功能和额外的权限。
  • 免费游戏— 玩家无需预支付任何费用,但需为了屏蔽游戏过程中的广告、获得增强的游戏体验、额外的内容以及更多功能而支付费用。
  • 捆绑定价— 捆绑销售可让您提高产品的曝光度并通过将其与其他开发人员的产品一起销售,延长产品的生存周期。

阅读评论和最终用户反馈,了解客户对竞争产品的评价。玩和您的游戏相似的游戏,或者如果您的游戏与市场上的其他任何游戏都不同,寻找并玩其他独特的游戏产品,并注意查看已发表的客户评价。

制定合理的价格

虽然产品定价没有统一有效的方法,但却有很多陷阱可以避免。一种常见的错误就是认为仅价格就能驱动销售。这种想法会导致这样一种观念:通过以较低的价格提供类似的产品来削弱您的竞争对手,可以保证人们一定购买您的产品。但事实并非如此。最重要的是,制定过低的起始价格会损害您的利益。除非您宣布您的起始价格是特别推广价格,并且会在预定期限后将其上调,否则一旦将价格设定的很低,此后便很难再上调。

另一个常见的错误是仅仅根据您和您的团队为生产产品所投入的时间进行定价。建筑承包商按时间和材料收费是一回事,但对于游戏开发人员而言,受众很少知道或关心打造一款游戏体验需要多少时间和精力。玩家在乎的是您的产品是否有趣,是否值得花费时间和金钱去体验。换句话说,为产品定价的关键是价格要与产品在市场上的感知价值保持一致。

此外,您还需问自己以下问题:

  • 市场愿意支付的价格是多少?
  • 您的竞争产品的售价是多少?
  • 客户玩您的游戏需要多长时间?
  • 您是否在产品推出时提供打折优惠,并计划在日后提高价格?
  • 您的标价是否为将来的促销折扣留有空间?

Steam* 提供了有关定价最佳实践的类似建议。

打折注意事项

随着产品在市场上逐渐成熟,打折产品价格有助于延长产品的架货期,即在销量持平或下降时提高销量。但是,当您进行定期促销打折时要格外小心。经常打折会影响您的全额零售价。例如,潜在客户可能会拒绝支付全价或任何价格,因为他们认为您在不久的将来会降低价格。即便您不会这么做,但由于人们都在等待价格下跌,您的销售额也会因此受到影响。

所以,应尽量避免让打折成为销售额低于单位预期时的必然举措。这种情感驱动行为会影响市场对您产品的感知价值。相反,您应制定定价策略,明确什么时候打折,什么情况下打折。例如,您可以制定在节日季节期间打折的定价策略,因为在这期间,较低的价格可能会引起礼品购买者的注意。同样,在发布新产品之前对旧产品进行打折可以帮助开拓市场,并激发顾客对您即将发布的新产品的更多兴趣。

请记住,折扣不一定是纯粹的货币性质。例如,在发布产品时,您的推广价格中可能会包含其他内容,如“价值 XX 美元”,有限期限内无额外费用。在实现销售目标或一段时间之后,您可以开始收取全额标价。

免费游戏

另一种定价方式是免费游戏(糖果粉碎传奇*、坦克世界*等游戏青睐的定价方式)。免费游戏的收入来自于游戏过程中的购买(道具、自定义对象等)或为屏蔽广告进行升级而支付的费用。许多老牌游戏工作室都推出了免费游戏,部分原因是为了打击盗版。许多游戏发行商都青睐情景定价,这种方式将一次性付费与订阅费结合在一起,通常以季票的形式出现。这些通票的花费可能与原始游戏差不多,并且可以让玩家在有限时间内或一个通关中专享某些游戏场景和奖励功能。

促销

将促销看作旨在促进销售的任意活动。对独立游戏开发人员来说,打折就是促销,就像与游戏媒体和游戏社区中的主要意见领袖展开对话并建立良好关系的活动一样。在展会上展示产品或者在活动上发表演讲也是促销。

那么促销与营销有何不同?我们把促销看作营销组合的组成部分之一,除此之此,营销组合还包括产品、价格和地点。换句话说,营销可以没有促销,但促销不能没有营销。

在制定促销战略时,请参考“游戏促销必备”清单,该清单包括三个类别:

  • 需要创建的资产,它们将帮助您在任何时间和任意渠道推广您的产品(请参见下方“地点”部分)。
  • 需要持续做的事。
  • 需要参加的活动,它们将帮助您推广产品。

为帮助您制定活动战略,请单独创建一份包含时间表的文档,列出一些重要的日期,例如提交截止日期、参展商装卸日期、行程预定截至日期及制作目标媒体资料的(活动新闻稿、新游戏预告片等)日程表。

游戏促销必备

资产

  • 标识— 可立即传达您的产品信息的标志性图像。
  • 游戏截图— 可突出产品亮点的图片。
  • 预告片— 激发潜在客户的体验兴趣和购买欲。
  • 信息文本— 用一句话或一段简短的文字讲述您的游戏故事,并使用项目符号强调产品的主要卖点。
  • 游戏视频— 通过聚焦能够吸引人们想要了解、体验并购买您的产品的画面,向大家展示您的产品。
  • 媒体材料/体验版游戏— 时刻 准备好这些材料,以便在机会到来时能够随时发布。

持续活动

  • 与主要意见领袖、YouTube 游戏玩家和主播建立良好关系— 请求他人帮忙宣传您正在构建的产品以及它有多么酷。
  • 与其它品牌建立合作伙伴关系— 借助知名企业的营销力量宣传您的产品,推动促销成效。
  • 在博客上发布开发进展信息— 让您的受众了解幕后情况,激发他们对最终结果的兴趣。把您和您的团队变成产品的主要卖点。
  • 在您的社交媒体渠道(Facebook*、Instagram*、YouTube* 等等)上更新内容— 建立粉丝基础,点燃大家对产品的兴趣。
  • 构建并维护潜在客户的电子邮件列表— 激发潜在客户的兴趣,将订阅者列表转化为付费消费者。
  • 建立网站并更新网站内容,让客户对产品的研发情况抱有持续的热情— 吸引注意力、激发兴趣、方便用户操作 — 阅读评论、试玩游戏、观看预告片、订阅您的电子邮件列表及购买您的产品。

活动

  • 展会(游戏开发者大会、电子娱乐展、英特尔®创意工坊研讨会、PAX、独立游戏节等等)— 展示产品并发表演讲,以提高品牌认知度并吸引潜在客户和游戏媒体。
  • 玩家聚会— 召开潜在客户见面会并激发他们对产品的兴趣。
  • 竞赛英特尔®进阶游戏开发人员大赛— 从著名行业专家那里获得宝贵的反馈、提高认知度,并有机会赢取大奖。

广告效应如何

曾经有一段时间,产品营销就等同于做广告。但对于独立游戏开发人员来说,广告成本往往大于收益,具体要看您选择将广告投放在哪里。例如,社交媒体广告成本相对较低,可能值得您投入精力和成本,但在较为传统的媒体(纸媒和电视)上做广告可能不会产生与成本和努力相匹配的效益。

如果您确定选择打广告,请仔细定位您的广告。您希望尽可能多地触及到目标受众。YouTube 等数字传播媒体支持您选择广告受众的年龄、性别、婚育状况及家庭收入。在包含游戏版面的大众流行出版物上做广告可能会让许多人看到您的产品信息,但这些人可能不全是游戏爱好者。

犹豫不决时,请想一想您计划的广告支出是否能够产生与成本相匹配的销售额。

基于关系的促销

最有效的方式之一通过经验丰富和受人推崇的游戏玩家宣传您的产品,他们通常比较活跃,非常愿意与游戏社区中的成员分享他们正在玩的游戏。这些 YouTube 游戏玩家和主播群体可能难以琢磨,但与对您的产品感兴趣的主要意见领袖建立良好关系不失为增加受众的好方法。

与成熟品牌合作

与成熟品牌建立合作关系 — 其产品与您的产品相关联的公司是扩大您的促销活动的好渠道,通常您可能没有足够的经费进行他们的推广方式。例如,有些公司在参加著名行业展会时,可能会邀请您在他们的展位上展览您的产品,只向您收取很少的费用或者不收取任何费用,您只需自付差旅费即可。

公共关系 (PR) — 聘用专家还是亲力亲为

除非您非常外向,喜欢与各种人群打交道,包括从未谋面的陌生人,否则您会发现亲自参与通常由专业公关人员为客户举办的活动挑战重重。但雇佣公关公司的成本很高。如果您承担不起招聘公关专家的成本,那么不妨考虑与喜欢与人打交道、口齿伶俐、做事持之以恒的朋友或家庭成员合作。您以及擅长促销的朋友、家庭成员和合作伙伴在公共关系方面所付出的努力最终将会得到丰厚的回报。

无论是您亲自还是他人帮您进行公关工作,在接触意见领袖和媒体之前,请先对他们的工作进行了解并对他们表示尊重。当您在制作电脑游戏时,不要接触仅专注手机游戏的人员或出版商。在讲述您的产品故事时,强调产品的主要卖点,但也要注意不要夸大其词。让听众自已判断产品的好坏。

地点

产品的销售地点(Place)是 4P 营销理论中的第四个 P。当前数字分销渠道众多,您需要规划如何利用所有可行渠道,并随着产品在市场上不断成熟对这些渠道进行评估。在所有产品销售实体店采取同样的战略。

表格 3 可帮助您记录所有分销渠道。开始计划时,使用该表作为清单。随着分销网络的不断扩大,确保跟踪您的市场覆盖率并识别分销网络缺口。产品销售开始后,跟踪销售额。同时,与 4P 营销理论中的其它三个 P 一样,您需要持续监控每个类别并相应调整您的营销组合。

地点渠道 1渠道 2渠道 3渠道 4渠道 …
覆盖范围     

分类(OEM 组合和

合作伙伴分销渠道)

     
地点(实体店)     
库存     
运输     
物流     

表 3.记录您的分销渠道

必备渠道

线上产品分销渠道分为两大类:一是可自行建立的地点,二是合作伙伴企业的运营地点。后者通常需要以签约的方式加入合作伙伴计划。

每一位独立游戏开发人员的必备渠道列表包括但不限于:

  • 网站— 确保您公司的网站或专门推广游戏的网站包含醒目的按钮(即下载、购买、游戏试玩等等)。
  • Facebook 网页— 确保包含您的网站链接、您的 YouTube 渠道、您在 YouTube Gaming 上的产品、您的 Steam 登录页及与其他产品推广地点相关的信息。
  • YouTube 渠道 — 提供人们可观看视频宣传片的地点。
  • YouTube Gaming 展示— 发布由主要意见领袖和玩家(而非您的团队)制作的产品视频。

套装或游戏包是增加产品曝光率的另一种方式。通过使用其它相似的名称包装您的产品或产品的部分版本,您可与其他开发人员在现有基础上加大推广和销售力度。

例如Green Man GamingHumble Bundle等网站可大大增加您产品的曝光率。

众筹网站是产品销售和推广的另一个渠道。在产品研发阶段,众筹网站可支持您通过销售促销产品(T 恤衫、车尾贴等等)筹集资金,还可支持提前获取游戏测试版或体验版等等。众筹网站还是一大新闻来源,例如,玩家发布好评或者您的筹款远远超出了您的期望值。

精品店

在大型实体零售商店分销对于没有出色历史业绩的独立游戏开发人员来说困难重重。精品游戏商店的客户通常较为忠诚。同与您具有一致目标客户的精品店合作将是非常有效的替代零售战略。

四处采购

使用表格 3 的最后三大类:库存、运输和物流 — 跟踪可用库存、物流与装运服务(及成本)以及任何相关的物流。即使您通过销售数字密钥,让客户下载包含您产品的压缩包或者在流媒体网站上解锁您的产品,这些类别也能够满足每个数字渠道有效分销产品的需求。

总结

如果使用正确,基于 4P 的营销战略和促销计划可帮助您把游戏在正确的时间推广给正确的人,在构建客户满意度和忠诚度的同时,为您达成销售和利润目标带来良好机会。为高效起见,有必要将时间和精力放到营销和促销上来。需要多长时间?我们建议您至少将 20% 的时间用在营销和促销上。如果没有营销,无论在游戏上下多大功夫,采用多么出色的设计都无济于事。如果人们根本不知道它的存在,那么想创造丰厚的收益就不太可能了。而采用正确的营销策略可让您的收益无上限。

资源

Marketing’s Four Ps: 企业家的第一步(普渡大学)(PDF)

Marketing Mix: 4P 营销理论:企业的另一个视角

Green Marketing Strategy and the Four P's of Marketing

Four Ps - Investopedia

Marketing mix - Wikipedia

发展壮大:帮助独立游戏开发商解决分销难题

$
0
0

在选择分销渠道时,独立游戏开发商面临着重要抉择。尽管许多开发商计划仅将其游戏发布至 Steam*,但多渠道分销模式更加合理。使用多个渠道需要开展一些额外工作,但您可以吸引更多受众,并能够扩大收益。

Steam*
图 1:Steam* 是大多数独立游戏开发商的首选,但并非唯一选择。

物理设备和共享软件天数

对于独立游戏开发商而言,向实体零售商分销盒装实物游戏通常成本太高。一种早期解决方法是共享软件游戏概念,例如  id Software推出的第一人称射击类游戏 《毁灭战士 (Doom)》* (通过占用空间小的免费可执行文件提供)。在购买整个游戏之前,玩家可以下载前 10 个关卡。游戏推出的第一天,玩家下载需求强烈,导致系统不堪重负。游戏开发商鼓励玩家自由分发共享软件版本,因此最终完整版游戏的客户购买量超过了 100 万。

 Doom*
图 2:1993 年,id Software 的《毁灭战士 (Doom)》* 作为可下载的共享软件发布。

面向 Atari* 2600 的 GameLine*Stardock Central*等早期在线分销服务缺乏任何形式的营销协助或游戏管理,并存在其他分销问题。2004 年,Valve 公司推出了 Steam 平台,并掀起了一场变革。

Steam 很快成为了电脑游戏的最大数字分销商。正如 Steam 创始人 Gabe Newell 向 RockPaperShotgun.com 所述,优势非常明显。“对于 NES(任天堂娱乐系统*)而言,最艰难的日子……是游戏卡时期。这是一个巨大的风险。由于将所有的资金都投在仓库中存储的芯片上,因此您在制定决策和签署 IP 时非常保守,艺术方向不会发生改变等。现在的情况截然相反……不存在任何货架空间限制。”

Distribution platforms

图 3:可以从上述所有方案中选择或加入的分销平台。

多个站点现在能够集中购买和下载数字内容。此外,一些平台还可以用作数字版权管理系统 (DRM),用于控制游戏使用、修改和分销,并处理游戏内购买、内容解锁密钥等事宜。以下是三个主要模式:

  • 由大型发行商(例如 Electronic Arts Inc.*、Ubisoft* 及腾讯*)运行的专有系统,可支持其直接销售,并整合用户信息。
  • 销售第三方游戏和第三方 DRM 的零售系统。示例:Green Man Gaming*、Humble Bundle* 及 GamersGate*。
  • 销售第三方游戏和专有 DRM 的数字分销平台。表 1 显示了领先平台的页面访问量。

表 1:按页面访问量排名的顶级分销平台(资料来源:Newzoo 2017 年第二季度:全球游戏市场)。

平台

Web 地址

游戏数量

月度总访问量

Steam*

www.steampowered.com

14,000

163,000,000

Humble Bundle*

www.humblebundle.com

5,000

41,600,000

GOG

www.gog.com

2,000

19,000,000

itch.io

www.itch.io

63,000

10,100,000

Green Man Gaming*

www.greenmangaming.com

7,500

6,200,000

GamersGate*

www.gamersgate.com

6,000

2,000,000

OnePlay*

www.oneplay.com

2,000

127,000

建立真正的合作伙伴关系

由于选择良多,因此选出一家分销合作伙伴可能非常困难。以下是选择合作伙伴之前需要回答的一些关键问题:

  • 您的业务模式是什么?如果您依靠游戏内购买,则需要一个强大的 DRM 系统来管理相关微交易。
  • 您的游戏是免费,还是收费?定价应是您在开发工作早期作出的一个艰难选择 - 如欲获取更多信息,请参阅我们的另一篇文章《做好准备:进行独立游戏定价》。
  • 您的目标受众是谁?如果您专注于较小细分市场,那么可能不想冒险堙没在最大分销平台中。寻找针对您目标受众的专用站点。
  • 您的潜在客户使用哪些设备?如果您将发布移动益智游戏,请关注分发此类游戏的站点。
  • 您的潜在客户使用哪些渠道?了解目标受众依赖哪些站点。

直销仍然有效

由于担心在线分销商瓜分收入,因此一些独立游戏开发商可能考虑自己分销游戏安装包。通过零售商进行销售的平均分成是 70/30,但这可能因平台和开发商影响力不同而有所差异。一些站点甚至提供随意付费选项,或支持客户直接将部分款项捐赠给慈善机构。

为了确保自己赚取超过 70% 的收入,您可以与全堆栈数字商务平台合作,例如 Fastspring*,后者支持在线、移动及应用内体验的全球订阅和支付。或者,您也可以使用 Binpress*上的工具建立您自己的数字商店。

英国牛津 Mode 7团队成员 Paul Kilduff-Taylor 写道:“不要仅依赖分销商帮助您销售游戏……直接销售仍然可以赚取丰厚的利润。”Kilduff-Taylor 建议,在建立您自己的分销渠道时,您不仅需要可靠的支付提供商、清晰、优化的网站,而且还必须努力通过有效的营销计划吸引潜在客户访问您的站点。

通过您自己的努力来增强完整的多渠道分销战略。Kilduff-Taylor 表示:“为了通过可下载游戏在电脑市场取得不俗的成就,您需要依靠各大门户。”

不要仅停留在 Steam

根据 SteamSpy.com,Steam 控制着大部分电脑游戏市场,到 2017 年年底,其服务拥有超过 2.75 亿活跃用户,每周用户数量增加 10 万。2017 年,估计有 6,000 多款游戏发布在 Steam 上。

其关键优势之一是 Humble Indie Bundle,后者能够管理独立游戏,为较小游戏提供展示的机会。SteamDirect 常见问题解答列出了一些您应该注意的问题。请您务必强调游戏的独特之处,并通过市场营销工作进行合理安排,将计划、宣传材料、媒体信息及具有吸引力的预告片等一切准备就绪。预告片是一个关键组成部分,Kert Gartner等制片人备受追捧。<“Kert Gartner 介绍混合现实 VR 游戏预告片背后创作智慧”的链接> 请确保您的游戏独树一帜,否则您将堙没在每日大量发布信息中。

英特尔软件合作伙伴营销经理 Patrick DeFreitas 建议独立游戏开发商考虑通过多个渠道进行分销。“电脑游戏方面的许多独立开发商将 Steam 视为最重要的分销渠道。他们认为,如果能够在 Steam 发布其游戏,则万事俱备。但最好能够考虑其他数字和零售分销渠道,以便将您的游戏投放出去。”

二级零售商和渠道专注于管理高品质游戏,以吸引其客户群,并能够完美匹配您的游戏及其粉丝。此外,DeFreitas 还指出一些零售商可能在单个地区做得更好。他表示:“他们都在寻找能够通过其渠道进行销售的游戏组合。最终,您可能成为拥有十多个不同渠道的独立开发商,可以直接向全球消费者销售游戏。”

数据收集助力决策制定

调查不同分销渠道可为您收集的统计数据。随着时间的推移,当您确定销售趋势、促销活动响应、地理优势及买家角色时,您需要对大量数据进行分析。Steam 规模较大,因此 SteamCharts.com 等第三方站点纷纷提供数据快照。在 SteamAnalyst.com 上,您能够了解游戏内购买趋势。您可以搭配使用 Google Analytics* 与 Steam 数据,以分析您的 Steam 商城页面或社区中心,从而获取有关流量来源和访客行为的匿名数据。

Steam*
图 4:Steam* 执行月度调查,有助于指导您的决策制定(资料来源:Steampowered.com)。

请务必利用数据收集良机,以便开发和完善目标受众中的玩家角色。您对销售情况和客户了解得越多,针对其他分销选择作出的决策越明智。

SteamCharts.com
图 5:SteamCharts.com 等第三方站点可提供 Steam* 数据持续快照(资料来源:Steamcharts.com)

多平台发布有助于增加收入,但也将带来困扰

跨移动设备、控制台及电脑操作系统发布游戏是增加收入流的一种有效方法,但对于大多数拥有一款游戏的初级开发商而言,这可能不是一个很好的选择。一次性熟悉许多不同的系统是一个巨大的挑战。Unity* 软件和 Unreal* 等游戏引擎提供了通过相同代码库支持多个平台的方法,但需要准备在测试和质量控制方面进行大规模投资。您可能希望专注于打造最佳电脑游戏,而非扩展至各个可用平台。

通过捆绑增加趣味性

加入原始设备制造商捆绑包是快速开展分销的绝佳方法;您可以开发更多的企业对企业模式,捆绑商将处理大部分促销活动。您只需与捆绑包中的几款游戏展开竞争,而不必尝试从大约同一时间发布的数十款游戏中脱颖而出。Reddit* 能够保持对当前销售捆绑包的全面了解,并给出提供游戏捆绑包的站点列表。IndieGameBundles.com* 拥有一个完全针对独立开发商的类似列表

Joe Hubert 在 venturebeat.com* 上写道:“如果您希望安于现状,则不会加入捆绑包。您需要加入一个对您的游戏有后效影响的捆绑包。(曝光率超过低销售价位。)您的游戏将引起广泛关注、吸引受众进行深入了解,并在未来得到认可。”

HumbleBundle.com 提供了常见问题解答,可帮助您完成其提交步骤。Fanatical.com* 通过一封电子邮件开始其流程,而 Green Man Gaming 则需要填写在线表格

此外,在构建自有网络的过程中,您还可以在展会与活动上联系发行商和捆绑商。主要游戏站点和杂志能够引导您转向新的热门平台。此外,您还可以与其他开发商交流其对分销趋势的看法。

在加入捆绑包后,您可能将参与您自己的营销工作。好消息是,您将获得更多的新闻和信息来补充您的社交网络反馈。如欲获取更多有关促销活动战略和营销推广交付项目的信息,请查看这篇关于活动参与的文章 <《备受关注:作为独立游戏开发商参加您的首场活动》的链接> 和这篇关于接近行业影响者的文章<《发展壮大:接近独立游戏开发商行业影响者》的链接>。

多个组织都举办独立游戏开发商年度竞赛。独立游戏节提供现金奖励和公共宣传,而游戏开发世界锦标赛则提供芬兰与瑞典之旅和顶级游戏工作室探访。上述奖励也是您促销材料的重要营销项目。此外,您还需要关注那些帮助您分销捆绑包中游戏或作为独立游戏进行分销的竞赛。例如,英特尔® 进阶游戏开发人员大赛可向 Green Man Gaming 展示您的游戏。请访问 PixelProspector.com* 站点,获取可参加竞赛的更新列表

合理分销的强大作用

Bastion*是独立开发商 Supergiant Games 打造的一款动作角色扮演游戏,在最近举办的游戏开发者大会 (GDC) 上险些因棘手的预览版而折戟。但当 Supergiant Games 将可玩性较高版本带到 Penny Arcade 博览会时,该游戏开始摘得各项大奖。最为关键的是,这推动华纳兄弟互动娱乐公司将其发布在了 Microsoft Xbox* 上。随后,它通过 Steam 被移植到了 Microsoft Windows* 电脑,并为 Google Chrome* 创建了一款浏览器游戏。该游戏在一年内销售至少 50 万份。

Bastion*
图 6:Bastion* 克服了早期障碍,提供了多个版本。

Dustforce*  被纳入 Humble Indie Bundle 6 时,其销量显著提升。在捆绑包推出后的短短两周时间里,该游戏销量达到 13.8725 万,并赚得 17.8235 万美元。

促销活动通常有助于推动平台期销售。Binpress* 编辑 Alexis Santos 表示,Pocketwatch Games 的 Monaco*通过加 入  Humble Indie Bundle 11 赚取了 21.5 万美元。在销售的 493,000 个捆绑包中,Monaco获得了 370,000 个出价人的青睐;出价人必须出价高于每捆绑包 4.71 美元的平均价格才能够竞得 Monaco。这意味着 Pocketwatch 的每游戏收入并未显著增加,但分销了数十万份游戏。最终,这款已经上市 10 个月的游戏实现了收入大幅提升,但这对该捆绑包之外的 Steam 全价游戏销售没有产生重大影响。

GameFutures.com* 创始人 Aki Järvinen 最近撰写了关于 10 大塑造游戏行业趋势的文章,并指出了获益于新分销方案的业务模式的演进。他说道:“Playfield* 和 Itch.io等公司正在构建相关服务,尝试帮助玩家社区和开发人员解决独立游戏可发现性问题。”他猜测,分销平台将为营销、公共关系和数据分析提供更多支持,未来我们可能会看到更多 Morgan Jaffit 所说的“三个 I”游戏和工作室。

市场将始终为独特、有创意的游戏留有空间,而不会出现 2015 年权威人士担忧的独立游戏危机,即独立游戏市场过度饱和,导致市场增长缓慢,开发商所能分得的羹也越来越少。关键在于让玩家轻松找到并购买游戏。借助多个不断演进的分销渠道,您将能够努力通过相应渠道分销您的知识产权,从而最大限度地扩展业务范围、接触受众并增加收入。此外,请大胆寻求帮助。英特尔与 Green Man Gaming 刚刚携手为发行商、零售商及渠道合作伙伴建立了一个全新数字内容分发站点。如欲了解更多有关参加英特尔®软件分销中心的信息,请访问 https://isdh.greenmangaming.com

资料来源

英特尔® 开发人员专区

英特尔® 进阶游戏开发人员大赛

Indie Games on Steam

CardLife*的《Liberating World》是一款纸板创建工具中的游戏

$
0
0

原文由 Intel Game Dev 发表于 VentureBeat*:CardLife*的《Liberating World》是一款纸板创建工具中的游戏。请访问 VentureBeat 的英特尔页面,了解更多游戏开发新闻和相关主题。

Cardlife Game

凭借《罗博造造》(Robocraft)* 这款机甲对战游戏,Freejam* 以热衷于用户生成内容而闻名世界。凭借最新游戏,该工作室正在回归用户生成内容的最终来源:简单的纸板。但现在人们在制作一个由机甲、龙和魔法构成的多人生存游戏时,并不是这么简单。

这个游戏最初只有一个小原型,是 Freejam 首席执行官 Mark Simmons 构思的一个简单目标:用纸板发挥您的创造力。他和游戏总监 Rich Tyrer 聊了起来,迸发出更多想法,最终将创意变成了现实。Tyrer 回忆道:“我们设想了一个由纸板小屋和工具构成的基本纸板世界。我们在网上发布只是为了看看会发生什么。关键是看看人们如何用这个纸板和这两种工具(锯和钢锯)发挥自己的创造力。”

即使只有一些工具,也可以用纸板做很多事情(尤其是它可以控制规模),它的潜力足以让 Freejam 团队在一个月后成立,以便以正确的方式进行开发。“我们从这里入手,这款游戏也应运而生。我们开始思考什么流派有助于人们的审美,我们如何让人们做出他们想要的东西?我们认为,纸板的魅力就像是一个孩子用纸板箱建造一座城堡。您需要填补空白。这就是它的意义所在。”

然而,开放世界的多人游戏本身并不是CardLife*概念的终点。"CardLife游戏更多表现了您可以用纸板做什么。我们想用它来创建这个纸板平台,人们可以在这里进行创建并进行大量修改。这就是它专注于 UGB(用户生成内容)且真正可定制的原因。”

CardLife 的唯一规则

Freejam 的目标是创建一个平台,人们既可以在 CardLife 游戏中创建他们想要的任何内容,也可以只使用 Notepad* 和 Paint* 创建 mod,只要这些东西都是纸板。Tyrer 使用《战争机器》*的例子。如果玩家想要完全重新创建 Epic* 的射击游戏,他们应该只使用 Unreal*。如果他们想要用纸板制作,绝对可以做到。这是 Tyrer 想要施加的创意方面的唯一限制。

他强调,就使用便利性而言,他希望这款游戏简单易用,以方便孩子们轻松上手。儿童名字的 3D 建模更加取决于入门门槛和制作 mod 的难度。我们希望降低门槛和难度,无论他们想要制作一个强有力的版本,一款格斗游戏,还是只想添加更多生物。”游戏中的一切基本上都是 2D 图形的集合,可以在游戏文件夹中作为 PNG 文件。制作新角色模型就像在画图中绘制不同的形状并将它们组合起来一样简单。

CardLife的定制不仅限于修改,每当玩家制作物品、车辆甚至龙时,他们都可以完全改变其纸板创作。该系统以连接点而命名,其灵感也来源于此。这是孩子们通过填充空白来创作艺术的一种方式,您可以改变直升机或怪物的纸板轮廓,这就是 CardLife想要捕捉的感觉。当世界被颠覆者改变时,最终将发生这一切。

不太明显的机制和隐藏的卡片会自行解决问题。Tyrer 解释道:“如果您希望背面大幅增加,您可以彻底改变背面的这张卡片的中央部分并使其成为自己的一部分。但座位下方有一个没人能看得到的小圆片,有人画它毫无意义。它只是继承了您绘制的所有其他卡片的比例。您可以在 3D 预览中看到您的卡片有什么效果。”

您也可以对部件进行镜像和复制,从而省去一些繁琐的工作。如果您正在创建一个新角色和一条腿,那么您就不必再创建第二条腿;游戏将为您创建一条新腿。Tyrer 希望,这样可以让人们专注于制作很酷的东西和发挥自身创造力上。他不希望艺术和游戏玩法相互影响,所以不管你的创作看起来多么荒谬,它在游戏战斗中仍然是完全可行的。

美丽却致命

“我们在 Robocraft中了解到,与美观的机器人一样,艺术机器人的性能通常不及 Robocraft-y机器人。由于破坏模型的工作方式,Robocraft-y 机器人通常是一个顶部有大量枪支的块体。所以,让海绵宝宝* 这种动画人物看起来像一个有效的机器人很难。借助 CardLife,我们希望确保确保人们始终能够创造性地表达自己,而不必担心游戏玩法的影响。”

CardLife Game

PvE 服务器将在更新中添加,但战斗和 PvP 将仍然是 CardLife的一个重要组成部分。Tyrer 设想的场景是大型玩家围攻,由纸板制成的大型堡垒受到达芬奇风格的直升机、巫师以及拥有未来技术的士兵的攻击。可以制作的物品被分成技术领域,一直到科幻领域,但也有魔法和可制作的咒语。

Tyrer 认为纸板可以自由变换,从而将他从游戏类型中解放出来并设定惯例。“如果您正在制作 AAA 科幻游戏,则不能在游戏中添加龙。您可以添加到游戏中的参数取决于已有的科幻概念。您可以在 Robocraft中看到这一点。但在纸板中,如果我是一个玩纸板箱的孩子,没有人会跑来告诉我,我不能让龙与机甲进行搏斗。我可以。这就是它的出色之处。”

我应该通过积极探索和挖掘游戏来寻找新方案,而不是站在原地等待需要研究的技术。有时只是表面相同。Tyrer 解释道:“这更像现实生活。当您找到新材料并将其放入游戏中时,它会为您提供不同的制作选择。当您深入挖掘地下并找到稀有矿石时,这些矿石将与不同的方案相关联,然后这些方案将可以让您制作出更强大的物品。”

直到无限

与其他创意沙盒 Minecraft*不同,CardLife的世界不是程序化的。它是有限的,并以特定方式进行设计。如果您正在使用一台不堪重负的服务器并想要迁移到另一台服务器,那么您将面临同样不堪重负的服务器。不过,它可能看起来不一样,因为这些世界仍然是动态、可定制的。但它们也可以补充。

CardLife Game

Tyrer 表示:“如果您希望让有限的世界无限期运转,则需要补充。老玩家的结构将逐渐发生变化,自然灾害将重新填满洞穴或改变山脉,这是我们让世界无限期运转的方式。我们可以有一个正在改变和变化的世界,但也是一个人们可以了解和喜爱的世界。”

现在只有一个早期的设想。不过,CardLife的发展速度很快。三月初或更早可能会发布一个重要更新,该更新将引入装甲和武器统计数据,建立权限,以便您选择可以出去闲逛的对象或编辑您的结构以及物品耐用性。然后,两个月后又有另一个更新。

工作室尚未准备好宣布发布日期,并且仍在忙于观察其早期访问测试平台和规划新功能。卡片上的生物群落将更多,可探索的海洋也将更多。Tyrer 表示:“没有任何渠道被关闭。这包括平台,所以控制台发布不是不可能的事情。通过 Nintendo* 的 Labo 构建工具包,甚至可以将这个与 Switch * 之间的纸板连接在一起,虽然 Tyrer 嘲笑这个建议,但它们会很合适。这并不是不可能。

“我们只想将您能想到的所有出色元素集中并混合在一起。”

CardLife目前已在 Freejam* 上提供,很快将在 Steam* 上提供。

Stellaris 2.0*:重建银河系

$
0
0

原文由 Intel Game Dev 发表于 VentureBeat*:Stellaris 2.0:重建银河系。请访问 VentureBeat 的英特尔页面,了解更多游戏开发新闻和相关主题。

Screen of the Game Stellaris

随着 Stellaris*即将迎来二周年纪念日,来自 Paradox Development Studio *的太空盛大策略/4X 混合动力正在发生巨大变化。即将发布的 2.0*更新是该工作室最雄心勃勃的计划之一,也是该团队早在去年 4 月推出的 Utopia*之前一直在开发的产品。

游戏总监 Martin Anward 表示:“有人认为我们不能对这款游戏进行较大的更新,我对此表示怀疑。”“有人问我们为什么没有制作Stellaris 2。事情是这样的:如果您的房子需要一个新屋顶,您会翻新屋顶。但如果我们制作了 Stellaris 2,这就不是翻新屋顶的问题了,而是建造一座新房子。游戏比以往更受欢迎,所以我们没有理由不能做到这一点。”

更新的规模和附带的 Apocalypse DLCStellaris众多系统相互关联的结果。Paradox* 想要进行战争更新,但他们在不更改很多其他基本系统的情况下无法完成这一更新 - 这对星际基地和舰队运动至关重要。Anward 表示:“如果您启动了Stellaris 2.0,您仍可以将其识别为 Stellaris,但您玩游戏的方式,建造船只、扩张船队和操纵方式,都会改变。我们之前没有做过这样的事情。”

其中最显著的变化就是星际基地和扩张的运作方式。由于构建星际基地,边界曾发生动态变化。尽管这使得扩张看起来具有一定程度的有机性,但它会造成一些问题,比如如帝国被迫宣战,从而建立一个位于帝国边界内、帝国甚至不需要的一个星系。这意味着扩张是无计划的,因为整个空间都被帝国吞噬了,只是为了建立一块殖民地。

Anward 解释道:“整个殖民化和动态增长的边界均被经过权衡的慎重选择所取代。”然而,星际基地仍然牵扯其中,因为他们现在习惯于要求制度,边界不断变化以反映帝国控制的星系。Anward 指出,他们已经通过额外的机制加以完善,贸易和造船现在都属于他们的职权范围。

加速

Screen of the Game Stellaris

Anward 表示:“第二个支柱是战争与和平系统。"我们已经完全改变了战争的运作方式。我们有其他要求,我们有交战理由,我们改变了 FTL 类型 - 我知道这是一个有争议的决定,但它是必需的。否则,我看不出一种能够让战争变得很好的方法。”

Stellaris在启动时不同寻常,因为玩家可以在三种不同的 FTL 系统之间选择,这会大大改变舰队在银河系中的移动方式。弯曲速度很慢,但船只可以在任何地方行驶。超空间航道速度较快,但有限的船只沿着固定路线行驶。而虫洞允许船只在系统之间立即跳转,但只有拥有适当虫洞门的那些船只才能做到这一点。2.0 会废弃除超空间航道之外的一切。

Anward 解释道:“在当前版本中,战争方面最大的问题之一是你无法理解船队如何移动。所有这些不同的 FTL 类型有太多可能的变量。您不可能一下就知道敌人来自哪里。对于理论上的所有有趣部分,最终结果是很多船队四处移动,而您不知原因。

对于 Paradox 非常重要的一点是,玩家并不觉得自己失去了什么,却没有获得更多的功能来减轻损失。新的 FTL 系统已经允许该团队创建‘银河地形’。阻塞点、环境危害和星座岛会带来战略性问题,使空间更加有趣。玩家也将能够创造更有效的防御并为入侵做好准备,而不需要花费数小时试图应对三种不同的 FTL 类型。

最终,高端技术人员会让他们使用跳转驱动器和静态虫洞,但是会有限制和成本,这意味着它仍将可以更轻松地预测战争的走向。最终,玩家们仍然有很多选择,甚至可以在游戏开始时设置超空间航道密度,用路线填充空间,从而有效地复制弯曲 FTL 机制。这是一个选择,但 Anward 认为保持一些克制会更好。

清理空间

选择是任何 Stellaris更新的重要组成部分,并延伸到随附的 Apocalypse DLC中的付费内容。顾名思义,它充满了杀伤力巨大的毁灭性发动机和大量主力舰,但它不仅仅针对激进好战的帝国。当然,您可以减轻 Alderaan 的破坏,但是如果您玩的是灵性物种,例如您可以使用您的星球驱逐舰转换人口,而合成帝国可以用纳米机器人感染世界,将它们转化为半机器人。

Paradox 的方法是 DLC专注于添加受其他科幻世界启发的新东西,例如 Synthetic Dawn*的机器人帝国和现在Apocalypse的毁灭性武器,将核心变更留给免费更新。玩家可以免费获得重要特性,同时也可以简化开发人员的工作。

Anward 解释道:“我们通常会尝试遵循以下策略:如果这是我们日后想要创建的核心游戏,我们会尽量保证其免费。Ascension perks*就是一个很好的例子,它是一个付费游戏,但现在我们将其做成免费游戏,因为我们想要对其进行扩展。比如我们要创建付费的战争系统,这根本行不通。我们必须支持这两个系统,我们永远不可能知道玩家使用的哪个系统或在系统上建立机制。”

这也意味着,新玩家不必立即购买 DLC,只是为了了解游戏自 2016 年推出以来如何发展。Paradox 也一直试图通过 Twitch* 和 YouTube* 吸引新玩家。它拥有一个专门的视频团队,直播 Paradox Interactive 发布的所有游戏(不仅包括内部游戏)。最近,它播出了一个YouTube 系列视频,在这个视频中,YouTube 的Stellaris新玩家被丢入了一个新的银河系。Anward 认为,这可帮助新玩家更轻松地上手游戏。

“这是 Paradox 迄今为止最容易上手的游戏。如果您是从 《欧洲风云 IV》*开始玩的,您很快就会熟悉。现在 1444 年的法国。所有人都在邀请您加入他们的联盟,战争正在进行,历史在您取消暂停的那一刻展开。在Stellaris中,您从更易于管理的东西开始。您可以从几艘飞船和一个系统开始 - 您可以搞定它们。但这是相对的,仍然有人认为这些工作太多。”

《欧洲风云》*《十字军国王》*《钢铁雄心》*不同,Stellaris不仅限于过去。“我们不受历史的限制。它有时也是一个缺点,因为我们没有历史依据。我们不得不立足于我们在科幻比喻中的工作,但这样做确实能实现巨大的自由。我们可以做出任何想要的游戏。”

Stellaris 的 2.0更新和Apocalypse于 2 月 22 日推出。

Unreal Engine* 4.19 的 CPU 功能检测

$
0
0

Unreal Engine* 4.19 发布之后,许多特性针对多核处理器而优化。过去,游戏引擎在图形特性和性能方面采用控制台设计点。一般而言,多数游戏未针对处理器进行优化,这使得大量 PC 性能得不到充分发挥。英特尔与 Unreal Engine 4 的合作重点是尽快帮助使用引擎的开发人员释放游戏的潜能,以充分利用 PC 平台的所有处理器计算能力。

英特尔对 Unreal Engine* 4.19 的支持工作取得了以下成效:

  • 增加了匹配用户处理器的工作线程的数量
  • 提高了布料物理系统的吞吐量
  • 集成了对英特尔® VTune™ 放大器的支持

为了充分利用高端 CPU 的额外计算能力,英特尔开发了一款能提供详细 CPU 指标与 SynthBenchmark 性能指标的插件。CPU 功能可以使用该插件的指标来划分特性与内容。通过这种方式划分特性与内容将支持您的游戏运行于各种系统,并且不会对整体性能造成影响。

如欲下载插件,请访问 GitHub Unreal 功能检测页面。

Unreal Engine* 4.19 功能检测插件

借助功能检测插件,您可以访问兼容 C++ 和蓝图的帮助函数(面向 CPU)、渲染硬件接口 (RHI) 函数和面向 CPU/GPU 的 SynthBenchmark 性能索引。

表 1.CPU 检测函数

第三方函数蓝图函数描述
Intel_IsIntelCPU()IsIntelCPU()如果是英特尔 CPU,返回 TRUE
Intel_GetNumLogicalCores()GetNumLogicalCores()返回逻辑内核数量
Intel_GetNumPhysicalCores()GetNumPhysicalCores()返回物理内核数量
Intel_GetCoreFrequency()GetCoreFrequency()返回当前的内核频率
Intel_GetMaxBaseFrequency()GetMaxBaseFrequency()返回最大内核频率
Intel_GetCorePercMaxFrequency()GetCorePercMaxFrequency()返回正在使用的最大内核频率 %
Intel_GetFullProcessorName()GetFullProcessorName()返回长处理器名称
Intel_GetProcessorName()GetProcessorName()返回短处理器名称
Intel_GetSKU()不适用未使用

表 2.高速缓存与内存检测函数

高速缓存与 Memory 函数
第三方函数蓝图函数描述
Intel_GetUsablePhysMemoryGB()GetUsablePhysMemoryGB()返回可用的物理内存(GB)
Intel_GetComittedMemoryMB()GetComittedMemoryMB()返回占用的内存(MB)
Intel_GetAvailableMemoryMB()GetAvailableMemoryMB()返回可用的内存(MB)

表 3.渲染硬件接口 (RHI) 包装程序函数

RHI 包装程序函数
第三方函数蓝图函数描述
不适用IsRHIIntel()如果是英特尔 GPU,返回 TRUE
不适用IsRHINVIDIA()如果是 NVIDIA GPU,返回 TRUE
不适用IsRHIAMD()如果是 AMD GPU,返回 TRUE
不适用RHIVendorName()返回 GPU 的厂商名称

表 4.SynthBenchmark 包装程序函数

SynthBenchmark 包装程序函数
第三方函数蓝图函数描述
不适用ComputeCPUPerfIndex()100:一般、良好的 CPU, <100:较慢, >100:较快
不适用ComputeGPUPerfIndex()100:一般、良好的 GPU, <100:较慢, >100:较快

SynthBenchmark

使用 SythBenchmark 包装程序时需要注意,首次调用每个 ComputeCPUPerfIndex()ComputeGPUPerfIndex()都将产生少量的性能成本,同时计算性能索引。ComputeCPUPerfIndex()ComputeGPUPerfIndex()的首次和后续调用如果在运行基准性能测试时没有产生额外的开销,性能索引值将被缓存。对于游戏中依赖性能的部分,建议您在启动或加载界面的过程中调用这两个函数。

安装功能检测插件

1.从 GitHub*下载功能检测插件并打开项目文件夹。

Project folder caption

2.如果插件文件夹不在根目录中,请立即添加。

Steps to create the plugin folder

Plugin folder image

3.将功能检测插件提取至插件文件夹。

CapabilityDetect plugin folder

4.使用 .uproject 文件夹启动项目。

Steps to launch the project

5.访问主菜单中的 Edit > Plugins。加载插件窗口时,功能检测插件应安装在项目中。

Installed Capability Detect Plugin

现在,插件已安装完成,可以用它划分游戏内容与特性。下一节,我们将介绍 CPU 功能如何使用该插件划分特性。

Unreal Engine 4.19 特性划分

检测功能

为了借助平台配置划分特性,创建一个全新的 UDataAsset,并将其命名为 UPlatformConfigUPlatformConfig 将存储目标平台的特征,如物理内核数量、逻辑内核数量、可用的物理内存、处理器名称和/或 SynthBenchmark 性能索引。

#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "PlatformConfig.generated.h"
/**
 * Platform Configuration Data Asset
 */
UCLASS(BlueprintType)
class CAPABILITYDETECTDEMO_API UPlatformConfig : public UDataAsset
{
       GENERATED_BODY()
public:
       UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Platform Configuration")
       float CPUPerfIndex;
       UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Platform Configuration")
       FString Name;
       UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Platform Configuration")
       bool IsIntelCPU;
       UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Platform Configuration")
       int NumPhysicalCores;
       UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Platform Configuration")
       int NumLogicalCores;
       UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Platform Configuration")
       float UsablePhysMemoryGB;
       UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Platform Configuration")
       float ComittedMemoryMB;
       UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Platform Configuration")
       float AvailableMemoryMB;
       UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Platform Configuration")
       float CacheSizeMB;
       UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Platform Configuration")
       float MaxBaseFrequency;
       UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Platform Configuration")
       float CoreFrequency;
       UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Platform Configuration")
       float CorePercMaxFrequency;
       UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Platform Configuration")
       FString FullProcessorName;
       UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Platform Configuration")
       FString ProcessorName;
};

接下来,我们可以使用静态功能设置名为 UPlatformTest的类,以比较 UPlatformConfig的属性与插件检测到的功能。

#include "CoreMinimal.h"
#include "PlatformTest.generated.h"
class UPlatformConfig;
/**
 * Static functions for testing capabilities.
 */
UCLASS(BlueprintType)
class CAPABILITYDETECTDEMO_API UCapabilityTest : public UObject
{
       GENERATED_BODY()
public:
       UFUNCTION(BlueprintCallable, Category = "Capabilities")
       static bool CapabilityTest(UPlatformConfig* config);
       UFUNCTION(BlueprintCallable, Category = "Capabilities")
       static UPlatformConfig* GetCapabilityLevel();
};

CapabilityTest()函数将比较 UPlatformConfig与功能检测插件检测到的特性。在本示例中,我们将检查物理内核、逻辑内核和 SynthBenchmark CPU 性能索引是否超越传输至函数的 UPlatformConfig属性。

bool UCapabilityTest::CapabilityTest(UPlatformConfig* config)
{
    // True if system capabilities exceed platform definitions
    return
        UCapabilityDetectBPLib::GetNumPhysicalCores() >= config->NumPhysicalCores
        && UCapabilityDetectBPLib::GetNumLogicalCores() >= config->NumLogicalCores
        && UCapabilityDetectBPLib::ComputeCPUPerfIndex() >= config->CPUPerfIndex;

现在,我们已经找到了一个比较功能的办法,我们可以创建另一个函数来设置与测试平台配置。我们将创建一个名为 GetCapabilityLevel()的函数,并划分 4 个等级,分别是低、中、高和超高。我们将提供一个与特性等级对应的名称,为每个被测的配置指定物理/逻辑内核和 SynthBenchmark 性能索引。最后,由于我们使用大于等于号来比较 CapabilityTest(),我们将按照从高到低的顺序进行测试,并返回结果。

UPlatformConfig* UCapabilityTest::GetCapabilityLevel()
{
       // Create Platform Definitions
       UPlatformConfig *ULTRA, *HIGH, *MEDIUM, *LOW;
       ULTRA = NewObject<UPlatformConfig>();
       HIGH = NewObject<UPlatformConfig>();
       MEDIUM = NewObject<UPlatformConfig>();
       LOW = NewObject<UPlatformConfig>();
       // Assign Properties to platform definitions.
       // LOW - 2 Physical Cores 4 Hyper-threads
       LOW->Name = TEXT("LOW");
       LOW->NumPhysicalCores = 2;
       LOW->NumLogicalCores = 4;
       LOW->CPUPerfIndex = 0.0;
       // MEDIUM - 4 Physical Cores 8 Hyper-threads
       MEDIUM->Name = TEXT("MEDIUM");
       MEDIUM->NumPhysicalCores = 4;
       MEDIUM->NumLogicalCores = 8;
       MEDIUM->CPUPerfIndex = 50.0;
       // HIGH - 6 Physical Cores 12 Hyper-threads
       HIGH->Name = TEXT("HIGH");
       HIGH->NumPhysicalCores = 6;
       HIGH->NumLogicalCores = 12;
       HIGH->CPUPerfIndex = 100.0;
       // ULTRA - 8 Physical Cores 16 Hyper-threads
       ULTRA->Name = TEXT("ULTRA");
       ULTRA->NumLogicalCores = 8;
       ULTRA->NumPhysicalCores = 16;
       ULTRA->CPUPerfIndex = 125.0;
       // Test platforms against detected capabilities.
       if (CapabilityTest(ULTRA)) {
              return ULTRA;
       }
       if (CapabilityTest(HIGH)) {
              return HIGH;
       }
       if (CapabilityTest(MEDIUM)) {
              return MEDIUM;
       }
       return LOW;
}

C++ 中的检测功能

借助 UCapabilityTest类,现在我们可以确定 CPU 特性等级。我们可以使用来自 GetCapabilityLevel()的结果来划分 C++ 或蓝图中的内容。例如,如果我们创建了一个角色,便可以划分 Tick 函数中的特性。

// Called every frame
void AMyActor::Tick(float DeltaTime)
{
       Super::Tick(DeltaTime);
       UPlatformConfig* CapabilityLevel = UCapabilityTest::GetCapabilityLevel();
       if (CapabilityLevel->Name == TEXT("LOW"))
       {
              // Use Simple Approximation for LOW end CPU...
              // e.g. Spawn 100 CPU Particles...
       }
       else if (CapabilityLevel->Name == TEXT("MEDIUM"))
       {
              // Use Advanced Approximation for MID range CPU...
              // e.g. Spawn 200 CPU Particles
       }
       else if (CapabilityLevel->Name == TEXT("HIGH"))
       {
              // Use Simple Simulation for HIGH end CPU...
              // e.g. Spawn 300 CPU Particles
       }
      else if (CapabilityLevel->Name == TEXT("ULTRA"))
       {
              // Use Advanced Approximation for ULTRA CPU...
              // e.g. Spawn 400 CPU Particles
       }
}

蓝图中的检测功能

此外,我们可以将在角色的 Tick 函数中使用的 GetCapabilityLevel()函数应用于蓝图中,因为我们使用 UFUNCTION(BlueprintCallable) 属性对它进行了修饰。在本示例中,我们使用关卡蓝图并在 BeginPlay后调用 Get Capability Level节点。Get Capability Level节点返回的 UPlatformConfig值包含一个 Name属性。在 Switch on String 节点中,它可以用来划分您的等级特性。最后,我们只需将 CPU 特性等级的名称打印到屏幕上(图 1)。


Blueprint Capability Detect
图 1.蓝图功能检测

最后,我们介绍与功能检测插件一起封装的蓝图函数。借助该函数,您可以在蓝图中更细致地发掘平台细节。只需将检测功能节点添加至您的蓝图,然后利用游戏所需的值(图 2)。


Detect Capabilities Blueprint Node
图 2.检测功能蓝图节点

结论

随着现代 CPU 内核数量的增加,我们可以拥有更多的游戏功能。但是,相比配备高端系统的玩家,内核数量较少的玩家可能会处于劣势。为了缩小这种差距,可以使用 C++ 和蓝图划分特性。如前所示,划分特性将实现最大的 CPU 利用率,同时通过一系列平台配置帮助玩家维持固定的帧速率。

Spearhead Games*:从离开 AAA 级游戏公司到创建能够时间旅行的可伦坡

$
0
0

原文由 Intel Game Dev 发表于 VentureBeat*:Spearhead Games:从离开 AAA 级游戏公司到创建能够时间旅行的可伦坡。请访问 VentureBeat 的英特尔页面,了解更多游戏开发新闻和相关主题。

Spearhead Games

如同前几年突然出现的大量独立工作室,Spearhead Games* 的创始人 Atul Mehra 和 Malik Boukhira 最初也是 AAA 级游戏开发人员。他们在蒙特利尔的 EA 任职期间,接手了一个不太理想的项目,两人由此结识。

Mehra 回忆称:“我们曾经合作完成过濒临破产的项目。但是我们的合作纯属巧合;我准备离开 EA 时,一位在 Malik 工作的老朋友表示我们可以聊一聊,因为我们的想法是一致的。从那时起,我们开始考虑一起做些什么。”

然后,Mehra 去 Boukhira 家拜访他,当他看到原型时,感到非常兴奋。他告诉 Boukhira:“就是它了。”“我们辞掉了各自的工作。”

但是 Spearhead Games 在 4 个月之后才正式成立,并开始真正接手项目。问题出在什么地方?因为他们没钱。

他们进入了加拿大媒体基金,这是一个由政府和媒体资助的组织,旨在为加拿大电视与数字媒体项目的发展提供资金与帮助。竞争非常激烈,为了确保能够顺利申请到资金,他们以 Red Barrel 工作室创始人 Philippe Morin(《Outlast》)和 Minority Media(《Time Machine VR》)的名义呼吁朋友提供援助。

Boukhira 补充道:“他们帮助我们策划首款 CMF 应用,我们真的很幸运。我们通过这种方式为筹集到了首款游戏的资金。

我们是第一批从 AAA 级游戏公司跳槽并成立独立工作室的人,但是在我们之前已经有人这么做了。”“因此,我们从他们的经验、错误和成功中学习。现在,蒙特利尔已经有大约 100 家独立工作室,从那时开始暴涨。”

他们两人相信,这反映了城市社区规模的扩大,从 2010 年的约 20 家工作室发展到现在的 160 多家,Boukhira 和 Mehra 认为这是一个紧密联系的社区,工作室乐于彼此帮助。

除了所从事的游戏前景暗淡或者工作室本身存在问题(工作室在他们离开不久后关闭)之外,行业转型也是他们当初想要放弃 AAA 级游戏的原因之一。他们记得,10 年前,AAA 级游戏公司更像现在的独立工作室,但是随着项目和团队规模的扩大,它变得和以前大不相同,避免实验和冒险。

游戏开发的困境

Spearhead Games

Spearhead 的首款游戏就像他们的理想宣言。Mehra 回忆道:“我们想要在《小小大脑》*中尝试一些滑稽的元素。我们与一个不到 10 人的微型团队制作了一款 4 人在线合作游戏,我们决定收取费用,在 PC、PS4* 和 PS3* 上发布 6 种语言版本。非常简单。这就是我们的想法!有时,只有碰壁时的愚蠢才能阻止我们。”

虽然小团队会面临重重障碍,但是相比 AAA 级环境更有优势。Mehra 解释称:“小团队更容易管理。如果某人出了问题,我们会讨论这个问题,然后一起想出解决办法。但是 AAA 级游戏公司有数百名员工。必须召集领导,安排会议,开始有所行动的时候,已经过去了数天。它们的规模决定了它们只能采取这种方式。”

Spearhead 的灵活性使工作室能够在短短的 11 个月内迅速完成新游戏《Stories: The Path of Destinies*》的制作,这是一款动作角色扮演游戏,但是并没有带来收益。

《ACE – Arena: Cyber Evolution》是 Spearhead 推出的多人在线战术竞技 (MOBA) 类游戏。他们创建了科幻类的运动,为游戏添加了团队的风格。他们戏称这是一款 MOSA(多人在线战术竞技)类游戏。现在,他们认为游戏发布得过早,就连 Epic 也告诉他们如果他们现在发布这款游戏,将获得更大的成功。

Mehra 承认:“在 2014 年,人们没有做好准备。甚至 Twitch* 都没有做好准备。我们向 Twitch 提出了关于观众互动和交互式反馈按钮的提议,这样,作为一名流媒体工作人员,我能为观众提供参与的选择,所有人都可以投票,结果会返回游戏工作室,并触发事件。他们说不行,这是不可能实现的。”

现在,Microsoft* 的流媒体平台 Mixer* 正在做这个。

也许 ACE 将卷土重来;当然,这也是 Mehra 一直在考虑的事情,但是这并不意味着 Spearhead 为冒险的倾向而感到后悔。Boukhira 表示:“作为一家工作室,我们总是尝试做出改变,如创新或试验。作为一家独立工作室,重操旧业使我们失去了宝贵的机会,因为我们有机会尝试不一样的东西,也许是电子竞技、合作游戏或角色扮演游戏,但是总会出现转折。”

这意味着它们能够快速转向新类型,因为他们的游戏通过玩家与世界的交互联系起来,而不是类型。他们逐渐意识到,在他们解释游戏到底是什么时,确实无从下手。

对于《Stories》,任务相对简单。这是一款动作 RPG 游戏,玩家对它比较熟悉,比较容易描述。游戏的叙事和注重结果的跳时结构支持 Spearhead 进行试验,但是只需看一眼截图,便能了解它最终是一款动作 RPG 游戏。

预见

Spearhead Games

工作室的下一款游戏《Omensight》显示了他们如何学会维持志向与熟练度的平衡。虽然它不完全是《Stories》的续作,但是两者发生在相同的宇宙,在精神上一脉相承,因此,新游戏将获得粉丝的认可。它在机制上有很大的不同,当时间旅行与动作 RPG 格斗再次出现时,《Omensight》显得别具一格,它既是一款动作冒险游戏,也是一个谋杀解密游戏。

Boukhira 解释称:“作为一名先驱 (Harbinger),您的主要目标是侦破谋杀案。先驱是一名宇宙修理师;她是一位拥有神奇能力的强大战士。某人被谋杀了,您由此察觉世界将在夜幕降临时毁灭。您只有 12 小时的时间来拯救世界,时间紧迫。此时出现了时间循环机制:这是一款用于调查案件与延长时间的工具。您可以尝试修改一天的行程,来查看发生了什么,或者强迫人们遇到原本不可能遇到的人。”

Boukhira 将它比喻为可伦坡。这位抽雪茄、穿雨衣的侦探整天都跟着嫌疑人,不断惹恼他们。先驱和他一样,也会不断和他们纠缠,但是可以穿越多条时间线。

战争不断加剧,双方立志要毁灭对方,形势变得更加复杂。先驱可以与两派进行接触,甚至在不同的时间线内与任意一方联手。这意味着您可以从不同的角度看待战争,以及实验战争结果如何影响谋杀案。

两个派别中有一些主要角色 - 将军、战士、巫师,他们充当嫌疑人或者搭档。在战斗内外,他们都拥有自己的行为模式或性格。先驱的使命是影响这些行为,以尝试改变这一天的结果。这意味着玩家可能需要刺伤将军来获得某人的青睐,或与同一位将军联手,并帮助他们摆脱困境。

学习战术

Spearhead Games

在战斗上延续了 Spearhead 创建的《Stories》。Boukhira 解释称:“我们尝试在战斗系统中创建一个出色的动作流程,同时为玩家提供更多的创作空间和战术选择。例如,您拥有在自身周围构建一个慢速运动范围的能力,除您之外的所有事物均受其影响。这是一个非常酷的技能,因为您可以在他们被定格的时候发起袭击,但是它也为您争取了做其他事情的时间。就像您拥有了隔空取物的能力,可以抓住与移动环境中的物体。您可以冻结时间,在其他人被定格的时候改变环境。”

搭档也会改变事情的发展轨迹。他们可能在逃跑过程中利用他们的策略来消灭敌人,他们也可能与即将和您交战的一方成为朋友,使您至少在那个时间线上完全避开该战斗。如果您和另一位搭档接近他们,您的剑上也许会沾上鲜血。

最终,战斗只是您用来改变世界与侦破谋杀谜案的另一个工具。您无法交谈。先驱是一位无声的主角。这是一个古老的比喻,但是这次在机制中实现。Spearhead 想要玩家仅通过动作制定游戏决策。

但是,这并不意味着玩家无法交流。事实胜于雄辩。杀掉某人的敌人会让您的意图变得更清楚。游戏名称是 omensight,毋庸置疑,这是先驱最得心应手的能力。

Boukhira 表示:“Omensight并不只是游戏的名称,也是先驱掌握的重要能力。这是一个特殊的能力,支持您与主要角色共享预兆,并且您和他都知道这个预兆是真的。如果您向他们展示了令人不安的场景,可能会改变他们对世界的看法,然后您会看到他们做出截然不同的决策,如改变立场或为您提供帮助。”

无论您做什么,都是可逆的。这是团队最喜爱的时间循环系统部分,支持您随时回到并改变过去。每个动作都会产生结果,可能使世界发生剧变,至少会使您离案件侦破更进一步,但是您不会被这些结果困住。一旦您了解了情节如何根据您的动作而发展,这只是一个借助预知能力重新开始一天的问题。

发布日期还没有确定,但是 Mehra 笑着说,会在 2018 年发布,可能在下个月的某一天。它将在 PC 上发售,但是 Spearhead 正在商讨在其他平台上发布的事项。

如何使用 Unreal Engine* 构建自定义音频编辑器,在虚拟现实中实现音效空间化

$
0
0

woman in a virtual environment

概述

Epic Games 的 Unreal Engine*拥有一个强大的虚拟现实 (VR) 编辑器选项,但是该选项不具备在虚拟现实中编辑与放置音效的能力。调整音效后,必须不断重启编辑器,才能测试虚拟现实中的音效,这是件非常麻烦的事。因此,我们决定创建一款音效编辑器,以支持游戏开发人员与音效设计师在虚拟现实中快速放置、编辑与测试空间化音效。This will prevent the user from having to constantly enter and exit the editor.

woman in a virtual environment

系统要求

  • Unreal Engine 4.18.1 或更高版本
  • Visual Studio* 2017
  • HTC Vive*

您将学到的知识

  • 动作控制器交互
  • 如何创建一个自定义 C++ 类
  • VR UI
  • 保存编辑器修改
  • 音效空间化参数

下面,我们将从头到尾逐步介绍如何创建这款面向 Unreal Engine 的自定义音频编辑器工具:

项目链接下载

开始前,您需要做几件事。下载并解压项目文件夹。您还需要确保已安装 Unreal Engine 4.18.1 或更高版本。

下载并解压文件夹后,右击 Intel_VR_Audio_Tools.uproject 并选择“生成 Visual Studio 项目文件”(Generate Visual Studio project files)。完成后,打开项目。将出现“缺少 Intel_VR_Audio_Tools 模块”的弹出消息。单击“是”开始重新创建;应该耗时不到 20 秒。鉴于您动态查找添加至项目的 .wav 文件的方式,这是必要的,我们将在自定义 C++ 类章节中予以介绍。

设置虚拟现实播放器

我们首先从 Unreal 虚拟现实模板开始,选择 MotionControllerPawn 作为我们的 pawn,它的动作控制已设置,并支持通过远距传动移动。

动作控制器交互

动作控制器与 3D 小部件交互前,需要将 WidgetInteraction 组件添加至 VirtualRealityBP 文件夹中的 BP_MotionController。我们还需要为音效选择器小部件添加一个名为 soundScene 的场景组件。

widget, motion controller options screenshot

右触发器被启动时,Press 和 Release Pointer key 连接调用的事件。我们需要增加 MotionControllerPawn,它也位于 VirtualRealityBP 文件夹中。

screenshot of widget interaction with right controller

自定义 C++ 类

制作教程时,了解音效的名称和位置以及动态更新小部件以匹配所有文件是一个难以解决的问题,因此,需要重建项目。幸运的是,Unreal Engine 为我们提供了一些帮助。

IntelSoundComponent 是一个可以添加至任意蓝图的 C++ 类,用于动态定位与加载 .wav 文件至 USoundWave,Unreal 也是通过这种方式加载音效文件。

首先,右击内容浏览器并创建一个名为 IntelSoundComponent 的新 C++ 类。该操作创建了一个 IntelSoundComponent.cpp 文件和 IntelSoundComponent.h 文件。

接下来,我们添加定位与管理文件所需的 include。

在 IntelSoundComponent.cpp 中添加了 Paths.h, FileManager.h 和 Runtime/Engine/Classes/Sound/SoundWave.h(因为某些原因,SoundWave.h 前面的部分必不可少)两种 Include。

#include "IntelSoundComponent.h"
#include "Paths.h"
#include "FileManager.h"
#include "Runtime/Engine/Classes/Sound/SoundWave.h"

bool exists;
FString dir, soundDir;
TArray<FString> soundFiles;

// Sets default values for this component's properties
UIntelSoundComponent::UIntelSoundComponent()
{
	// Set this component to be initialized when the game starts, and to be ticked every frame.  You can turn these features
	// off to improve performance if you don't need them.
	PrimaryComponentTick.bCanEverTick = true;

	//Empty soundFiles TArray.Easiest way if new wave files are added.
	soundFiles.Empty();

	//the way Unreal Engine calls the project's root directory
	dir = FPaths::ProjectDir();

	//Combining Root with the folder location for the sounds.
	//This could probably be an external folder if needed with the help of ( IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); )
	soundDir = dir + "Content/Sounds";

	//UE4 returns a bool if the directory exists or not.
	exists = FPaths::DirectoryExists(soundDir);

}

代码块。IntelSoundComponent.cpp

现在,我们创建了一个名为 exists 的 bool、两个名为 dir 和 SoundDir 的 FString 变量和一个名为 soundFiles 的 FString TArray。由于 soundFiles 是一个 TArray,我们可以通过调用 soundFiles.Empty() 来清空 TArray。我们相信如果添加了新波形文件,这也是最快的方法。然后,我们将 FString dir 设置为 FPaths::ProjectDir();(提供了项目的根位置)。接下来,我们将 FString soundDir 设置为 dir + "Content/Sounds”,因为它是我们放置 .wav 文件的文件夹。FPaths 可以通过其他方法来检查目录是否存在,因此,我们将 bool 设置为 exists = FPaths::DirectoryExists(soundDir);。

// Called when the game starts
void UIntelSoundComponent::BeginPlay()
{
	Super::BeginPlay();

	//UE4 way of managing files
	IFileManager &fileManager = IFileManager::Get();

	//UE_LOG(LogTemp, Warning, TEXT("%s"), &fileManager);


	if (exists == true){

		//Extensions to sound files.Was using .wav, but .uasset seems to work when there is and isn't an editor.
		FString ext = "/*.wav";
		FString ext2 = "/*.uasset";

		//path = FPaths::ProjectDir() + Content/Sounds + /*.uasset
		FString path = soundDir + ext2;

		//This finds file in the given array, with the given path
		//the true bool is saying to look for files while false bool is saying to not look for directories
		fileManager.FindFiles(soundFiles, *path, true, false);

代码块。IntelSoundComponent.cpp

在 BeginPlay() 上,我们首先使用 IFileManager &fileManager = IFileManager::Get(); 对 IFileManager 进行实例化。我们的目标是调试与测试 .wav 文件是否能被 fileManager.FindFiles 发现,后者搜索 .uassets,而不是我们之前使用的 .wav 文件,因为 .uassets 在共享项目时更可靠。

//Setting soundFileArray to soundFiles to pass into blueprint.
void UIntelSoundComponent::soundArray(TArray<FString> &soundFileArray) {

	soundFileArray = soundFiles;

}

//loading a wav file as a USoundWave so Unreal can set the sound chosen with LoadObject<USoundWave> for blueprint
USoundWave* UIntelSoundComponent::setWavToSoundWave(const FString &fileName) {

	USoundWave* swRef;
	FString name = fileName;

	swRef = LoadObject<USoundWave>(nullptr, *name);

	return swRef;

}

代码块。IntelSoundComponent.cpp

最后,我们在 .cpp 中创建了显示为蓝图节点的两个函数。它们是 SoundArray(将 soundFiles TArray 传输至蓝图)和 setWavToSoundWave(我们花了一些时间才弄清楚,因为我们需要找到一个动态引用 .wav 文件的方法,这个方法必须为 Unreal 所理解,它是一个 USoundWave)。为了解决该问题,我们发现了 LoadObject。如果条件允许的话,该函数在运行时将对象加载至我们设置的任何类型。对我们而言,它是 LoadObject(nullptr, *name);—*name 是虚拟现实玩家选择的音效。

我们在 IntelSoundComponent.h 中创建了两个 UFUNCTION,以调用 .cpp 蓝图中的两个函数。

#include "CoreMinimal.h"
#include "Components/SceneComponent.h"
#include "Runtime/Engine/Classes/Sound/SoundWave.h"
#include "IntelSoundComponent.generated.h"



UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class INTEL_VR_AUDIO_TOOLS_API UIntelSoundComponent : public USceneComponent
{
	GENERATED_BODY()


public:
	// Sets default values for this component's properties
	UIntelSoundComponent();

	//Blueprint function to expose soundFiles into blueprint.
	UFUNCTION(BlueprintCallable, Category = IntelAudio)
		void soundArray(TArray<FString> &soundFileArray);

	//Blueprint function passing a wav converted in USoundwave into blueprint.
	UFUNCTION(Category = IntelAudio, BlueprintCallable)
		USoundWave* setWavToSoundWave(const FString &fileName);

代码块。IntelSoundComponent.h

向蓝图展示音效文件的蓝图函数。

screenshot of sound array widget

传输 .wav 文件的蓝图函数在 USoundWave 中被转换为蓝图。

screenshot of sound widget

设置 UI

我们需要设置 3 个 UMG 小部件。

screenshot of multiple widget set up

我们创建了用于管理这些 UMG 小部件的蓝图。

screenshot of multiple blue prints to manage umg widgets

我们为该项目配备了若干个小部件。选择音效后,AudioParamsSliderWidget 小部件将弹出。soundButtonWidgetBP 只是面向 Content/Sound 文件夹中音效的按钮部件。我们将 soundSelectorWidgetBP 小部件放在关卡中,具体方法创建一个名为 IntelSoundWidgetBP 的 actorBP,并使其获取来自 SoundArray C++ 节点的音效,然后使用 soundButtonWidgetBP 来填充 soundSelectorWidgetBP。(我们可以动态地完成,但是每次开始播放时,我们都会获得新生成的 actor 的引用。)这一切都发生在 IntelSoundManagerBP 中,我们从一开始也把它放在关卡中。

screenshot of sound widget
IntelSoundManagerBP

我们从上图中获取了 FString 的 soundFiles TArray,与此同时,分割.wav 的名称(音效名称)。我们将该字符串发送至 IntelSoundWidget 的字符串列,以命名动态填充的按钮。

screenshot of sound widget
IntelSoundWidgetBP

我们在 IntelSoundWidgetBP 中生成 soundUI,

screenshot of sound widget

添加音效,

screenshot of sound widget

如果我们不使用 Set Widget 节点,将生成小部件,但是它在游戏中不可见。

screenshot of sound widget spawned in VR environment

音效参数

玩家从小部件中选择音效后,将生成一个 IntelSoundAudioActorBP actor。我们在 actor 中看到了 AudioParamsSliderWidgetBP,如果单击 Spatialize?,将显示 3 个衰减设置,可以通过小部件对它们进行修改。

screenshot of sound widget - volume settings

screenshot of sound widget - volume settings

声音衰减本质上是指随着玩家的离开,音量减弱的能力。

graph

 

graph

graph

 

graph

显示的 3 个设置为衰减函数、衰减形状和衰减距离。

如果时间充足,可以显示更多设置。Unreal 中存在衰减设置结构的映像。

Unreal* attenuation settings

我们相信我们选择的 3 个设置是最基本、最需要的设置。我们现在正在研究如何在改变设置时显示调试行。我们正在尝试使用衰减设置调试行 Unreal 用例来显示游戏编辑器中的衰减,但是还未找到答案。因此,我们可能得到所选的衰减形状和函数的形状范围,并使用 Unreal 内置绘制调试行节点。

退出时保存

当我们退出游戏,生成了音效,移动它们并且运行了音频参数时,我们通过 IntelSoundAudioActorBP,使用 IntelSaveGameBP 保存所有重要的变量。

variables save UI
IntelSaveGameBP

screenshot of sound manager blueprint
IntelSoundManagerBP

screenshot of audio actor blueprint
IntelSoundAudioActorBP

如果一切正常运行,我们应该能够在虚拟现实中编辑文件夹中的任何音效。


2018 第十一届“英特尔杯”全国大学生软件创新大赛获奖作品

$
0
0

 

第十一届"英特尔杯"全国大学生软件创新大赛总决赛合影(点击查看大图

获奖作品展示

•  第十一届英特尔杯全国大学生软件创新大赛 — 特等奖(1名)

Davinci's Brush      同时荣获最具创业潜力奖&最具极客人气奖

团队:Turing      学校:山东大学

Davinci’s Brush 以“人人皆可画”为宗旨, 致力于基于深度学习的图像设计及处理服务。
Davinci’s Brush is based on the principle of “everyone can draw” and is committed to image-based design and processing services using deep learning technology.

Davinci’s Brush-项目开发文档      项目介绍视频

 

•  第十一届英特尔杯全国大学生软件创新大赛 — 一等奖(3名)

WiSmart      同时荣获最具创业潜力奖

团队:WirelessLife     学校:大连理工大学

WiSmart-基于人工智能和WIFI CSI的应用于智能家居的无源感知身份识别系统。
WiSmart:A Deep Learning Oriented Device-free Identity Recognition System via WiFi CSI for Smart Homes.

WiSmart-项目开发文档      项目介绍视频

 

Audink

团队:Seafaring_ChainNode      学校:山东大学

产品结合机械阅读和人工录制的优势,利用人工智能技术,帮助用户轻松打造优质的有声书。
Audink is an audio book service product based on artificial intelligence.

Audink-项目开发文档      项目介绍视频

 

Sketchdict

团队:ALU     学校:大连理工大学

Sketch.dict是一款基于草图识别技术的手绘创作软件,旨在利用深度学习实现手绘文化的复兴。
Sketch.dict is a sketch composing software based on sketch recognition technology.

Sketch.dict-项目开发文档      项目介绍视频

 

•  第十一届英特尔杯全国大学生软件创新大赛 — 二等奖(6名)

Hera      同时荣获最具创业潜力奖

团队:VicGlory     学校:中南大学

Hera 是一款实时提供全面、权威的婚姻纠纷案件解决方案,帮助咨询者维权的智能法律咨询辅助系统。
Hera is an intelligent legal advice support system that provides comprehensive and authoritative solutions to marital disputes in real time and helps consultants safeguard their rights.

Hera-项目开发文档      项目介绍视频

 

基于人工智能的乒乓球发球机器人      同时荣获最具创业潜力奖

团队:ing_master      学校:山东大学

这是一款云时代、人工智能时代的新型发球机。告别单调的训练模式,尽情享受人工智能时代带来的乒乓盛宴吧!
This is a ping pong robot in the AI era.

基于人工智能的乒乓球发球机器人-项目开发文档      项目介绍视频

 

Mashion

团队:kiwi    学校:上海交通大学

Mashion 是一套完整的个人时尚解决方案。在Mashion 中您可以一键解决“穿什么”的苦恼。
Mashion is a complete set of personal fashion solutions. In Mashion, you can solve the problem of "what to wear" with a single button.

Mashion-项目开发文档      项目介绍视频

 

形声

团队:Sirius      学校:中南大学

形声是一款基于深度学习技术通过动作识别为动作视频自动添加匹配的背景音乐的人工智能app。
Phonetic is an artificial intelligence app that automatically adds matching background music(BGM) to motion video through motion recognition based on deep learning technology.

形声-项目开发文档      项目介绍视频

 

微创手术支持系统

团队:Mercury      学校:武汉大学

我们借助互联网技术和人工智能技术,设计和开发了“微创手术支持系统”,它能够实现专家远程手术指导和智能手术预警分析。
An eHealth system for support in invasive diagnosis and treatment is designed and developed to realize remote surgery guidance and intelligent surgery warning using Internet technology(IT) and artificial intelligence(AI).

微创手术支持系统-项目开发文档      项目介绍视频

 

Clothed-partner

团队:四个菜鸡SQUAD    学校:北京理工大学

本团队设计并开发了一套基于深度学习模型的智能衣物搭配系统——Clothes-Partner,旨在为陷入衣物搭配烦恼的人们提供搭配建议。
Our team in order to solve this problem developed a model based on depth study of smart clothing collocation system Clothes-Partner.

Clothed-partner-项目开发文档      项目介绍视频

 

•  第十一届英特尔杯全国大学生软件创新大赛 — 三等奖(10名)

TryCatch

团队:Deep_silent      学校:山东大学

为提高城市监控管理的效率及信息的利用率,在当今算力大大提升,监控摄像普及的背景下,我们设计了这款可用于智能城市监控管理的反扒辅助工具。
We have designed this anti-­rolling aid that can be used for smart city surveillance management.

Trycatch-项目开发文档      项目介绍视频

 

Macdance

团队:蒂花之秀     学校:北京邮电大学

此项目通过用户输入的喜爱的音乐,将音乐通过深度学习训练好的模型来识别,让舞蹈初学者能够更容易、更方便的来根据自己喜欢的音乐来跳一段舞。
It makes it easier and more convenient for dancers to dance a dance according to their favorite music.

Macdance-项目开发文档      项目介绍视频

 

天眼

团队:Drchaser    学校:天津大学

在红黄蓝幼儿园虐童事件曝光后,“如何保障弱势群体的人身安全”这一问题再度被推上风口浪尖。针对这一问题,我们建立的实时的动作识别和异常检测模型。
To solve this problem,we have established real-time motion recognition and anomaly detection models.  

天眼-项目开发文档      项目介绍视频

 

Handwriting Assistant

团队:关中刀客     学校:哈尔滨工业大学

Handwriting assistant是一 款集字迹鉴定、古籍修复残文补全风格模仿等功能为一体的中文字迹风格辅助程序。
Handwriting assistant is Chinese handwriting style auxiliary program with a set of handwriting identification, repair, completion, residual paper imitates the style of functions.

Handwriting assistant-项目开发文档      项目介绍视频

 

贝贝儿童智能机器人

团队:MyRobot     学校:厦门大学

Babebay贝贝儿童智能机器人,是一款适用于 6-12 岁儿童,进行互动陪伴和情绪引导 的“高情商”智能机器人。贝贝独具三大特色功能,情绪识别,情绪记录和情绪引导。
Babebay is an Intelligence Robot which is suitable for 6-12 year-old children.

贝贝儿童智能机器人-项目开发文档      项目介绍视频

 

Face Tracker

团队:追猎者     学校:哈尔滨工业大学

Face Tracker是一款基于用户对人脸的印象生成目标人脸,并协助用户确定该人脸身份的应用。
Face Tracker is an app which can help the user generate someone’s face based on the the user ’s impression of of him/her and determine the the identity of the face.  

Face Tracker-项目开发文档      项目介绍视频

 

抑郁治疗师

团队:Image    学校:重庆大学

本项目旨在通过将深度学习应用到医疗界,解决抑郁症医疗领域中存在的主要问题。
This project aims to solve the major problems in the medical field of depression by applying deep learning to medical treatment.

抑郁治疗师-项目开发文档      项目介绍视频

 

iCuriosity

团队:Inno_Gear     学校:中南大学

iCuriosity是一款将深度学习技术应用于3-6岁幼儿教育领域,帮助孩子探索未知世界的App。其旨在激发孩子的探索学习热情、为语言学习奠基、降低幼教成本、促进亲子交流。
iCuriosity is a App that applies deep learning to preschool educationin 3-6,to help children explore the unknown world.

iCuriosity-项目开发文档      项目介绍视频

 

SG智能储热式电暖

团队:SGLife    学校:北方工业大学

本作品基于Intel/Caffe开发的深度学习技术,设计并制作了一款后台可合理规划储热时间、前端可选择智能供热模式的智能储热电暖设备。
This work is based on deep learning technology developed by Intel/Caffe, and designed and produced an intelligent heat storage and heating device with a back-end heat storage time and a front-end free heating mode. 

SG智能储热式电暖-项目开发文档      项目介绍视频

 

Ai画

团队:ICE   学校:华中科技大学

Ai 画是基于深度学习的儿童早教类app,通过识别绘画内容,即时反馈预测成果,结
合音频和视频辅助学习,提升幼儿认知能力。
It trains children’s cognitive ability byrecognizing drawing content and giving real-time feedback of what is being drawn, assisted withaudio and video contents.

Ai画-项目开发文档      项目介绍视频

 

合并蒙蔽遮挡剔除分层缓冲区,实现更快速的渲染

$
0
0

摘要

动态场景中的高效遮挡剔除可加速渲染,这使其成为游戏和实时图形社区的重要主题。由 J. Hasselgren、M. Andersson 和 T. Akenine-Möller 发表的一篇论文 蒙蔽软件遮挡剔除提出了一种针对支持 SIMD 的 CPU 进行优化的新算法,该算法剔除了传统遮挡剔除算法剔除的 98% 的三角形。尽管这种算法非常高效且准确,适用于许多用例,但仍存在启发法未充分解决的一些问题。在本文中,我们将对 Andersson 等人的先前工作进行补充。通过将场景分割为可以更好地拟合几何图形的局部动态范围并可以同时计算的多个缓冲区,从而解决了许多这些问题。然后,我们增加算法的丢弃启发法,并将部分结果缓冲区合并到一个新的分层深度缓冲区中,在该缓冲区上应用可以可靠地执行准确、高效的遮挡查询。

简介

蒙蔽软件遮挡剔除由英特尔的 J. Hasselgren、M. Andersson 和 T. Akenine-Möller 在 2015 年发明。它专为在适合游戏和实时图形社区的动态场景中进行高效遮挡剔除而设计。Andersson、Hasselgren 和 Akenine-Möller 在 2016 年随后提出的蒙蔽软件遮挡剔除算法的优势在于,它剔除了传统遮挡剔除算法所剔除的 98% 的三角形,同时比以前的工作快得多。此外,它仍可以充分利用 单指令多数据 (SIMD)指令集,与基于图形处理单元 (GPU) 的解决方案不同,它不会在系统中引入任何延迟。这对于游戏引擎开发人员非常重要,因为它可以使 GPU 免于不必要地渲染不可见的几何图形,渲染其他更丰富的游戏视觉效果。

Representation for the Intel castle scene
图 1.左侧:英特尔城堡场景中原始蒙蔽遮挡层次深度表示的可视化,黑暗离得更远;保守合并错误用红色突出显示。中间:城堡场景的游戏内视图,包括网格的边界框。右侧:使用两个单独分层缓冲区的合并来显示城堡场景的蒙蔽遮挡分层深度表示,准确性大幅提升。

该算法的更新版本 [HAAM16] 受到四片段合并 [FBH∗10] 的启发,该算法精度较低但性能较高,也被添加到蒙蔽遮挡库中。如果传入数据由前到后大致排序,则此方法效果最佳,这也可通过减少深度缓冲区中的透支来提高效率。

Typical workflow for Masked Occlusion Culling
图 2.典型的蒙蔽遮挡剔除工作流程。

图 2 显示了将蒙蔽遮挡剔除集成到游戏引擎中的典型工作流程。这个工作流程反映了传统的图形管道,并且已经被开发人员以这种格式使用,包括 Booming Games*Conqueror's Blade*,效果不错。

Masked Occlusion Culling buffer
图 3.Conqueror's Blade*的典型蒙蔽遮挡剔除缓冲区

然而,一些游戏工作负载显示,蒙蔽遮挡剔除效果较差的一个领域是在渲染具有明显深度重叠的超大网格时,因为重叠使得无法进行精确排序。经证明,这个问题在更新的 [HAMM16] 算法中特别突出。具体而言,在为广阔的环境渲染混合的前景资产和地形补丁时,问题就会显现出来。单个地形修补程序覆盖的深度范围很广,无法按照最佳顺序相对于前景遮挡物进行排序。这些间断是创建蒙蔽软件遮挡 HiZ 缓冲区时固有的,因为在建造缓冲区时用于丢弃图层的当前启发法不具备关于未来几何图形的足够上下文来保留最重要的数据。如果没有传入几何图形的完整上下文,启发法在深度选择过程中必须采取保守的方法,这会增加以后可见的遮挡查询的数量。这又意味着 GPU 不得不渲染最终被 GPU 剔除的几何图形,并且决不会对整个场景做出贡献。

为了解决这个问题,我们 [作者 Leigh Davies 和 Filip Strugar] 添加了将多个蒙蔽遮挡层次深度缓冲区合并到蒙蔽软件遮挡库中的功能。这允许开发人员利用分组场景几何图形和计算每个子组部分结果缓冲区的策略。选择子组是因为它们更紧密的深度值动态范围和以及几何分类行为。前景对象的子组和另一个地形对象的子组是常见情形。此类子组的部分遮挡结果稍后会合并到单个分层深度缓冲区中。部分缓冲区的这种合并使用现有丢弃启发法扩展来组合图层。

先前工作

蒙蔽软件遮挡光栅化算法与任何标准的两级分级光栅器相似 [MM00]。光栅化管道的一般流程如图 4 所示:

Masked Occlusion Rasterization Pipeline
图 4.蒙蔽遮挡光栅化管道,用于英特尔® 高级矢量扩展指令集 2(英特尔® AVX2)

三角形设置和图块遍历代码都经过高度优化,可高效使用 SIMD,可并行处理的三角形和像素的数量也不相同,具体取决于使用的 SIMD 的类型。蒙蔽遮挡剔除算法不同于标准软件光栅器有两个例外,下面将对其进行介绍。首先,它能够使用三角形边缘高效地并行计算整个图块的覆盖单元,而不是一次处理扫描线。

triangle rasterized on an Intel A V X 2 capable processor
图 5.在支持英特尔® AVX2 的处理器上进行光栅化的示例三角形。我们遍历三角形边界框所叠加的所有 32 x 8 像素单元,并使用简单的位操作和移位计算 256 位覆盖单元。

由于英特尔 AVX2 支持 32 位精度的 8 宽 SIMD,因此我们使用 32 x 8 作为图块大小,如图 5 所示(英特尔® SIMD 流指令扩展 2(英特尔® SSE2/英特尔 SSE4.1/英特尔® 高级矢量扩展指令集 512(英特尔® AVX-512)的图块大小将不同)。这使得算法可以非常高效地并行计算 256 像素的覆盖范围。

第二个区别是分层深度缓存表示,它将深度和覆盖数据分开,不需要存储全分辨率深度缓存。蒙蔽软件遮挡光栅化算法使用成本较低的混编重新安排遮罩,以便每个 SIMD 通道映射到更合适的 8 x 4 图块。对于每个 8 x 4 单位,分层深度缓冲区会存储两个浮点深度值 Zmax0和 Zmax1,以及一个表示每个像素与哪个深度值相关联的 32 位遮罩。在图 6 中可以找到由两个使用蒙蔽遮挡算法的三角形填充的图块的示例。

Tile fully covered by a blue and yellow polygon
图 6.在本例中,8 x 4 像素图块首先被一个蓝色多边形完全覆盖,随后被一个黄色三角形部分覆盖。左侧:我们在屏幕空间中看到的 HiZ 表示,其中每个样本属于 Zmax0或 Zmax1。右侧:沿着深度轴 (z),我们看到黄色三角形比蓝色多边形更接近。所有黄色样品(左)与 Zmax1(工作层)相关联,而所有蓝色样品与 Zmax 0 (参考层)相关联。

单层深度缓冲区的限制

鉴于我们每个图块只存储两个深度值,我们需要一种在每次三角形被光栅化(部分覆盖图块)时保守地更新表示的方法。参见图 7 中的伪代码,我们首先将 Zmax0分配为参考图层,该参考图层代表在图块中可见的最远距离,并且 Zmax <1> 值作为部分由三角形数据覆盖的工作层。

确定三角形覆盖范围后,我们将工作层更新为 Zmax1 = max (Zmax1, Zmaxtri),其中 Zmaxtri是图块边界内三角形的最大深度,并合并遮罩。当组合遮罩已满时覆盖图块,我们可以覆盖参考图层并清除工作层。

function updateHiZBuffer(tile, tri)
// Discard working layer heuristic
dist1t = tile.zMax1 - tri.zMax
dist01 = tile.zMax0 - tile.zMax1
if (dist1t > dist01)
tile.zMax1 = 0
tile.mask = 0

图 7.更新图块伪代码。

除了上面的规则之外,我们还需要一个启发法来决定何时放弃工作层。如图 8 所示,如果数据没有以完美的前后顺序进行提交,这有助于防止缓冲区中现有数据的轮廓通过更接近相机的遮光板泄漏。如上面的 updateHiZBuffer() 函数所示,如果到三角形的距离大于工作层和参考层之间的距离,我们会丢弃工作层。

蒙蔽遮挡更新程序旨在保证 Zmax0≥ Zmax1,所以我们可以使用带符号的距离来进行更快速的测试,因为如果当前三角形距离较远,我们不希望丢弃工作层。基本原理是深度较大的不连续性表示正在渲染一个新对象,并且连续的三角形最终将覆盖整个图块。如果工作层没有被覆盖,算法仍然需要保守地表示深度缓冲区。

Hierarchical depth buffer
图 8.顶部:分层深度缓冲区的两个可视化。生成左侧图像时不使用启发法来丢弃图层。请注意,背景物体的轮廓通过遮光板泄漏,在浅灰色的前景物体上显示为较暗的灰色轮廓。右图使用我们的简单图层丢弃启发法,保留了传统深度缓冲区几乎所有的遮挡精度。底部:我们的丢弃启发法应用于图 2 中的样本图块。根据我们的启发法,黑色三角形会丢弃当前工作层,并覆盖 Z1最大值。基本原理是深度较大的不连续性表示正在渲染一个新对象,并且连续的三角形最终将覆盖整个图块。

参考图 9,由于用于丢弃工作层的启发法未被触发,因为参考层在工作层后面很远,所以剩余的轮廓边缘通过遮光板发生了泄漏。在问题情况下,参考图层包含清除值,导致深度值的动态范围很宽。工作层用来自工作层和新三角形的最保守值进行更新。尽管连续的三角形最终覆盖整个图块,并且工作层可能使用了来自传入三角形的更近的 Zmax 值。

Single hierarchical depth buffer
图 9.仅使用单个分层深度缓冲区,在排序良好的场景中轮廓渗出。

去除地形上的轮廓渗出

图 9 显示了高分辨率轮廓渗出的最终效果。当靠近观察者的物体在包含远处物体和清晰颜色的图块中进行渲染时,将出现最突出的轮廓渗出情况。这是由于需要在图块层中保留最保守的值,且没有以后还可以渲染哪些内容的上下文。一个潜在解决方案是,仅在添加了新网格的全部数据时才将数据合并到一个图块中,但这需要能够在分层深度缓冲区中存储更多图层。

解决轮廓渗出问题的另一种方法是将地形和前景对象渲染到自己的分层深度缓冲区中,然后单独渲染它们。这可大幅减少分层深度缓冲区中的间断。前景物体几乎没有渗出,因为粗糙的前后排序足以确保三角形按照最适合掩蔽遮挡丢弃算法的顺序呈现。由于单个网格内的三角形的内部排序,地形存在一些渗出问题,但是这些更加局部化。图 10 显示了分离的分层深度缓冲区。这只剩下合并地形网格和现有前景对象的问题,以生成可用于剔除的最终分层深度缓冲区。

Castle scene with terrain and foreground objects
图 10.城堡场景与地形和前景对象在单独的缓冲区中。

合并缓冲区

添加到掩蔽遮挡 API 的新合并功能就是这样的,用第二个分层深度缓冲区,将数据合并到第一个深度缓冲区中。合并算法在相同的 8 x 4 图块基础上运行,使用与用于光栅化的合并启发法相同的 SIMD 指令,从而允许并行处理多个子图块。合并代码已针对原始合并算法 [AHAM15] 和更新版本 [HAAM16] 实施。合并算法的流程如下所述:

1.使用参考 + 工作层计算图块的保守深度值。对于 HAAM16 来说很简单,因为这是参考层,对于 AHAM1 稍微复杂一些。

New Reference Layer = _mm256_max_ps(Valid Reference A[0], Valid Reference B[0]);

2.比较缓冲区 A 层与新参考层的运行情况。遮掩未通过深度测试的所有图块 -用深度测试的结果更新新参考图层

3.将缓冲区 B 的工作层视为传入三角形。将缓冲区 B 层的运行情况与新的参考层进行比较 遮掩未通过深度测试的所有图块。如果传入的三角形比新工作层更接近观察者,则使用距离启发法丢弃第 1 层。使用传入三角形覆盖更新新遮罩。

计算 zMin[1] 的新值这是四项成果之一:

zMin[1] = min(zMin[1], zTriv)
zMin[1] = zTriv
zMin[1] = FLT_MAX
未更改

取决于图层是更新、丢弃、完全覆盖还是未更新。如果图块完全覆盖,将 zMin[1] 传送回 zMin[0],并更新遮罩。

在实践中,我们发现对于像城堡这样的场景,我们只需要使用两层;只需稍作修改,代码就可以组合多个缓冲区。最终的合并缓冲区如图 11 所示。原始轮廓问题已经完全解决。

Final hierarchical depth buffer
图 11.从合并的前景和地形缓冲区创建的最终分层深度缓冲区的可视化表示。

缓冲区的合并不能解决单个缓冲区的渗出问题,例如地形方面的内部问题。但它确实可以确保它们在被另一组几何体中的数据覆盖时不会向前传播。在城堡中,它们被前景物体覆盖。

表 1 显示了不同分辨率下合并算法的性能;性能与分辨率成正比,而用于合并 HI-Z 数据的代码使用与其余 MOC 算法相同的一组 SIMD 指令。这里提供的数据是使用英特尔 AVX2 生成的,因此可并行处理 8 个子图块,但这可以通过英特尔 AVX-512 扩展到最多 16 个子图块。

表 1.相对于分辨率的合并成本;性能在英特尔® 酷睿™ i7-6950X 处理器上测量得出。

 地形光栅化时间 (ms)前景光栅化时间 (ms)总光栅化时间 (ms)合并时间 (ms)合并所用的时间百分比
640 x 4000.190.6520.8420.0080.9%
1280 x 8000.260.7721.0680.0272.5%
1920 x 10800.310.8341.1440.0514.4%

合并功能会跳过不需要合并的图块,因为只有一个缓冲区在图块中具有有效数据作为优化。尽管有固定的数据集遍历成本来检查这一点,但掩蔽遮挡层次深度缓冲区的低内存占用空间是合并性能的主要原因。在 1920 x 1080 分辨率下,屏幕由 64800 (8 x 4) 个子图块组成,每个子图块只需要 12 个字节的存储。合并函数只需读取 760 Kb,而传统的 32 位深度缓冲区则超过 8.1 MB。另外,通过使用英特尔 AVX2,我们可以并行处理八个子图块。表 1 中的时间表示单线程性能。合并线程化方面的实验表明,由于受到内存限制,所获得的优势不多。在每秒运行速度为 60 帧的 PC 图块上,一个 1080p 缓冲区可以并入单个内核上一帧的 0.5%。

使用缓冲区合并来并行化分层深度缓冲区创建

掩蔽遮挡库已经提供了一种用于并行创建分层深度缓冲区的方法。通过使用图块渲染系统(即传入网格发送到作业系统且并行渲染),几何变换阶段产生的三角形输出存储在代表屏幕空间图块的分箱列表中,然后由每个线程的作业系统进行处理,从而对一个屏幕空间图块的几何图形进行光栅化处理。分层深度缓冲区的合并提供了一种替代方法,适用于更粗的粒度,并且不需要将几何图形存储在临时结构中。典型设置如图 12 所示。任务系统最初调度两个遮光板渲染任务,并创建一个在两个渲染任务都完成时进行触发的合并任务。

Potential multithreading setup
图 12.用于蒙蔽遮挡剔除的潜在多线程设置。

合并任务完成后,渲染应用的实际遮挡查询可以根据需要在任意数量的线程上发布。理论上,前景遮挡物渲染任务可以进一步细分。如果它们之间的工作量非常不均匀,如果每个附加任务的成本是一个额外的合并任务,并且合并功能可以进一步修改以管理多个缓冲区(如果需要),这可能是有利的。以这种方式进行线程化的一个额外好处是可以移除所需内存并节省相关带宽,无需写出变换和光栅化过程之间的几何图形。总体而言,这种将场景分割成两个或多个蒙蔽遮挡剔除缓冲区并使用独立线程处理它们的方法支持功能性线程模式,这种模式适用于不支持英特尔拼贴算法所需的细粒度任务系统的引擎。

结论

我们对蒙蔽软件遮挡剔除的扩展为您提供了一种灵活的解决方案,可以在不影响原始蒙蔽遮挡算法性能的情况下,为无法充分预分类的场景提高深度缓冲区的最终精度。我们方法中的合并时间与分辨率呈线性关系,并且与场景中的几何复杂度无关。在测试案例中,我们的方法仅占剔除系统所需总时间的一小部分。最终优势在于,我们的部分结果分组可以实现新的线程级并行机会。这些改进可提供强大、快速且准确的基于 CPU 的几何图形剔除。整体而言,这些改进大大降低了游戏引擎采用蒙蔽软件遮挡剔除的门槛,可释放 GPU 渲染资源,从而提供更丰富的游戏体验。

参考

[AHAM15] M. Andersson、J. Hasselgren、T. Akenine-Möller:图形硬件的蒙蔽深度剔除。ACM 图形交易,34,6 (2015),188:1–188:9.2, 4, 5, 8

[FBH∗10] K. Fatahalian、S. Boulos、J. Hegarty、K. Akeley、W. R. Mark、H. Moreton、P. Hanrahan:使用四片段合并减少 GPU 上的阴影。ACM 图形交易,29,4 (2010),67:1–67:8.4

[HAAM16] M. Andersson、J. Hasselgren、T. Akenine-Möller:蒙蔽软件遮挡剔除

[MM00] J. Mccormack、R. Mcnamara:在图形硬件中使用半平面边缘函数进行图块多边形遍历 (2000),pp.15– 21.2



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>