人气 2771

[系统/框架/思路/玩法] FPS游戏是如何防止枪械与场景穿模的? [复制链接]

zxb05922 2018-2-24 16:01:57

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
前段时间玩《Squad》发现紧贴着墙壁或地面的时候,枪头会插进墙壁/地面,但是《使命召唤》《战地》系列就不会出现这种穿模的情况,请问这是怎么做到的?
回复

使用道具 举报

大发 2018-2-24 15:43:15
大部分fps游戏,你在第一人称下看到的自己的武器和手臂,其实和你看到其他玩家的武器和手臂并不是同一个。
换句话说,你屏幕上自己的手臂是只给你看的,这双手臂下甚至连个身体都没有。因为大部分fps游戏的视角其实是不“科学”的,摄像机其实是在人物肚子上的位置,目的是为了能看清武器和手臂动作,这么做也会防止玩家晕眩,这实际上是游戏性和真实性的取舍。
如果完全走真实省事的路线,可以参考骑砍的第一人称模式,玩家几乎看不到自己的动作,而且容易引起玩家头晕。据我观察绝地求生的第一人称应该也是这么做的,所以第一人称模式的手感很糟糕。
回到题目,实际上大部分游戏都没有从根本上去解决穿模问题,而是在渲染第一人称的视角时,玩家的武器和手臂永远是在其他物体最后渲染,这样看起来武器永远都不会穿模。所以在一些fps游戏中如果玩家贴墙站,会发现武器虽然看起来没有穿过墙壁,但是实际上透视已经不正确了,武器的部分阴影也会缺失,因为在场景中你的武器已经穿过墙壁了,在墙壁中的部分会接收不到正确的光照。
至于为什么有的fps游戏的武器会穿模而有的不会呢?是因为有的游戏的第一人称专门单独制作了武器和手臂,可以更改渲染顺序来避免穿模,部分游戏只是改了个相机的位置,所以无法避免。
部分游戏比如DOOM,在玩家靠近墙壁时会把武器抬起,此时玩家不能射击,也算是一种避免穿模的方法,但没有解决根本问题。
回复 支持 反对

使用道具 举报

Alonnaapocact 2018-2-24 15:45:55
目前最简单的办法是,放两个摄像机,第一个摄像机只拍摄手臂和枪械,第二个摄像机拍摄周围的环境。第二个摄像机绘制在第一个摄像机下面。
这个比较简单,但是也会有一些弊端,在Unity引擎下两个摄像机可能造成摄像机特效不兼容,并且会增加资源消耗。举个例子,如果想做武器光滑表面反射周围环境,一般来说给摄像机加上个SSR(高级屏幕空间反射: Screen Space Reflection) 就能解决,但是这个在两个摄像机下是无法实现的(当然用反射探针也可)。
另一种方法是让角色在贴近墙面的时候收起枪械,比如GTA5和PUBG,但是这个很容易出现BUG需要很多调试。
补充:
看了一下大家的答案,有些我是不能赞同的,所以给出了更详细的图文说明,注:以下只限于Unity引擎,其他引擎也许会有更优的解决方案。
首先,一般来说,枪械模型肯定是在角色的胶囊碰撞体外的。
DYUUSNA5lon8szHs.jpg


其次,在Unity引擎中,是不会给武器加入碰撞和物理的,因为武器的物理碰撞并不为对角色本身有任何影响,因为Unity的碰撞是在物体拥有Rigidbody的情况下才会发生的,而墙面和武器一般都不会添加Rigidbody。
下面是单摄像机和双摄像机的效果图
UGjw4l64ZJJ4jJgX.jpg


x9CLCSCw02RRksSC.jpg


角色在第一人称视角下和第三人称视角下看到的模型不是同一个。
下图是第一人称视角,可以看到任务正常的手臂变成了透明,角色的头也变成了透明,而前面出现了一个比正常大的多的手臂和武器。
Y3UFEyE3f773j722.jpg


