This article relates to the game "Half-Life: Alyx". Click here for more information.
This article relates to the workshop tools for "Half-Life: Alyx". Click here for more information.
This article's documentation is for Source 2. Click here for more information.

介绍

From Valve Developer Community
Jump to: navigation, search
English Русский 简体中文

Half-Life: Alyx 创意工坊工具集

本文旨在解释《半衰期:爱莉克斯》游戏引擎和开发工具背后的一些基本概念。使用过《SteamVR Home》创意工坊工具的用户会有一定优势,因为这些工具采用的框架与《Dota 2》等其他游戏所提供的框架相同。不同的是:光照系统得到了极大的改善,其中ModelDoc是模型编辑器的全面改进版,标准着色器有所不同,并且还有更多的实体和内容可供使用。尽管并非全部都能直接适用,但本Wiki上的SteamVR Home创意工坊工具文档仍然可以为制作《半衰期:爱莉克斯》插件的人们提供一些有用的信息。

启动《半衰期:爱莉克斯》创意工坊工具

请查看创建插件

插件, 以及content和game文件夹

插件是一组文件,这些文件依靠于基础游戏上,其概念与Source 1的mod相似,但允许在运行时更改插件。 您的文件将分为两种类型-源文件(原始文件)和编译文件(处理或编译后的文件)。


原始文件位置

  • \Steam\steamapps\common\Half-Life Alyx\content\hlvr_addons\your_addon_name


编译文件位置:

  • \Steam\steamapps\common\Half-Life Alyx\game\hlvr_addons\your_addon_name


当您将插件上传到创意工坊时,content目录将不会上传,而game目录中的数据将打包到VPK文件中。

资产编译

Source引擎的资产通常以不太适合重新分发或快速加载和呈现的格式保存。例如,纹理可以是一个Photoshop文档,其中包含数十个图层,这些图层包含数百兆字节,它们将被编译成针对引擎优化的格式,以尽可能快地进行渲染。它会丢弃所有不需要的数据(例如,图层或标记数据),并将其压缩为渲染系统的着色器所要求的形式(在显卡上运行的小程序,负责处理屏幕上所看到的像素)使它适合于尽可能快速高效地加载和显示。

content文件夹中的所有文件都是对用户友好的格式,有的是被用户放在这里,有的则是在《半衰期:爱莉克斯》工具中创建,而game文件夹中的文件通常由content文件夹中的文件编译后产生,并且都能被引擎直接使用。

通常,当磁盘上的内容发生更改时,引擎将自动重新编译,从而允许用户在Photoshop中保存文件,并使所有内容都在材质编辑器和地图编辑器中进行更新。如果引擎没能发现变更,也可以强制重新编译。

基础文件 - 纹理, 材质, 模型和地图

  • 纹理 – 例如一张墙壁上砖块的图像,或者一张法线贴图 (准确地描述了表面的位置,用来模拟额外的细节),或者很多其他的可能性之一。纹理通常在类似于Photoshop之类的软件中制作,GIMP或类似的每当内容更新时就会自动重新编译。但是,要在游戏中渲染需要材质引用它们。
  • 材质 – 描述了所有纹理如何协同工作。对于砖墙,材质也许会指向一张色彩图,一张法线贴图,一张粗糙度图等等来明确在游戏中砖墙看起来会是什么样子。您可能会有一种可供替代的砖墙版本,虽然有不同的色彩图,但是有相同的法线贴图和粗糙度图。材质会整理所有这些内容,并允许对所有着色器输入进行简单配置。
  • 模型 – 在使用例如Maya,Modo或者Blender等3D建模程序中生成。这些是由三角形组成的3D形体,例如家具、树木、在建筑物上的细节以及人物或怪物。在《半衰期:爱莉克斯》中您会看到有很多东西是基于这些模型的。这些模型所用的面分配了特定材质,这些材质依次分配了要使用的适当纹理。 虽然底层模型文件通常使用外部软件构建,他们在引擎中的用途可被在 ModelDoc 里设置。
    • 更改content目录下的原始内容时将会自动重新编译 – 生成的编译过的模型的规格可以由它使用的材质定义。例如,有简单的未照明材质的模型可以被自动编译为没有顶点法线的模型以节省空间 – 但是,如果后续要更改材质以使用适当的照明,就要强制重新编译模型。类似的是,如果更改材质以开始对某些对象使用次要UV,就可能需要重新编译模型以使其正确渲染。
  • 地图 – 把它想象成您正在世界上创造的所有物品的容器。地图包含照明数据、放置道具的位置、何时何地播放声音,甚至是将对象行为链接在一起的基本脚本。您在《半衰期:爱莉克斯》中看到的一切最终都会被放到地图上 – 那是将会发生所有游戏内事件的电影布景或舞台。
    • 《半衰期:爱莉克斯》创意工坊工具集包含了 Hammer 来作为它的地图编辑器。
    • 地图不会自动重新编译,并且总是需要编译才能查看游戏内的变化。这个过程包括例如计算光照 和可见性。

