3D游戏中镜头的运用

Posted zhangxiaofan666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3D游戏中镜头的运用相关的知识,希望对你有一定的参考价值。

关于相机移动

2D镜头分析:

最开始的游戏采用固定位置的锁定(相机和玩家的位置保持锁定 )

后来演变成了固定方块外再镜头移动

有的采用跳到一个平台后再移动相机

有的游戏屏幕中间有两条线,当角色移动到线的边缘时,相机开始移动

 

线性插值的方式(Lerp)

通过计算相机和角色之间的距离来缩小彼此的距离

基于物理的平滑

应用于相机本身来再次运动,平滑阻尼等系数

3D游戏中开始对相机添加了一定想倾斜,Zoom,平移等效果

后来的某些游戏中加入了吸引子的概念,镜头的中心不再一直聚焦主角,而是会聚焦一些提示性的东西,无声的对玩家做出一些引导

有的采用竖直锁定,水平Smoothing

某些游戏中根据两个物体间的距离控制镜头的Zoom

 

对于镜头设计的一些建议和技巧

1.相机距离(假设角色是下图的红点)

(1)固定角度的第三人称相机(代表下图左一)

(2)动态第三人称相机(下图左二)

(3)第一人称相机(下图左三)

镜头运用的建议:

早期的马里奥使用的镜头处理是当角色旋转时,镜头也跟着旋转

后面的马里奥采用了固定视角下的相机,当角色旋转时,镜头的角度还是固定的

2.设计的关卡要和相机的行为吻合

如下图可以看到,设计者要玩家体验一个第一人称视角下的马里奥,在左侧又以正交相机的2D形式显示给玩家以提示,玩家一边要跳一边看左侧在2D中的效果。这样的设计就不太好

3.玩家可能会用欧拉角思考相机角度,但程序使用四元数来更新相机的状态

一个相机应该包含7个数据

(1)相机yaw,pitch,roll角度

(2)相机距离pov的距离

(3)水平和竖直方向的偏移量

(4)fov(Field Of View)

4.使用固定距离的相机意味着视野被遮挡

相机和角色之间的距离越小,越容易去避开视野遮挡

5.通过转动相机防止视野被阻挡

如图所示,红点代表人,后面的相机可以检测角色和相机之间的遮挡从而转动相机角度达到比较好的效果

例子(当障碍物即将打破视线时,抢先躲开)

6.将相机拉近到障碍物跟前

这种方法也可以防止打破视线

用简单球形碰撞体用作相机的碰撞检测

7. 让狭窄的障碍物中不阻断视线

8.当游戏注视天空时,相机的视角会过度到鸟瞰

FOV和Rotation的改变

9.角色穿过不透明的区域

如下图所示,进入一个不透明的瀑布时,立即切到另一个瀑布内的镜头

10.镜头的切换的坏处

如上图所示,虽然切镜头可以解决角色进入瀑布的一瞬间玩家看不到角色的情况,但是有一个问题,玩家在切镜后的一瞬间会迷失方向

进入瀑布之前,上为前进的方向,但进入瀑布后,左为前进方向,这会让玩家适应一段时间才能反应过来(尤其是像我这种中老年玩家)

如果相机一定要切镜,避免改变角度超过90度,并尽量保持地标在视野内。

11.尽量自动的让镜头移动到合适的方向

如下图所示,好像玩家操控镜头一直在摇晃一样,缺乏对镜头的自动指导,因此镜头应尽可能看玩家想要看到的地方

12.根据表面的法线去区分相机的角度(上坡下坡)

13.对于一些特殊地形的镜头处理

14.对于附近目标的镜头处理

下图蝙蝠侠会根据附近的玩家自动转换镜头方向,如果两个目标距离很近,那么镜头会一直旋转,容易给人迷惑

在风旅中,使用Zoom而不是旋转,更加优雅

15.使用Camera Shake

增加一定的打击感

16.让镜头的摇晃符合Avatar行走的节奏

这样会让游戏更真实,但是会让某些人感到恶心

17.通过镜头表现角色的感情

比如古墓丽影的Lora在穿过一个木板时,镜头面向角色的脸部给了一个特写

比如lora猎杀鹿的时候特写表现了她的伤心

