门户流将所有内容整合在一起

这是“Demystifying the PVS”系列的第四篇也是最后一篇。主要内容如下:

  • 系列内容概述:已构建有向门户图,计算每个门户的可能可见叶列表,学会通过三个门户序列估计可见性,将三者混合得到最终叶到叶的可见性。
  • 递归裁剪示例:以三个门户(源、通过、目标)为例,通过裁剪测试门户序列的可见性,深度优先遍历从目标叶开始,递归进入相邻叶。

    • Python 中的门户流portal_flow函数启动遍历,leaf_flow函数递归处理叶,通过一系列裁剪和判断来确定可见性,mightsee数组记录过滤后的门户到叶的可见性。
    • 完整实现:代码实现了门户到叶的可见性矩阵计算,包括裁剪、过滤、早期退出测试等,处理过程中考虑了门户的循环和稀疏性。
    • 按复杂度处理门户:按复杂度(粗粒度可见性中可能可见的叶数量)顺序处理门户,先处理较小区域的门户,以利用其最终结果进行早期退出。
  • 通过门户的叶可见性:叶的潜在可见集是其离开门户的 PVS 集合的并集,通过逻辑或操作计算最终的叶到叶可见性矩阵final_vis
  • 游戏中的应用vis工具将最终叶到叶的可见性矩阵写入mapname.bsp文件,游戏中按需解压缩,节省内存。
  • 提高速度的方法vis.py速度较慢,可进行多进程处理、使用边界球测试、更快地过滤mightsee数组、缓存等优化。
  • 回顾与思考

    • 预计算可见性使 Quake 地图在保持稳定帧率的同时增加多边形,PVS 在 Quake 及其后续作品中广泛应用。
    • 工作流上,PVS 不佳,设计师需等待游戏测试,且需考虑无关技术概念;营销上,稳定帧率有助于销售虚幻世界的幻觉,但可能导致游戏设计受限。
    • Doom 3 采用运行时测试门户和加载时 PVS 的方法,速度较快,但仍需放置门户和密封关卡。
  • 资源与参考:提供了vis.py仓库、相关工具、原始代码参考、视频资源以及测试地图和门户数据等。
  • 致谢:感谢相关人员的帮助和支持。还考虑写一本书并征集感兴趣的人。
阅读 8
0 条评论