其他文件包括声音、粒子系统等 – 这些在你content文件夹中的原始版本,将在该插件中的game文件夹下编译成精简、高效的版本。

文件分布规则的例外情况

有一些文件类型,例如引擎直接使用的各种脚本文件。这些文本文件放在游戏文件夹中的某个地方,并不会被编译。这些包括Soundscape定义、本地化文件等。

实体, 几何体, 实体逻辑与更多

在《半衰期:爱莉克斯》里,Hammer内的一张空的地图是一段VR体验的空白画布。这是几乎所有东西都被放置的地方,除非您把一些物品添加到地图上,否则世界将完全是空的。

  • 实体 – 每一个都事实上是自定义代码位,用于执行一组特定的指令,当用户与其他实体结合,互动时,这些指令允许用户在游戏中创建各种体验。他们在世界上几乎总是有一个可见(和/或可听见)的表象,并以特定的方式对事物做出反应。一件物理道具是实体的一个示例,用户可以在其中指定哪个模型应渲染为物理道具,它应如何响应玩家投掷道具的动作等。其中一些数据包含在Hammer中,可以编辑,而模型文件中包含特定于该模型的其他数据。另一个例子是NPC(猎头蟹,联合军士兵),光源,或一个不可见的触发体,当一个特定实体进入它时,它告诉另一个实体执行某事。
  • 几何体在Hammer中创建几何体 主要像固定的体系结构一样使用,所有事件都发生在它上面。您还可以将地图几何体的特定部分绑定到特定实体–这会告诉实体(如滑动门或旋转平台)使用该地图几何结构作为其可视化表现。
  • 实体逻辑 – 这是将地图中实体的行为粘在一起的基本粘合剂。根据实体的输入和输出定义,一个实体可能会经历一个特定的事件发生(例如玩家将一只手放入指定的区域中),这会导致它触发OnTrigger而输出。它连接到另一个实体上的输入,该实体告诉它执行其他操作,例如打开灯。有一篇关于 输入和输出 的文章,请注意,这是一个Source 1的教程,因此链接和细节经常会偏离到不适用于《半衰期:爱莉克斯》的主题,但核心理念是相同的。

光照

游戏引擎使用一种模拟光线在现实世界中的反应的方式来渲染物体以使物体表面对光线的反应更加真实。物体的阴影不止可以投射到其他物体上,同样也可投射到其自身表面上。光照是地图的一个重要组成部分,而且恰当地布置光源也是一种艺术。有一篇页面是对光照系统的总览性介绍,你可以阅读光照系统来对它的能力和限制进行了解。

命令控制台

简称为“控制台”,它是一个命令行界面,将日志和消息转发给用户,还能接受许多基于文本的命令,用于控制引擎内部的功能。它采用单独程序的形式,在工具运行时,您可以通过按键盘左上角Esc键正下方的平铺键(~)或在大多数工具窗口右上角的“工具”菜单来打开它。

性能

VR对系统要求非常严苛,因此在《半衰期:爱莉克斯》内构建内容时必须做出某些妥协。最大的计算成本之一是渲染场景,在本例中,两个高分辨率双目视图以每秒90帧的速度渲染。任何时候帧数下降,比平板显示器上的游戏更严重,在虚拟现实中丢失的帧可能是非常明显和令人不快的。在最好的情况下可能会导致闪烁,最坏的情况下可能会导致痛苦的视角抖动。《半衰期:爱莉克斯》中的渲染系统和着色器经过专门设计以变得尽可能高效,但仍有可能使其过载。