比如在走过树干时,通过镜头的晃动和震动表现道路的艰难

比如AI死亡时镜头的凝视

比如Lora拉门时通过镜头的缩放体现力量

比如Lora跳到悬崖另一端时力量的冲击

运用镜头强调Lora的反应

Lora在过桥时镜头的offset和rotation

 

古墓丽影中相机的种类:

1.exploration相机用在战斗中的穿越时刻

2.Aim相机,用于打斗过程中

3.anchored相机,用于固定位置的固定凸轮

4.spline相机,基于固定线条跟踪的相机

5 .animated相机,从Maya集成到引擎中

触发机制类型:

1.专门的镜头状态机触发,比如玩家在悬崖,触发悬崖相机

2.特定的交互下触发,比如打开特定的箱子

3.特定关卡触发

4.exotic gameplays

5.animations,触发某个相机动画

 

关于exploration camera

是玩家最常用的操控的镜头

Follow Camera

让玩家穿过特定环境下的镜头,有助于避免障碍,更顺畅的跟随角色并适应不同高度 

Follow Climb Camera

用于玩家爬墙的镜头,会限制pitch和yaw

Spline Camera 

如下图所示,自定义的线条曲线可以创造出更多有创意的,更有电影感觉的运镜

基于物理的Camera Shake

想象一下相机绑在一根弹簧上的感觉

比如一个刚体阻尼的相机震动效果

带有大量阻尼的效果

再进一步,可以模拟出强震,海啸,飓风等效果

某些镜头会根据玩家的左侧还是右侧播放对应的镜头特效

再比如滑索时会判断左侧的还是右侧

对于到悬崖侧的镜头处理,可以将镜头旋转到lora身后,效果如下

更好的是不旋转

 

相机的碰撞

相机最起码不能穿模,遇到墙的时候可以贴边划过

 

Camera Shake

2D游戏中:

  1. 基于Rotational的震动(效果较差)
  2. 基于Translational的震动(效果一般)
  3. 基于Rotational+Translational的震动(效果最好)
  4. 基于Rotational的震动(效果较好)
  5. 基于Translational的震动(效果非常不好,尤其是相机在靠近墙边时,感觉相机一会从墙穿进一会又穿出)
  6. 基于Rotational+Translational的震动(效果非常不好)
  7. 于Rotational+Translational的震动(效果非常不好)

VR游戏中

相机抖动会引起玩家强烈不适,不推荐使用

 

Camera Shake的实现代码

2D游戏中

GetRandomFloatNegOneToOne表示从-1到1的一个随机浮点数

Shake表示一个乘以的系数

计算得到随机Rotational的角度和Translational的位移的偏移即可

3D游戏中

Camera Shake中使用噪声

柏林噪声:相比于随机的屏幕抖动,有自适应的频率,效果更好

 

 

 

《黑神话:悟空》的一些镜头特效

这个镜头叫做滑动变焦,就是在移动摄像机推近或者拉远的同时,改变摄像机的焦距,让目标在画面里的比例不变,产生非常戏剧性的效果。

这是一段故事情节的交代,大家可以看到镜头的晃动,来体现紧张、恐怖的感受,因为背景是狼人的声音。

这一段可以看出来在倾斜的时候,整个摄像机也做了倾斜,整个地平线在它转动的时候是斜的、而不是平的,这是非常动态的操作。在游戏中给人的体会很特别,并不影响玩家的操控,但可以让氛围提升。

另外就是从可控视角或者玩家视角到叙事视角的过度。这是从50mm拉成16,然后又拉到了50,我不确定具体是不是50,反正焦距变长了,并不是简单的拉近而是变焦的过程。

 

 

以上是关于3D游戏中镜头的运用的主要内容,如果未能解决你的问题,请参考以下文章

基于unity物体定点移动与模拟刹车的细节 GIF 图文详解——线性差值函数以及平滑阻尼的运用和实践(Lerp AND SmoothDamp)

Unity3D 对象池思想 在游戏开发中的运用

游戏开发者必须了解的unity3D技巧

vizard用python写3D游戏

用 Python 写 3D 游戏,太赞了

用 Python 写 3D 游戏,太赞了