第一章 概述

一.1. 设计目的

-提供良好的角色操控体验,使玩家能够更好的观察游戏世界。

-提供良好的战斗体验,强化战斗表现。

一.2. 设计思路

-A3是一款二次元风格的JRPG,对标产品为FF7RE。我们期望A3产品具有以下特点:

​ -沉浸:高度自洽的游戏世界,流畅的操作体验。强调代入感和临场感。

​ -精品化:次时代的游戏画面表现力,包括场景展现与战斗表现,能够被二次元用户认可。

-在游戏中,相机功能是玩家最早和最常接触到的游戏体验之一,也是玩家对于游戏基础品质评判的重要依据,需要达到足够高的品质。

第二章 角色跟随的相机模式

二.1. 角色跟随模式相机

-在我们产品中,绝大多数情况下使用的都是角色跟随的相机模式,这是一种“焦点跟随相机”,需要实时地根据某个(某些)场景中的焦点坐标,计算相机位置

-玩家借助角色跟随相机进行跑图和战斗,观察游戏箱庭世界和箱庭副本

img

1-角色跟随相机示意

二.2. 角色跟随模式下相机的基础构成

img

-如上图所示,角色相机主要由三部分组成。相机视点、相机摇臂、相机焦点

​ -相机视点:相机镜头所在的位置。

​ -相机摇臂:相机视点到相机焦点的连线轨道是相机摇臂,玩家可以通过操作来进行摇臂的放缩

​ -相机焦点:

​ -角色相机的默认相机焦点是玩家的当前主控角色,具体会挂在角色的根骨骼上的某个偏移量的位置上,我们把这个挂点叫做角色的焦点插槽

​ -焦点插槽的位置会根据当前摇臂的长度以及角色的不同有所区别,具体见下文相关规则

二.3. 相机的基础参数

-相机的视锥体

​ -游戏中镜头所呈现的景物是由视点发出的视椎体决定的,视锥提通常情况下是一个金字塔结构,相机镜头定位于金字塔的顶端,视锥体的中心线朝向焦点位置。可配置相机的最近和最远渲染范围

img

-FOV

​ -FOV决定了相机拍摄游戏场景时的可视范围角度,FOV的实际含义是Camera视锥体接收画面的角度α

img

​ -3D游戏中一般FOV设定会在90到100左右

第三章 角色跟随相机的镜头运动

三.1. 角色相机的镜头跟随规则

-当前角色发生移动,角色相机也会以摇臂为轴,跟随发生移动

-镜头的跟随惯性

​ -一些品质不错的游戏,镜头运动和角色运动之间都留有一些余地

​ -不用追的太近,也不能离得太远,有一定的惯性

img

2-镜头跟随的惯性

-镜头惯性的实现方式

​ -单纯的时间延迟的方式来实现镜头的惯性会十分僵硬,一般都是用惯性系数来实现

​ -角色在三维空间中移动时,镜头焦点会始终模仿角色的运动轨迹而运动,把问题简化,从三维空间下降到一维,假设角色只在X轴上左右移动,相机焦点当前的位置Xc,角色焦点插槽当前的位置Xg,游戏每次tick的间隔dtime,定义相机移动的惯性系数a,那么有:

​ -Distance=Xg-Xc

​ -镜头每帧移动=adtimedistance

​ -通过以上计算方式,我们可以看出当相机焦点越接近角色,相机的运动越缓慢

三.2. 角色相机的焦点插槽的位置

-焦点插槽位置和角色的关系

​ -焦点插槽是挂在角色根骨骼的一个相对偏移上

​ -在相同的相机参数下,不同的角色这个偏移是不一样的,一般会考虑角色的体型,调整这个偏移使角色在画面中的构图更加合理

img

-焦点插槽位置和摇臂长度的关系

​ -同一个角色,角色相机焦点插槽的位置和当前摇臂的长度相关

​ -一般来说摇臂从较远位置到最近位置的过度的过程中,随着摇臂的拉近,焦点插槽会有个向上的偏移。这个偏移主要是让人物在画面中的构图更加合理

imgimg

-焦点插槽位置的具体确定方式

​ -根据上述规则,我们需要制定某个角色的焦点插槽位置和摇臂长度之间的函数关系,这个函数关系是个调试好的函数曲线,我们可以在ue4中直接拉出一条合适的相机曲线来导出使用