《半衰期:爱莉克斯》中使用的自适应保真度系统将动态启用和禁用渲染大小和功能,以从硬件中获得最佳质量,但为了防止过度模糊,它不会低于某个特定的级别。在工具模式下运行时,此功能将被禁用。它只会在正常的游戏模式中才会开启。应该在您的游戏模式下对插件进行适当的性能测试(而不是在后台加载工具时运行游戏)。

以下是一些潜在的高性能花销的地方:

  • 太多的几何体 在Hammer中放置太多静态道具或者地图中的建筑有太复杂几何体会造成帧率的下降。使用所提供的示例地图作为几何体数量的参照标准。
  • 高昂的照明 –有太多的光源索引(烘焙、预计算的照明)都会增加渲染成本。虽然《半衰期:爱莉克斯》中的光照系统非常高效,但误解和过度期望可能会导致重大问题。通常的经验告诉我们不要在一个表面使用太多的光源照射。虽然四个光源索引是硬性上限,但是仅使用一或两个光源索引会使游戏更加高效的运行。动态光源应谨慎使用,通常用于特殊情况,例如手电筒。
    提示:在Hammer工具的3D视图里有多种显示方式,使用右上角的按钮将 'Tools Visualization Mode' 切换至'Baked Lighting Complexity'。黑色表示0个光源索引,红色为1个,橙色2个,黄色3个,白色4个,青色是4个以上(应该始终避免这种情况,因为它将在烘焙光照时导致错误)。更多的信息在 光照概述 中提及。
    • 如果可以的话,以使用入门级GPU的用户作为地图评估的基准。(如Nvidia GeForce GTX 1060或AMD Radeon RX 580 6GB显存版本)

要想了解当前渲染花销的情况,可以在SteamVR>设置>性能>高级帧定时。简单那来说,对于90Hz的显示器,底部的GPU图表应该保持在11ms以下,没有任何非零的红线出现在底部 - 如果在游戏模式下运行,自适应保真度应尽量提高GPU的使用率,但它应该很少超过11ms。

提示:大多数有关性能的讨论将围绕毫秒展开,而不是每秒的帧数。维持90帧每秒只需略微超过11毫秒,因此“节省2毫秒”比“每秒节省5帧”更有意义,因为后者没有显示节省的绝对渲染成本。 你是从每秒10帧还是每秒1000帧开始的?

如果您的CPU图表经常超过11毫秒,那么还存在一些性能开销。以下是一些潜在的CPU开销:

  • 过多的实体 – 可能是地图中某个区域有太多实体,而不是所有实体总数。如果你的某样东西比正常时多很多,可能值得进一步去调查。例如,一个简单的盒子地图放置一百个联合军士兵,渲染起来可能很有挑战性,要是再加上AI路径,目标,掩体位置及世界的碰撞,就更是难上加难了。
  • 复杂的渲染 – 与直觉相反的是,即便Draw Call没有到GPU的最大值,也可能会有很高的渲染开销。如果你有许多单独的模型或材质,CPU必须告诉GPU去渲染每一个模型或材质,这会导致你拥有的东西越多,开销就越大。
  • 复杂的物理 – 在场景中同时有太多的物理模拟对象可能是一个巨大的计算开销,尤其是让一个复杂的碰撞体与另一个碰撞体相撞会有高昂的开销,导致帧数严重下降。 虽然示例地图里可能有数百个物理对象,但并非所有的物理对象都在同一时间活动。 在编译你自己的插件时,请牢记这一点。

示例地图

一些示例地图被放在了 \Steam\steamapps\common\Half-Life Alyx\content\hlvr\maps

  • workshop_examples 放有一些带有注释的《半衰期:爱莉克斯》功能演示地图。
  • release 放有最终游戏成品的全部地图源文件。

你不需要去重新编译游戏成品的地图。完整的音频和光照计算对于一般家用个人电脑来说会消耗大量的时间 - 但你可以通过地图扩展功能来对现有地图增加实体类内容。

文档

最后,欢迎来到Valve Developer Community Wiki!本文档一直都在编写中,并且是由像你一样的的人所建立 - 每个页面都有一个讨论区,而且如果你认为有需求,每个页面都可被编辑和扩写。如果你有任何疑问,请将其发在讨论区 - 如果你有答案,也请发出来!