Areaportal 教程

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)中文 (zh)Translate (Translate)




介绍

Areaportal 是一种将地图的一部分划分为单独区域的方法。如果您没有 Areaportal,则整个地图只有一个区域。Areaportal 的主要优点是,当您在一个区域内时,起源引擎甚至不会考虑在任何其他区域绘制任何东西,除非有一个入口在眼前——然后它只绘制通过 Portal 可见性叶子块中的东西。

一个封闭的 Areaportal,如已启用 mat_wireframe 所见。
打开时相同的 Areaportal。

例子

街道示例

例如,考虑一条满是房屋的街道。为简单起见,我们假设每栋房子都有一扇通向街道的门,没有窗户。此外,每栋房子都在(直的)街道的同一侧。如果你站在一所房子里,那么你可以看到房子的一部分,也可能是街道的一部分,但看不到任何其他房子的一部分。起源引擎甚至不应该考虑绘制任何其他房屋的任何部分,因为您不可能看到它。如果门是关着的,你就看不到街道,所以也没有理由考虑任何这些。

通过在门口放置一个 Areaportal,您可以实现这一理想。这就是会发生的事情。当门口(实际上是 Areaportal)从玩家的角度来看根本不可见时,游戏引擎不会考虑任何事情,除了当前区域:房子。如果门口视野内,引擎会查看它另一侧(街道)的区域,并找出通过门口可以看到哪些叶子块。然后它只绘制那些叶子块中的东西。在启用 mat_wireframe 的情况下查看时,效果可以被生动地说明。

此外,Areaportal 可以直接与门相关联(prop_door_rotatingfunc_doorfunc_door_rotating,但不是物理门),这样当门关闭时,引擎就不会费心去想它的背后是什么。总之,地图的这一部分变得几乎和地图中没有其他任何东西一样快。

小木屋示例 - 定义区域

以定义区域为例:假设我们要制作一个带有两扇门、四扇窗户和一个烟囱的小木屋,人们可以像圣诞老人一样进入它。假设我们已经确定这座建筑是我们想要变成它自己的区域的东西。要做到这一点,墙壁、地板和屋顶必须是世界笔刷(不是 detail 笔刷!),以便除上述开口外完全密封,防止泄漏。然后所有这些开口都必须被 Areaportal 覆盖:两扇门,所有窗户,以及烟囱中的某个地方。 Areaportal 在烟囱中的哪个位置并不重要,只要苍蝇不接触 Areaportal 就无法进入。(It doesn't matter where in the chimney the portal is, as long as a fly couldn't get inside without touching the portal.) Areaportal 是否与世界几何体的某些部分重叠并不重要 - 如果两个窗口并排,则可以拉伸一个 Areaportal 以覆盖它们(然后您可以对中间的部分使用 detail 笔刷,因为 Areaportal 正在密封这部分)。但是,如果门框与其 Areaportal 之间存在单个单元的间隙,则该区域不再密封,并且 BSP 程序会变得很慢,并且 Areaportal 将拒绝工作,直到您解决问题并重新编译。

一旦小屋开始工作(不是之前),在每个门口放一扇门并将它们连接到各自的 Areaportal。由于这是一个小木屋,我们将在窗户(用 func_door_rotating(en) 实体做的)中放置大(非透明)百叶窗并将它们连接到它们的各自的 Areaportal 。烟囱入口没有门,但这没关系,尤其是通过该入口的视野无论如何都非常有限。


另请参见