Zh/SteamVR/Environments/Introduction

== 开篇简介 ==
也许您是一个完全的初学者，刚刚开始研究Source 2引擎。 或者您是经验丰富的Source 1 mod开发人员，或者您是其他引擎的专家，无论是Unity，虚幻引擎还是您自己创建引擎-你所掌握的知识仍适用于起源2。 本文将为大家提供帮助-解释起源2引擎和开发工具背后的基本概念。
我希望您至少对计算机上的游戏渲染有所了解，也就是说，在3D模型上使用纹理，这些纹理具有模拟的光照和效果，并通过一些神奇的渲染过程施加了效果，从而生成了最终的2D图像。 起源2没什么不同–在底层，它是一个高性能的游戏引擎，并且其用于渲染3D场景的方法几乎是行业标准的-最终都是三角形，纹理和着色器。 演示和性能有所不同。
== 启动SteamHome创意工坊工具 ==
默认情况下，无论何时启动SteamVR本身，SteamVR Home都将运行。 但是，这将是一种特殊的，简化的“游戏”模式-所有与开发相关的部分都是“工具”模式的一部分。 为此，请单击小SteamVR状态窗口左上方的SteamVR菜单，然后单击创意工坊：创建/修改环境。
这将带您到Adddon(我喜欢叫：“项目”因为Addon本身就有插件的意思，插件在中文里指的是代码编译成的文件之类，而这里的Addon更像是Unreal 4里的“工程”)选择窗口。 如果您想直接创建一些东西， 就是为你准备的
== Addons（工程）以及游戏文件夹 ==
Addon是放置在基础游戏上的文件的集合-概念上类似于Source 1的mod（例如hl2文件夹css文件夹），但更适合在运行时之间进行切换。 您的文件将分为两种类型-源工程内容，其内容如下：
* Steam\steamapps\common\SteamVR\tools\steamvr_environments\content\steamtours_addons\your_addon_name
.. 以及编译后的游戏内容，这些内容非常相似，例如：
* Steam\steamapps\common\SteamVR\tools\steamvr_environments\game\steamtours_addons\your_addon_name
内容文件夹保存在您的计算机本地，不会被重新分配-当您将插件上传到创意工坊时，游戏文件夹中的内容将打包到名为.VPK的特殊文件中。
=== 依赖环境与资源包 ===
你只能使用自己制作的素材资源和SteamVR自带的少量资源开发，这太鸡儿可怕了，幸运的是，加载项可以加载他人分享在创意工坊中的资源内容。
你有没有想过你第一次进入SteamVR Home的美妙场景里面所用的资源都没有出现在素材浏览器当中？ 因为他被打包成一个 储存到从插件选择窗口中去了！ 当用户订阅您的地图时，Steam甚至会自动下载任何需要的依赖项。 请注意，依赖的内容不会复制到您自己的插件上，因此用户将无法使用任何本地资产包（Summit Pavilion除外）。
但是，为什么无论如何都需要对内容进行“编译”？
== 编译及其必要性 ==
原工程文件内容的格式通常不适合重新分发或快速加载和呈现。 以纹理为例
纹理可能是一个巨大的Photoshop文档，其中包含数十个图层-然后将其编译成特定于引擎的格式，以优化其尽快渲染。 它会丢弃不需要的所有数据（在这种情况下为所有这些层），将其压缩为渲染系统的着色器所要求的形式（在显卡上运行的小程序，负责处理屏幕上看到的所有像素） ），并且通常使其适合于尽快高效地加载和显示。
因此，内容中的所有文件都是您在其中放置或在SteamVR Home工具中制作的“友好”格式，而游戏中的文件通常是由内容中的文件生成的，并且全部由引擎直接使用。
通常，当磁盘上的内容发生更改时，引擎会自动重新编译（因此您可以将文件保存在Photoshop中，并像魔术一样更新所有内容）–还可以强制重新编译（当事情有些混乱时，比如说我偷图不小心偷过来一个Source1的纹理）。
== 贴图，材质，模型，地图 ---G胖也疯狂 ==
以下是所有文件的简要说明。
* Textures 贴图（相当于Source1中的vtf文件） –像素，并且通常来自图像文件。 墙上的一些砖块图像或法线贴图（精确的层面方向描述，用于模仿额外的细节？），或者其他多种可能性中的一种。 但是，要渲染，引擎需要更多有关像素实际含义的信息。 纹理通常是使用Adobe Photoshop，GIMP或类似软件制作的。 内容更新时自动重新编译。
* Materials 材质（相当于Source1中的vmt文件） – 所有这些贴图如何一起使用的描述，以便着色器知道所有内容的用途。 因此，对于砖墙，材料可能指向颜色图，法线图，光泽图（描述表面光滑度/粗糙度）等，并且您可能还有另一种版本的砖墙，该图具有不同的颜色图 但法线和光泽贴图相同。 
** Materials are set up in the aptly named .
** 每当您更改材质设置时，都会生成一个临时的新版本，并在保存时进行正确的重新编译。
* Models 模型（相当于Source1中的mdl文件） – 通常是由3D建模程序（例如Maya，Modo，Blender等）制作的，它们是由三角形制成的3D形状。 示例包括家具，树木，建筑物部分，甚至动画人物和生物-您在VR中看到的很多东西都基于这些3D模型。 这些模型制成的表面被分配给特定的材质，这些材质又指向要使用的适当贴图。 虽然通常使用外部软件来构建基础模型文件，但其在引擎中通常使用工具来进行处理
** 更改源工程内容时会自动重新编译-生成的已编译模型的各个方面可以通过其使用的材质来定义。 例如，具有简单，无光照材质的模型可以自动编译为不具有顶点法线以节省空间，但是如果随后更改材质以使用适当的照明，则需要强制重新编译模型。 同样，您更改材质以开始将辅助UV用于某些东西，可能需要重新编译模型以使其正确渲染。
* Maps 地图（相当于Source1中的Bsp文件） –从更多的角度对正在创建的世界及其所有内容进行三维描述，从照明到道具放置，甚至是将对象行为连接在一起的基本脚本。 您在SteamVR Home中在VR中看到的所有内容最终都托管在地图中-这是电影场景或舞台上发生的一切。
** SteamVR Home tools 使用 作为地图编辑器-它本身也是一个功能强大的3D建模程序。 地图可以包含在Hammer中创建的形状-例如，SteamVR Home，Summit Pavilion的默认地图，其架构主要由Hammer内部制作的几何图形构成。
** 地图不会自动重新编译-您始终必须先手动编译它们，然后再运行它们。 编译地图之前，您可能需要完成多个阶段（例如，建筑照明）–这些步骤都是单独完成的，因为它们可能需要花费相当长的时间，并且结果可以在许多情况下重复使用。
其他文件包括声音，粒子系统等-这些文件在您的Addon的内容文件夹中都有源版本，并且（自动或不自动）在您的插件的游戏文件夹中被编译为精简高效的版本。
=== 除此之外 ===
文件和游戏之间的这种“完美”分离确实会在某些地方分解–主要是由引擎直接使用的各种脚本文件。 这些文本文件放置在游戏文件夹中的某个位置–其中包括Lua脚本文件和Soundscape定义。 但是，除了这些例外，游戏中的几乎所有内容都可以从内容文件中重建。
== 实体，几何，实体逻辑等 ==
Hammer中的一个空白地图是VR的空白空间–几乎所有东西都放置在这里。 并且，除非您将内容添加到地图中，否则世界将完全空白。 但是可以放什么呢？
* Entities 实体 – 这些是引擎中的“事物”。 本质上，实体是计算机程序的特定实例，通常在世界上具有可见（和/或听觉）表示，并且将以特定方式对事物做出反应。 一个实体的例子可能是物理道具–它告诉引擎使用特定模型进行渲染，并且知道它应该如何应对玩家将其扔掉的情况。 另一个示例是鸽子，信息面板，光源或不可见的触发体积，它们告诉另一个实体在特定实体进入时执行某项操作。 甚至玩家也是一个实体。
* Geometry 几何 – 可能完全是静态的且没有响应-尽管从技术上讲，它仍然是幕后某个实体，但它更像是固定的架构，所有事情都在此之上发生。 您还可以将地图几何的特定部分绑定到特定实体-这告诉实体（例如，滑动门或旋转平台）使用该地图几何作为其可见的表示形式。 对于不可见的触发体积，地图几何块将定义其包围的空间。
* Entity Logic 逻辑实体 – 这是将地图中实体的行为粘合在一起的基本粘合剂。 简单的地图可能几乎没有实体逻辑，而复杂的游戏可能将各种事物连接在一起。 由输入和输出组成（与Source 1系统几乎完全相同，是改装爱好者），一个实体可能会遇到一件特定的事情（例如玩家将一只手放在指定的体积内），从而触发OnTrigger输出， 它连接到另一个实体上的输入，该实体告诉它执行其他操作。 例如，一扇门通过其“打开”输入被告知要打开，一盏灯通过其“ TurnOn”输入被打开，一声音通过其“ PlaySound”输入播放，或者被其FlyPath输入称为飞翔的鸽子。 每个实体可以具有一个输出列表，并且可以建立一个从其他实体调用的输入列表。. 这些功能依赖于 （国内开发者喜欢称为实体I/O） 请通读以获取更多信息-但请注意，这是Source 1教程，因此链接和详细信息通常会跳入不适用于SteamVR Home的主题。
== Source2让你远离泄露和密封空间（奥利给干啦兄弟们） ==
如果你是起源1开发者，不管你是建图师，模型师还是音效师，或者你只是工作室里打杂的，你可能都遭受过地图leak泄露错误或者必须密封地图造成vvis不堪负重。但是现在，Source2让你远离这些灾难，你不用在Source2里密封你的地图了！这意味着你可以自由创作并不用考虑泄露事故
感谢奇迹？继续往下看
== 光照 ==
许多人提到这种神秘的“照明”系统。 简而言之，引擎使用模拟来模拟现实生活中光线的外观以渲染对象-允许曲面对光源，环境照明等做出真实响应。 对象可以在自身和其他对象上投射阴影-正确设置后，光照可以成为地图的巨大视觉效果。 适当地照亮世界本身就是一门艺术。
== 脚本 ==
对于简单的行为和映射逻辑，您可能仅会使用基本的实体I/O；但是对于更复杂的事情（例如，将自己创建新实体的行为），则需要使用Lua脚本系统。 可以与实体和世界互动的成熟编程语言。 There's a if you want to know more, while there's also a .
== 控制台 ==
不是游戏机，而是用于控制大型老式大型计算机的终端的概念后代。 控制台是一个命令行界面，可将日志和消息中继回用户，并接受许多基于文本的命令来控制引擎内部深奥的功能。 起源采用单独窗口的形式–在运行工具的情况下，您可以通过按下键盘左上角转义键下方的波浪号（〜）或从右上角的“工具”启动控制台
起源2取消了内置控制台，采用外部EXE控制台程序
（为什么内部控制台没了，带着VR头显敲键盘，想想就cyberpunk----某位起源大佬的话）
默认情况下，它可能会尝试连接到错误的端口（这些大型机的另一概念遗留物）–因此，请单击“本地主机”选项卡左侧的“ +”按钮，然后在“端口”中输入29009，然后按“接受”。 窗口应该神奇地充满了彩色文本。 您现在几乎可以将其全部忽略。
要在游戏中打开外部控制台，请打开相应游戏的EXE程序
* Steam\steamapps\common\SteamVR\tools\steamvr_environments\game\bin\win64\vconsole2.exe
有时，教程会要求您输入控制台命令。 好吧，这就是解决方法。
== 多人游戏 ==
SteamVR Home免费提供多人游戏-无需其他设置即可让多个用户一起探索同一个环境。 从技术上讲，引擎使用客户端-服务器（C/S）体系结构，该服务器在托管该特定多人游戏机房的计算机上运行-其他客户端与该服务器通信以查明发生了什么，并使用自己的更改来更新服务器。 所有这一切都在幕后发生，并且在操作中应该几乎是无缝的。
但是，请注意，现实世界中的通信链路存在问题-延迟和带宽限制以及所有这些限制。 不要建立一个非常复杂的物理模拟杰作，并期望它能在多人游戏中高效运行-并且要知道，延迟对于较远的玩家来说可能是个问题...
== 性能 ==
如今，游戏计算机的速度非常快。但是VR在系统需求方面非常繁重–因此，就像不可抗拒的力量与不可移动的物体一样，必须付出一些努力。最大的计算成本之一是渲染场景–因此，两个双眼视图以每秒90帧的速度进行高清处理。而且，与在平板显示器上玩游戏相比，VR遗漏的帧非常明显且令人不快，这充其量是造成抖动和颤抖的原因。 SteamVR Home中的渲染系统和着色器经过专门设计，以实现尽可能高的效率，但是仍然可以使其过载。
SteamVR Home中使用的自适应保真度系统将动态启用和禁用渲染大小和功能，以从您的硬件中获得最佳质量，但是为了防止过度模糊，它不会低于特定水平。在“工具”模式下运行时，它将被禁用–仅在游戏模式下才被启用。 （为获得最佳性能，请在游戏模式下进行测试-Hammer之类的工具可以自行承担当前在VR中运行的事物的成本。）
以下是一些潜在的渲染成本：
* 几何图形太多! 太多固体和实体了。 对于基于摄影测量的场景，该场景几乎是一个巨大的，未照明的网格，上面带有一些巨大的纹理，实际限制为2-3个三角形。 超出此范围可能会开始导致帧速率在较少的硬件上下降。
* 太多贴图和纹理了！ – 太多的大纹理也会在较少的硬件上引起严重的性能问题。 最大值是600MB。 请记住，法线贴图，透明度贴图之类的东西也会相加-并增加您制作的内容的下载大小。
* 照明资源开销 – 动态光源过多而投射的阴影都增加了渲染成本。 尽管SteamVR Home中的照明系统非常高效（图形程序员一直敦促我向Summit Pavilion环境添加更多阴影聚光灯），但误解和过高预期可能会导致严重问题。 一些通用规则是：限制每个光源仅照亮所需的光源–将范围尽可能地扩大–且不要太多。 动态灯非常昂贵，因此请尽可能多地烘烤-有关照明系统的更多信息将在不久的将来出现！
* Expensive shaders – SteamVR Home中的标准着色器有很多选择，包括“铃铛”和“口哨声”（这是渲染器的名字）。 不要将它们全部打开，并希望在基本硬件上以帧速率渲染所有内容–特别昂贵的事情可能是具有多层透明几何体（经过alpha测试的几何体绝对不便宜，这要归功于一些超漂亮的抗锯齿功能） 。
**如果可以的话，找一个拥有入门级GPU的人来进行测试– Nvidia GeForce GTX 970或AMD Radeon RX 480是一个很好的基准。
（译者1050 4GB版都能轻松驾驭）
要获取当前渲染成本的最新视图，请在SteamVR中打开帧时序窗口：设置：性能：显示帧时序。 在啥也不干的情况下，底部的GPU图形应保持在11ms以下，底部没有弹出任何非零的红线–如果在游戏模式下运行，曾经超过11ms，自适应保真度应尽量最大化GPU的使用率，
如果您的CPU使用率跃升到11ms以上，则可能会遇到其他问题。 以下是一些潜在的CPU成本：
* 实体开销 – 它很有可能是地图中特定实体的某些方面，而不是所有实体的总数，但是如果您在某件事上比平时执行或创建了更多，那么可能值得进一步研究。
* 脚本开销 – 脚本必须在该帧上完成运行才能继续渲染，因此，如果您有复杂的循环和大量的逻辑，这些脚本可能会太昂贵。
* 复杂渲染 – 与直觉相反，由于绘图调用，即使GPU没有达到极限，您也可能需要很高的渲染成本。 如果您有许多不同的模型和/或材质，则CPU必须告诉GPU渲染每个模型和材质改如何处理，这会导致成本增加，而您拥有的东西更多。
* 复杂物理效果处理 – 同时在场景中拥有太多物理模拟的对象可能会带来可观的计算成本–尤其是复杂的碰撞船体与另一个碰撞时可能会非常昂贵，从而导致严重的帧丢失。 更多有关简化物理系统的信息！
== 关于VDC ==
最后，欢迎访问Valve开发者社区Wiki！ 本文档是一份永无止境的工作，由像您这样的人部分构建而成-每个页面都有一个讨论部分，每个页面都可以根据需要进行编辑和扩展。 如果您有任何答案，也请发布文章
也欢迎有英文基础的开发者汉化所有Source 2英文文章。
欢迎来到VR,未来即是现在！
Category:SteamVRCategory:SteamVR Home