Vision引擎中 视区和遮挡入口介绍

来源:互联网 发布:2018全球人工智能大会 编辑:程序博客网 时间:2024/05/20 10:54
引言
使用建模工具,您可以设置和计算可视性信息,并立即在 vForge 中使用。 定位可视性信息后,您可以在 vForge 中计算整个场景的可视性。 对于室内场景,建议美工在 3ds Max 或 Maya 中定义遮挡入口。 遮挡入口是凸平面多边形,定义了一个区域,通过该入口,镜头可从一个”房间”(视区)”看到”另一个”房间”。 遮挡入口隐性定义了关卡的具体分隔,例如,可将一个内部空间与另一个内部空间隔开。

术语
    遮挡入口
遮挡入口是一个平整的多边形,类似窗户或门框,把两个视区连接起来。 遮挡入口通常有 4 个顶点,但也能有更多。 顶点数量越少,可视性判定速度就越快。

   视区
视区是分成一组的几何体集合(例如一间房间),用于判定该集合是否可见。 视区通过遮挡入口间接定义,可基于所放置的遮挡入口在导出时获得自动计算。 一个视区通过遮挡入口与另一个视区相连。

   漫溢填充
漫溢填充决定了几何体属于哪个视区。 这是导出时的计算步骤之一。 在漫溢填充过程中,每一个几何体都将被分配到一个视区中。 漫溢填充的工作方式是先找出接触遮挡入口的几何体、分配到视区中,然后对邻近几何体进行视区分配。

浮动几何体
浮动几何体是不连接到任何其他多边形的多边形。 因为漫溢填充处理的工作方式是从一个多边形扩展到另一个邻近多边形,所以必须使用一种特殊方法来判定浮动几何体属于哪个区域。

可视性处理的工作方式
为了计算场景的可视性,您需要在建模程序中添加几何体和若干正确放置的遮挡入口对象。 遮挡入口会在导出时自动切割几何体,将它们分成几部分,从而分配到不同的区域。 接下来,可视性处理器会判断每个几何体所属的视区。 因此要确保遮挡入口切割所有连接相邻房间的几何体,这点很重要。 您需要在几何网格导出期间启用可视性处理,以生成可视性信息。 有了遮挡入口和视区信息,引擎能够在运行时判断哪些区域可见,并略过不可见区域的渲染。 我们还会探讨在世界中使用单个几何网格和使用多重模块几何网格的可视性差异。

可视性在导出时计算,方法为分割接触遮挡入口的几何体,并”漫溢填充”接触该入口一侧的几何体和邻近的几何体,直到找到并处理构成该区域的所有几何体为止。 请确保您的房间或室内空间的外侧墙壁被密接,因为可视性计算只考虑共享相同顶点的连接几何体。 不属于任何区域的几何体(浮动几何体)会被连接到其所在几何体的区域(例如上文所述的完全密封的房间),然后从该处重新开始漫溢填充。 该步骤不断重复,直到没有剩余几何体为止。

  提示: 每个遮挡入口有两面(正面和背面),会被先后处理。 您可以在建模程序中开启背面剔除,判断哪一面为遮挡入口的正面。 当您需要以合并视区的方式解决可视性问题时,知道遮挡入口的哪一面是正面是有帮助的。
如果存在连接两个房间的三角形,则不同区域的几何体会被连接,其中的一部分会被分配到错误的区域。 这被称为可视性”泄漏”,因为一个区域漏进了另一个区域。 如果可视性处理器从某个遮挡入口的正面开始,最终抵达同一入口的背面,这被称为”循环遮挡入口”(因为正面和背面连接到同一区域),您必须找出产生泄漏的位置。 在很多情况下,这可能是因为某些靠近遮挡入口的几何体并非手动分割,或是被一个遮挡入口所分割。 在更难以判断的情况下,您需要调试信息来完成可视性处理。

在左图中,您可以看到一个遮挡入口和门廊正面处于同一位置,与其平行。 这类”深度冲突”会迷惑可视性处理器,所以您必须将此类入口移动到门廊中间,使其明确地与所有几何体相交。 您还应改变其大小,从而避免可视性估计过高,但依然要让遮挡入口与门廊内部多边形相交。 您可能还必须在线框模式或 x 射线模式下执行这一操作,以便切实地观察遮挡入口边缘的位置。

单一几何网格
这类场景由彼此连接的区域(例如房间)组成,并全部导出为单一几何网格(*.vmesh 文件),构成整个世界。 在此类场景中,您需要将遮挡入口放置在连接房间的门廊中,将不同的房间分隔成不同的视区。 您需要在几何网格导出期间启用可视性处理,以计算可视性。

对于此类场景,我们要在每道门廊中放置一个遮挡入口。 创建一个遮挡入口图形,缩放并移动,以适应门廊。 您要让遮挡入口尽可能小,同时依然覆盖门廊的所有内部截面。 遮挡入口越小,引擎渲染时能剔除的部分就越多。 要确保遮挡入口与连接两个房间的所有几何体都存在接触。

在左图中,您可以看到一张俯瞰图,显示了两个非常接近的房间。 如果彼此相邻的房间中有相互接触的多边形、或共享顶点,则可视性填充可能会将这些房间连通、造成”泄漏”。 建议您在毗邻房间之间留出一些空隙,如右图所示。 真实世界的房间也有类似的隔断,所有应该不会在建模时造成任何问题。 这样一来,编辑过程中在房间之间放置遮挡入口会更加容易。 除了能简化可视性处理之外,房间之间清晰的分断也能让很多其他系统(例如例如 AI、物理属性、光照……)获益。

