薛定谔的空气墙?一文带你了解其背后的技术原理

2024-09-03 16:36

本文主要是介绍薛定谔的空气墙?一文带你了解其背后的技术原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

封面图

悟空来了都得撞墙?

目前,被称作“村里第一个大学生”的国产3A游戏《黑神话:悟空》发售已经有一段时间了,游戏采用虚幻引擎4技术,仿佛将传统与现代的界限模糊,玩家游玩时沉浸感极强。然而,游戏也有不少令人诟病的部分,今天要说的就是网上不少人吐槽的黑神话中的“空气墙”问题

“空气墙”指的是游戏场景设计中给玩家的视觉认知与操作反馈不统一的现象,具体表现为“这里看起来明明可以通行,但走近之后却被一堵无形的墙给挡住了”。

空气墙的存在只是问题的表象,因为它往往可以用来规避更大的问题。但与一般游戏防止跌落的悬崖边空气墙不同,《黑神话:悟空》中存在很多无意义的空气墙。比如如下图模型明明有个空缺,但人物就像是一直在撞墙,一直过不去。

《黑神话:悟空》中有趣的空气墙,来源:B站up主 LaSpeeee_

如果上面的空气墙属于无伤大雅,小打小闹,那么下面这种空气墙就比较逆天了,非常折磨玩家的游玩心态。明明眼前有那么大的场景看起来可以探索,制作者还是这块台阶前铺设了一排空气墙,就连两侧的空区域也无法通行。

《黑神话:悟空》中逆天的空气墙,来源:B站up主 BlaiteHe

有玩家戏称之为“薛定谔的空气墙”。“在撞到空气墙之前,永远不知道这里是通往隐藏的小路还是空气墙。不试一下又怕错过,试了又回让人有些失望。”

越是愿意探索,空气墙的存在感就越高,也在挫败着玩家探索隐藏的欲望。

游戏中空气墙的设立不是无缘无故,制作组肯定有其含义。个人推测是《黑神话:悟空》为了各种性能优化,砍掉了原本规划的游戏路线,导致原地图可探索部分被裁剪,又临近发售,所以只能在游戏中设置了空气墙。

空气墙为何会阻止玩家前进?这就要从从游戏中的物理碰撞说起。

空气墙背后的碰撞检测

游戏引擎中物体模型和其碰撞是分开设置的,玩家前进中遇到的各种石头、树木、建筑物等障碍物之所以会阻碍玩家前进,是因为在这些模型上添加了物理碰撞。如果模型和碰撞设置的良好,当玩家刚要撞到物体模型的时候,就会因为碰撞的阻挡而停下,这种情况就给玩家一种物理的真实感。

人物与墙的碰撞测试,来源:98K物理-轻量碰撞系统

碰撞检测是游戏碰撞中的一个重要算法,它模拟了现实世界中物体之间的相互作用,也是几乎所有游戏都要用到的一个算法。比如2020年的游戏《Control》(控制)中的碰撞检测就有出色的应用。

《Control(控制)》中的物理碰撞效果,来源:B站up主 施特劳斯Woo

被称为“车祸模拟器”的物理沙盒类游戏《BeamNG.drive》在不少玩家心中拥有全球最顶尖的物理碰撞模拟和损坏效果。网上也有不少游戏与现实车祸的碰撞对比,可以看到,《BeamNG.drive》在其独特的物理引擎的加持下,具有非常拟真的碰撞效果

具备优秀物理引擎的沙盒游戏《BeamNG.drive》中的汽车碰撞效果(下)与真实碰撞(上)测试比较,来源:B站up主 依然Dy

具备优秀物理引擎的沙盒游戏《BeamNG》中的汽车碰撞效果(下)与真实碰撞(上)测试比较,来源:B站up主 依然Dy

那么,游戏中碰撞检测的背后是什么原理呢?

试想一下,一个有N个物体的场景,如果我们对这些物体每两个之间进行碰撞检测,需要的计算复杂度是O(N²) ,这对于计算机显然是不能接受的.

所以我们将碰撞检测分成两个阶段来实现,Broad-Phase(粗略检测)和Narrow-Phase(精细检测)

