Godot中的遮挡裁剪功能(occlusion culling)在箱子里就能用得很好,但是它有一个局限性。它只会隐藏网格(meshes),而对光源(lights)没有任何影响。从我所看到的来看,即使网格被隐藏,光源在渲染阴影时仍然可以看到它。由于Psych Rift主要是室内环境,网格的密度很高,尤其是光源。无论何时何地,你都可以看到光源(如灯泡等),都有一个全方位光源(omni light)。这很快就会累积到几百个全方位光源,几千个网格和刚性/静止/可动物理体(rigid/static/animatable physics bodies)中。为了保持性能并仍然目标我的目标,即在RTX 3060(高设置,原生1080p@60 fps)上运行,我创建了一个自定义系统,能够隐藏光源。 我的关卡是由我称为“块”(block)的场景构建的。一个块代表一个单独的关卡片段,例如一个单独的房间或一个走廊的部分。这些块都连接在一起,形成整个关卡。除了常规的遮挡裁剪外,我系统还使用VisibleOnScreenNotifier3D节点来检测块是否不可见给玩家,并可以隐藏,包括光源。当一个块被隐藏时,所有刚性体都被禁用,以帮助物理引擎在搜索碰撞时(地板和墙壁保持开启,因为可能仍然有怪物在那些区域移动)。这不是完美的(遮挡裁剪不是“空气密封”的,通常会有泄漏),并且还有改进的空间,但是它总体上能做到。可以通过在无线框架模式下运行时看到灯光仍然打开,因为它们照亮了雾。 (这段视频是由两个叠加的录制文件制成的,但它们不完全同步,所以可能会在某些时候看起来有点抖动) 你可以在YouTube上找到更多视频,或者在Steam上添加游戏到你的期望清单,或者加入Discord进行交流。
遮挡系统以保持我的游戏Psych Rift的性能
评论 (0)