​ -一般情况下如果两个角色的体型近似,使用同样的函数曲线过度即可

三.3. 玩家对角色相机的操控

-玩家操控相机的方式

*行为* *移动端操作* *pc端键位*
相机镜头移动 非功能热区按住屏幕滑动 鼠标移动
相机摇臂拉近/拉远 非功能热区双指放缩 鼠标滚轮向前/向后滚

​ -在PC端玩家通过移动鼠标,旋转游戏镜头。通过滚轮前后滚来放缩相机摇臂距离

​ -在移动端,玩家通过手指点触滑动屏幕来旋转游戏镜头。通过双指放缩操作来放缩相机摇臂距离

​ -移动端操作相机的区域为所有非功能热区

-玩家操控相机的运动形式

​ -玩家操控相机镜头移动:

​ -玩家操控相机的移动主要是操控相机以焦点为圆心,以摇臂长度为半径,沿着圆球的轨道进行相机旋转

​ -相机有三种旋转方式,其中常用的是以焦点为圆心,以摇臂长度为半径的偏航角和俯仰角旋转。旋转角一般只在一些3d空中驾驶模拟中才用到

img

​ -移动端按住屏幕左右滑动/PC端左右移动鼠标,可以控制相机水平角度旋转,可以旋转360度。向右滑动相机向左旋转,向左滑动相机向右旋转

² 可以连续转动相机(转过一周后可继续转动)

img

3-偏航角旋转示意

​ -移动端按住屏幕上下滑动/PC端上下移动鼠标,为调节相机俯仰角度,角度有限制,上下角度分别配置。向上滑动相机降低,向下滑动相机升高

² 俯仰角度限制支持配置区间,但肯定会大于-90°,且小于90°

img

4-俯仰角旋转示意

​ -当玩家斜方向进行镜头移动的操作时,实际上是同时在进行水平方向和垂直方向的操作

​ -玩家操控摇臂拉近拉远:

​ -移动端双指张开为镜头推进缩短摇臂长度,双指收拢为镜头拉远加长摇臂长度

​ -PC端滚轮前滚为缩短摇臂长度,滚轮后滚为镜头拉远加长摇臂长度。

​ -角色相机的玩家控制摇臂最远和最近长度支持配置

img

​ 5-摇臂长度调整示意

三.4. 角色跟随相机的参数配置

-角色跟随相机的基础默认参数

​ -包含视距范围、FOV、后处理等参数

-玩家操控相机的一些参数需求

​ -对玩家开放的参数后续可能会在设置里由玩家自由配置

*参数条目* *参数概述* *是否对玩家开放*
镜头俯仰角度区间 支持配置区间,区间必定位于(-90°,90°)以内
摇臂调节范围 支持配置区间
镜头水平移动灵敏度 鼠标/手指的移动距离转化为镜头偏航角度的比例 可能
镜头垂直移动灵敏度 鼠标/手指的移动距离转化为镜头俯仰角度的比例 可能
摇臂调节灵敏度 鼠标中键的滚动距离/双指方所得距离,转化为实际视距的缩放长度大小 可能
镜头默认俯仰角度 默认数值
镜头默认偏航角度 一般为玩家角色当前朝向
镜头默认摇臂长度 默认数值

第四章 物体的相机碰撞体

四.1. 物体的相机碰撞体定义

-我们需要定义某个物体的相机碰撞体,这个碰撞体的作用就是用来和相机或者相机摇臂发生碰撞的,从而进行碰撞后的处理的

-一般情况下程序支持根据物体的模型,自动生成相机的碰撞体。同时也需要支持相机碰撞体的手动添加、删除和修改

-我们可以定义这个碰撞体和相机的碰撞发生类型,同时也可以定义碰撞发生后的处理方式

四.2. 相机碰撞体的碰撞类型和碰撞处理

-碰撞类型类型1:与摇臂碰撞,造成摇臂遮挡

​ -此种类型下,有如下两种处理方式

​ -摇臂遮挡后的相机拉近

​ -摇臂遮挡后的物体外显隐藏

-碰撞类型类型2:与相机碰撞,造成相机探视到物体模型内部

​ -此种类型下,有如下一种处理方式

​ -相机碰撞后的物体外显隐藏

第五章 相机的摇臂遮挡

五.1. 摇臂遮挡的相机拉近处理