下图才是正常第三人称视角下看到的
vx0OfE28B7VxJWj0.jpg




补充2:关于双摄像机
如下图的第一人称画面
bvkJOpVBhpJTyW7g.jpg


它是有两台位置相同的摄像机拍摄的,这两台摄像机在任何时候的位置和轴向都是一样的
第一台摄像机拍摄手臂和武器,因为设置此摄像机只拍摄weapon层的物体,下面是这个摄像机拍摄到的内容
qIyIML0rni2wfnfG.jpg


第二台摄像机拍摄的是除了weapon层的物体
YkLlQO6zL6T26ax8.jpg




而最终玩家看到的内容是两个摄像机叠加起来的内容,第一台摄像机的内容会绘制在顶层,
由于第一台摄像机只拍摄weapon层,所以即使武器手臂和墙体穿模了,第一台摄像机也拍摄不到墙体,依然拍摄完整的手臂和武器
a350cw0NlXUaG4xC.jpg
回复 支持 反对

使用道具 举报

DavidDug 2018-2-24 15:49:42
说说我的猜想吧。
相对与人体的特定位置用射线/box trace/overlap,得到大致上武器会不会碰到场景。
如果会碰到,简单的方法是直接切换为枪足够朝下的动画,胶囊体甚至起到了阻挡武器和场景接触的作用。
复杂一点就要算出一个合理的碰撞点,作为枪下压后枪头所在位置,用ik调整手腕、手臂姿势。
回复 支持 反对

使用道具 举报

Alonnaapocact 2018-2-24 15:53:41
如果你hack了camera,你会发现枪穿过了主角。
回复 支持 反对

使用道具 举报

lanshou 2018-2-24 15:57:13
R6玩家,贴着墙peek或者对枪的时候,枪会以一个相当诡异的姿势拿着,类似于扛在肩膀上,这样枪就拿的比较靠后。
这好像也能解释为啥子弹从瞄准镜里射出来(比如利用掩体对枪,把瞄准镜准心露一点出来,照理来说枪管还在掩体后面,但是却能向外射击),因为你从第三人称的视角看,枪拿的位置不一样了。
回复 支持 反对

使用道具 举报

蓝琦儿 2018-2-24 16:00:55
孤岛危机2里面,靠近墙壁会有把枪收起来的动作
回复 支持 反对

使用道具 举报

扶摇... 2018-2-24 16:04:23
好像说是守望先锋不穿模是因为所有能看到的部分包括枪械什么的都是做了模型有很细致的碰撞体积的…
不确定…可能记错了…
回复 支持 反对

使用道具 举报

Thomassourl 2018-2-24 16:07:21
其他答案说的很明白了,我来证实一下游戏中第一人称视角和第三人称视角是不同的
游戏《Portal》就是一个很好的实验品
既能看到第一人称视角又能在传送门的镜像中看到自己的第三人称视角
由于《Portal》在游戏中能看到自己,因此与《半条命2》的戈登不一样,主角是有建模的
RERhLFK75x3wlx3f.jpg


输入第三人称视角秘籍后的结果
nyzCcbxYJCx4wTpj.jpg


由于V社在制作游戏《Portal》的时候就考虑到了第三人称视角的问题,因此主角拿传送枪是看不出来什么问题的
然后输入秘籍调出《半条命2》的武器
LpNrLGnLQNl3ryzn.jpg


《半条命2》就没有考虑到这个问题,就很明显了
PS~这个手明显是戈登的
W6xtbRY7viLixroO.jpg


UA8kWZaB6A316U66.jpg


SFEc8c9l98o9mNOL.jpg


放大看就更明显了……
回复 支持 反对

使用道具 举报

zxb05922 2018-2-24 16:11:02
游戏引擎里有个东西叫碰撞体积。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-5-7 22:33 , Processed in 0.064684 second(s), 28 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.