当一条门廊连接两个区域时,必须注意确保维持区域的分隔。 操作方法为分割外部多边形,保留内部多边形不变,然后将遮挡入口放置在门廊中心。

模块几何网格
另一种建置场景的常用手段是使用模块搭建,而非一整个大几何网格。 本章节描述了模块几何网格的可视性操作,您可以在 vForge 中实例化这些模块几何网格,并将它们“拼合起来”。 在这种情况下,您将建置多个独立的几何网格,为每一个计算可视性。 记得在这些几何网格导出期间启用可视性处理。 如这些几何网格彼此相邻地放置在场景中,则 vForge 会计算最终可视性结果。

为了让其工作,您须在每一个几何网格块中放置一个遮挡入口,并将它们导出为单独的几何网格。 这些几何网格通常会有开放的门廊,通往毗邻的几何网格。 在这些遮挡入口彼此接触的位置,vForge 会连通可视性。 所以,如果您有两个模块,就必须在每个模块中放置一个遮挡入口,使其连通,最后,您所需的遮挡入口数量就比单一几何网格方案多出一倍。 因为一个几何网格会有多个出 / 入点,所以每个几何网格有多个遮挡入口也是完全正常的。 为模块放置遮挡入口时,您需要为每个遮挡入口关闭几何体分割勾选项,因为我们不需要分割几何体。 这可以防止导出器分割几何体、在连通位置产生不必要的视区。

如果您正使用模块,但已经在建模程序中编写场景,您可以在导出预建体文件时结合上述指导方针。 这将实现场景及其几何网格的自动导出,所以预建体文件将包含几何网格的实例信息,而几何网格会被分别导出。 请务必启用几何网格的可视性,将遮挡入口放置为其所属几何网格模块的子项,使入口连同模块一起导出。

添加遮挡入口
    在 Max 中添加遮挡入口
与 Maya 类似,在 Max 中,遮挡入口由其几何体节点上的特殊标记定义。 该标记可通过”节点属性”对话框完成,您可以从 Vision 导出器菜单栏打开,相当便利。 要标记节点为遮挡入口,选择节点,点击相应按钮打开对话框,然后从标为“Export as”(导出为)的下拉列表中选择”遮挡入口”。

为了给导出器提供帮助,您可以用遮挡入口的两面所通往的视区名称为这两个面做标记。 (见下方的命名视区)。 例如,将遮挡入口命名为“portal_kitchen_hallway”将创建一个从”ktchen”区域(遮挡入口正面)通往”hallway”区域的遮挡入口。 MaxTutorials 文件夹中有一个带遮挡入口的可视性关卡示例。

此外,3ds Max 导出器菜单栏还有两个按钮,可直接为您创建出已经标记为遮挡入口的平面几何体。

取决于您使用的按钮,这些平面为 XY 或 YZ 平面。 就像任何无限制几何体一样,它们可以自由缩放、移动或旋转。 

在 Maya 中添加遮挡入口
您可以使用 Vision 工具架中的按钮创建遮挡入口图形。 要确保几何网格节点有一个平面多边形。 要创建遮挡入口,就要标记应作为遮挡入口的节点。 标记的方式是通过”Vision 工具架”上的”Enhance node”按钮为导出器进行标记。

在标为“export as”(导出为)的下拉框中选择条目“portal”(遮挡入口),将节点标为遮挡入口。 这就是创建遮挡入口的全部操作。

命名视区(仅限旧导出器)
当有多个遮挡入口通往同一区域时,指定遮挡入口两面的名称有助于导出器判断哪些遮挡入口通往同一区域。 如果遮挡入口两面都有命名,导出器就可自动合并归属同一区域的几何体。 正面 / 反面的名称为可选,如果您命名,导出器会确保所有带有同一名称的遮挡入口都通往同一区域。 例如一栋建筑,每扇窗户都有自己的遮挡入口。 从外部看,每个遮挡入口可能都通往建筑内的不同区域。 但从内部看,每个遮挡入口都通往同一个外部区域。

遮挡入口选项

Single Sided(单面): 如启用,遮挡入口为单面,可停驻到其他单面遮挡入口上(在 vForge 中)。 所以,在走廊示例中,遮挡入口的 SingleSided=true,关闭一侧形成封闭系统,与外部不连通。 也就是说,所有通往外部世界的遮挡入口都应为单面。

Leads To Outside(通往外部): 通常与 singleSided=true 结合使用。 如启用,该遮挡入口被视为与外部世界连通,也就与停驻到其他遮挡入口的遮挡入口相反。

如果您想创建通往外部的遮挡入口,有两种可能的选择:

  通往外部的单面遮挡入口在 3ds Max / Maya 导出时仅在内部创建一个视区。 外部视区必须在 vForge 中提供,可以是已有的地形,也可以手动放置一个视区图形。 请注意,在默认设置下,可视性图形在 vForge 中不呈现,因为通常不推荐使用。 但如果需要,可在 vForge 设置中启用可视性图形(布局 / 呈现可视性图形)。
  不通往外部的双面遮挡入口会在 3ds Max / Maya 导出时在内部和外部分别创建视区,前提是该遮挡入口准确地分割了几何体的内部和外部。 在这种情况下,vForge 中不需要有地形或手动放置视区图形。

调试可视性

如存在任何可视性问题(即”泄漏”),您需要调整遮挡入口或世界几何体。 导出器会在几何网格文件的数据文件夹中生成一个 _debug.VISINFO 文件。 该文件可在独立的 vVisViewer 工具中载入。 该工具可通过互动的、分步骤的视觉化方式呈现可视性的应用情况,所以您可以找出泄漏的位置。

转自:project anarchy中文社区

0 0