-当焦点和视点的整条摇臂线上出现使相机拉近的遮挡物,这个时候就需要对相机进行拉近处理

img

-相机拉近处理的方式

​ -此种处理是当碰撞发生的瞬间,镜头会缩短摇臂且****瞬间****拉近到一个由程序计算的合法位置(最短运动距离让摇臂线无遮挡的位置),我们可看如下示例帮助理解

​ -示例:假设某个遮挡物突然出现在相机和角色之间,对摇臂进行了遮挡。此时相机摇臂会瞬间(一次tick时间)缩短,是相机盒处在缩短后最远距离无碰撞的位置上

img

​ -游戏中的摇臂遮挡拉近示意

img

6-FF7中碰撞后的相机拉近

-碰撞镜头拉近后的摇臂长度复位

​ -当结束碰撞后,需要将相机摇臂长度复位

img

7-原神摇臂复位参考

​ -如下图所示,摇臂初始长度为d

​ -当角色向右移动时相机摇臂和遮挡物发生碰撞,相机被拉近

​ -在碰撞的过程中,摇臂就像一个自然长度为d的可压缩的弹簧,时刻想恢复d的长度

img

​ -摇臂长度的复位需要一个差值过度的过程

​ -为了防止镜头的跳变,弹簧臂的长度复位过程并不是瞬间的

​ -需要以一定速度的差值过度

​ -摇臂长度复位的插值速度是一个全局的常量,可以配置

​ -摇臂长度复位期间的操作响应

​ -摇臂长度复位期间,响应玩家对摇臂长度的操作,并且打断当前复位过程

​ -因为复位是个相对缓的过程,这个过程玩家的操作必然需要响应,否则操作阻塞感会很重

五.2. 摇臂遮挡后的遮挡物外显隐藏

-这种方式常见应用于树木中树叶的遮挡

​ -如下图原神的处理方式是遮挡后整体树叶部分会由原先的状态过渡成固定透明度的半透状态

img

8-原神树叶遮挡摇臂后的半透处理

​ -需要支持物体和相机摇臂碰撞产生摇臂遮挡后,对物体进行半透化的处理

​ -需要有透明度参数配置

​ -具体透明的效果由美术把控

第六章 相机的碰撞

六.1. 相机碰撞后的遮挡物外显隐藏处理

-这种碰撞类型,常见于场景中的NPC和怪物,他们会遮挡摇臂并且不进行处理,但是为了防止镜头穿到其模型内部,我们需要“相机碰撞”来对物体的外显进行隐藏处理。对于物体隐藏的处理,一般常见的有两种方案,具体选哪种方案需要看具体美术

-方案一:类似原神,发生碰撞后物体会进入半透状态,继续拉近相机物体透明度逐渐变低,直到达到某个位置完全隐藏

img

​ -相机碰撞的判定方式

img

​ -示意图说明:这是一个俯视角的示意图,其中

² 紫线代表相机的视锥体的俯视图截面

² 蓝色虚线代表相机的模型开始隐藏判定体

² 红色虚线代表相机的模型完全隐藏判定体

​ -举例一个配置了和相机发生碰撞隐藏模型的NPC

² 当他的相机碰撞体和相机的模型隐藏判定体(上图蓝圈)产生碰撞,并且该NPC至少有一部分处在视锥体的范围内,则该NPC会触发模型隐藏的处理,以一定透明度开始隐藏

² 随着模型越来越靠近上图红圈范围,物体透明度越来越高,直到和红圈产生碰撞,物体完全隐藏

² 如果此时NPC远离红圈范围透明度逐渐恢复,直至离开蓝圈范围,NPC外显恢复至完全正常状态

-方案二:类似FF7,无半透的过程状态。发生碰撞后物体有个消失过程直接消失,碰撞结束后物体有个显示过程直接显示

img

​ -相机碰撞的判定方式

img

​ -示意图说明:这是一个俯视角的示意图,其中

² 紫线代表相机的视锥体的俯视图截面

² 蓝色虚线代表相机的模型隐藏判定体

​ -举例一个配置了和相机发生碰撞隐藏模型的NPC

² 当他的相机碰撞体和相机的模型隐藏判定体(上图蓝圈)产生碰撞,并且该NPC至少有一部分处在视锥体的范围内,则该NPC会进行隐藏。当期离开蓝圈范围后,该NPC会显示出来