Broad-Phase

Broad-Phase是碰撞检测的第一个阶段,其主要目的是快速筛选出可能相互碰撞的物体对。在这个阶段,游戏引擎会使用各种空间划分技术,如AABB(Axis-Aligned Bounding Boxes,轴向包围盒)、OBB(Oriented Bounding Boxes,方向包围盒)、Sphere(球体)等,来简化物体的形状,并将这些简化后的形状存储在一个易于检索的数据结构中。

模型包围盒种类,来源:haroldserrano技术博客

常见的空间划分技术包括Uniform Grid(均匀网格)、Hierarchical Grids(层次网格)、Bounding Volume Hierarchical(BVH,包围盒层次结构)等。这些技术通过将游戏空间划分为多个子空间,并将物体分配到相应的子空间中,从而实现了对潜在碰撞体的快速筛选。

下图是以BVH为例,建立的碰撞检测流程。

碰撞检测流程,来源:haroldserrano技术博客

Narrow-Phase

在Broad-Phase初步的筛选过后,我们选出所有可能会碰撞的几何体对,Narrow-Phase的步骤是再对这些几何体进行精确的碰撞检测,比如采用凸包作为边界的体积进行碰撞检测

模型凸包边界检测,来源:haroldserrano技术博客

在物理引擎中会用到各种各样碰撞体形状,有些形状的碰撞计算非常直观且简单,比如两个球形之间,判断两个圆心的距离是否大于半径之和,就能直接计算出是否碰撞.

其余的碰撞计算就不太直观,需要一些特定的算法,但是目的都是判断两个多边形是否相交,比如在游戏引擎中比较常用的是Gilbert-Johnson-Keerthi (GJK)算法

与许多其他距离算法不同,GJK算法不要求几何数据以任何特定格式存储,而是仅依赖于一个支持函数来迭代生成更接近正确答案的单纯形,使用两个凸形状的配置空间障碍(CSO),也被称为闵可夫斯基差来判断两个形状是否有交集

闵可夫斯基差中的面-顶点(Face-Vertex)碰撞类型和边-边(Edge-Edge)碰撞类型,来源:Wiki百科

地图引擎中的碰撞检测

在地图引擎中,碰撞检测技术同样扮演了重要的角色,也是渲染性能的重要组成部分。比如在二维瓦片、三维模型渲染之前,需要对其是否可见性进行判断,判断的依据就是根据模型的外包围盒进行碰撞检测,以此只渲染屏幕看得到的模型。这样做,大大提升了渲染性能。

Mapmost中碰撞检测应用之一——模型视锥体裁剪,来源:Mapmost引擎

碰撞检测在地图中的另一个重要运用是给标注添加避让效果。通过给定每个注记外包围盒,渲染时判断这些包围盒之间的距离是否小于某个阈值,小于了就只显示唯一一个,避免多个注记的重复叠加,影响用户的使用体验。

Mapmost中碰撞检测应用之一——注记避让效果,来源:Mapmost引擎

参考文献

https://www.bilibili.com/video/BV1PMWHeHEyb/?spm_id_from=333.880.my_history.page.click&vd_source=94abb2a8fc86022a0736e7f6850b4b2f

https://www.bilibili.com/video/BV1eSWpe3EBv/?spm_id_from=333.337.search-card.all.click&vd_source=94abb2a8fc86022a0736e7f6850b4b2f

https://www.bilibili.com/video/BV1Rf4y1J7WF/?spm_id_from=333.788.recommend_more_video.0&vd_source=94abb2a8fc86022a0736e7f6850b4b2f

https://mp.weixin.qq.com/s/7OG224y-uoA8ptLWzYzXrQ

https://www.bilibili.com/video/BV1T54y1H7Dm/?spm_id_from=333.337.search-card.all.click&vd_source=94abb2a8fc86022a0736e7f6850b4b2f

https://zhuanlan.zhihu.com/p/113415779

https://en.wikipedia.org/wiki/Gilbert%E2%80%93Johnson%E2%80%93Keerthi_distance_algorithm

这篇关于薛定谔的空气墙?一文带你了解其背后的技术原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1133457

相关文章

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争