• Unity插件-Cinemachine


    1.Virtual Camera 相机控制

    创建Virtual Camera:鼠标右键(或点击上方的GameObject)-> Cinemachine -> Virtual Camera,创建完Virtual Camera后会发现场景原相机上会自动添加一个CinemachineBrain的组件

    CinemachineBrain是Cinemachine中另一个核心组件(如图),可以称之为大脑。它挂载在Camera上,监控着场景中所有active状态(Live和Standby)的VirtualCamera。若一个inactive状态的VirtualCamera,其Priority值大于等于当前Live状态的VirtualCamera,当我们将其设置为active状态,那么CinemachineBrain就会选择它作为新的Live状态的VirtualCamera。我们可以使用这种方法来实现镜头的切换。

    注:我们也可以使用Timeline来控制VirtualCamera,这种情况Timeline的处理逻辑会覆盖CinemachineBrain的。

    下面对该组件的参数进行详细解释

    Show Debug Text开启后会在Game视图中显示当前Live状态下的VirtualCamera的文本信息
    Show Camera Frustum开启后在Scene视图中会始终显示Camera的视锥体。
    Ignore Time Scale使VirtualCamera响应用户的输入和阻尼时忽视TimeScale的设置。
    World Up Override用于指定VirtualCamera在世界空间中向上的向量,若为空,则为世界空间中Y轴的方向,即 (0, 1, 0)。否则使用设置的目标的Y轴的方向。使用好该设置对于避免万向节锁(gimbal-lock)非常重要
    Update MethodVirtualCamera更新位置和旋转的方式
    Update Method--Fixed UpdateVirtualCamera的更新与物理模块同步
    Update Method--Late Update在MonoBehaviour的LateUpdate中更新
    Update Method--Smart Update

    每个VirtualCamera根据其目标的更新方式来更新,推荐使用。

    注:Smart Update具体是通过UpdateTracker实现的。在一定时间内(UpdateStatus.kWindowSize = 30,即30帧内),通过调用UpdateTracker.OnUpdate(UpdateTracker.UpdateClock),可以计算出VirtualCamera的目标在fixedUpdate移动次数多还是在lateupdate移动的次数多,用来判断下一段时间用fixedUpdate还是lateUpdate。具体可以看UpdateTracker.OnUpdate方法。

    Update Method--Manual UpdateVirtualCamera不会自动更新,必须我们手动的调用ManualUpdate()来更新(应该在Camera跟随或看向的目标移动后调用)
    Blend Update Method主摄像机混合和更新的时机
    Blend Update Method--Fixed Update仅在Update Method使用的是Fixed Update并且在混合时发现剧烈震动时使用
    Blend Update Method--Late Update在MonoBehaviour的LateUpdate中出来,推荐使用
    Default Blend用于设置两个VirtualCamera混合的方式,除Cut外,其它方式可在后面设置一个混合的持续时间。
    Default Blend--Cut瞬切,立马显示下个VirtualCamera的画面
    Default Blend--Ease In OutS型曲线,混合开始和结束时比较平滑(慢->匀速->慢)
    Default Blend--Ease In混合结束时比较平滑(匀速->慢)
    Default Blend--Ease Out混合开始时比较平滑,然后匀速到结束(慢->匀速)
    Default Blend--Hard In混合开始时很很慢(从超级慢开始加速)
    Default Blend--Hard Out混合结束时很很慢(从较快速度减速到超级慢)
    Default Blend--Linear匀速移动
    Default Blend--Custom自定义混合曲线
    Custom Blends在前面的设置中,设置的是所有的VirtualCamera的混合方式,但是假如当我们的场景中有多个VirtualCamera,并且不同的VirtualCamera之间的混合方式不尽相同的时候,就需要通过该属性来设置不同VirtualCamera之间的混合方式了。会生成一个Asset用来存储数据.

    需要注意的是,在From和To中设置的是VirtualCamera的名称,也就是一个字符串,而非是VirtualCamera的引用。我们可以通过设置内置的**ANY CAMERA**来代表任何一个VirtualCamera。

    当要执行Blend操作时,首先会从Custom Blends中查找匹配项,若没有,则使用Default Blend的设置。若有多条匹配项,则优先选择最符合要求的。(例如vc1混合到vc2,一项是From:vc1,To:vc2,一项是From:vc1,To:ANY CAMERA,那么前面那项是更符合要求的,会被使用)若有多条最符合要求的,则选择最先找到的那一条。

    Camera Cut Event当一个VirtualCamera变为Live状态,并且其混合方式为Cut的情况下触发
    Camera Activated Event当一个VirtualCamera变为Live状态时触发,若带有混合,则触发在混合开始的第一帧。

    点击创建的Virtual Camera对象,它身上有一个CinemachineVirtualCamera组件,下面对该组件的参数进行详细解释

    Status:Live当前控制着Camera(带有CinemachineBrain组件)的VirtualCamera,即处于Live状态。当一个VirtualCamera混合到另一个时,该过程中,两个VirtualCamera都处于Live状态,当混合结束或者其他情况下,同一时刻内只会存在一个Live状态下的VirtualCamera。
    Status:Standby  没有控制着Camera的VirtualCamera,即处于Standby状态。该状态下的VirtualCamera还是会一直跟随和看向设置的目标,并且每帧都会更新。该状态下的VirtualCamera属于激活状态(active与enable等于true),并且其 priority 的值小于或等于Live状态的VirtualCamera。 注:2.6.3新增StandbyUpdate设置,可以设置更新频率(详情见下)
    Status:Disabled当VirtualCamera属于未激活状态(active或enable等于false),即处于Disable状态。该状态下没有任何的性能消耗,即不会控制Camera,不会跟随目标,不会每帧更新等。不过如果该VirtualCamera参与混合或者被Timeline调用,那么依旧可以控制Camera
    Game Window Guides

    开启后,会在Game视图中显示一些辅助线(如图1)。这些辅助线会在VirtualCamera看向(Look At)一个指定的GameObject并且Aim设置为ComposerGroup Composer或者跟随(Follow)一个指定的目标并且Body设置为Framing Transposer时出现。调整这些辅助线可以控制相机跟随时的反应区间。

    图中的透明区域我们称之为dead zone,蓝色的区域称之为soft zone,红色的区域称之为no pass area,而图中的小黄点就是我们的target。我们可以在Game视图将鼠标放置在每个区域的分割线上,然后按住拖动,来调整每个区域的大小。也可以在Aim中进行更精确的设置,在后续的介绍中会提及到。

    dead zone:当我们的target(小黄点)在这个区域时,VirtualCamera不会调整rotation值。适用于忽略target进行一些微小的移动的情况。

    soft zone:当我们的target进入到这个区域时,VirtualCamera将会通过调整rotation值,重新把target放回到dead zone。这步操作的快慢,我们可以通过Damping来设置。

    no pass area:我们的target永远不会进入到这个区域。

    Save During Play

    开启后,可以在运行状态下直接保存我们对VirtualCamera设置的修改,而不需要我们通过复制粘贴的方式来记住这些修改了的属性。

    当我们停止运行时,会扫描我们修改过的属性进行保存,我们可以使用ctrl+z来回退这些修改。

    Cinemachine为我们提供了一个标签 [SaveDuringPlay] ,可以支持上述特征。我们可以将这个标签加在我们的自定义组件中,来实现运行时保存修改。此外若我们组件中有些属性不想保存修改的值,可以在属性前面添加 [NoSaveDuringPlay] 来过滤

    Priority

    权重,值越大说明优先权越高。例如:一个非Live状态的VirtualCamera,当其Priority值大于等于当前Live状态下VirtualCamera并且自己属于激活状态,那么CinemachineBrain会选择它作为新的Live状态的VirtualCamera。

    注:使用Timeline处理VirtualCamera时,该属性不起作用

    Follow跟随目标,即VirtualCamera会跟着设置的目标移动而移动。会根据Live状态的VirtualCamera所设置的目标结合Body中的设置来更新Camera的Position。若不设置目标,Camera的Position就会与VirtualCamera同步。例如我们可以用Timeline来给VirtualCamera添加动画,然后Camera也会产生相同效果。
    Look At看向目标,即Camera看向的目标(Transform.LookAt)。会根据Live状态的VirtualCamera所设置的目标结合Aim中的设置来更新Camera的Rotation。若不设置目标,Camera的Rotation就会与VirtualCamera同步。
    Standby Update设置处于Standby状态的VirtualCamera的更新频率
    Standby Update--Always每帧更新
    Standby Update--Never不更新
    Standby Update--Round Robin偶尔更新,具体更新频率取决于Standby状态的VirtualCamera数量
    Lens如下三个设置和Camera中的相同设置所对应,Camera中的值会跟此同步。例如一个带有CinemachineBrain的Camera,当它对应的Live状态的VirtualCamera的FOV值改为77,那么Camera中的FOV值也会相应的变为77。
    Lens-Vertical FOV(相机为透视模式下才有)FOV,控制Camera的视窗大小
    Lens-Near Clip PlaneCamera最近能看见的距离
    Lens-Far Clip PlaneCamera最远能看见的距离
    Presets

    在Vertical FOV右侧有个小的下拉框,点击Edit Presets可以新建或修改用做预设的Asset文件。Lens Presets Asset文件内容如图2,

    Presets可以帮助我们快速的设置FOV等属性

    Dutch用于修改Camera中Rotating的z轴值,取值范围 -180~180
    Transitions--BlendHint从最开始的例子中可以看见,当一个VirtualCamera混合到另一个VirtualCamera的过程中,Camera会有一个行径的路线,并且伴随着Camera的旋转。该设置可以选择混合到该VirtualCamera或从该VirtualCamera混合到别的时的路线方式。
    BlendHint--None坐标和朝向以一种标准的线性混合
    BlendHint--SphericalPosition如果两个VirtualCamera有共同的LookAt目标,那么坐标的行径路线会像在圆的面上一样。
    BlendHint--CylindricalPosition如果两个VirtualCamera有共同的LookAt目标,那么坐标的行径路线会像在圆柱的面上一样。
    BlendHint--ScreenSpaceAimWhenTargetsDifferLookAt目标之间的标准线性位置混合、径向混合
    Transitions--Inherit Position开启时,当VirtualCamera状态变为Live时,则会继承上一个Live状态的VirtualCamera的Position信息。
    Transitions--On Camera Live回调
    BodyBody的设置主要用于指定VirtualCamera的移动规则,主要有如下七大类,
    Body--Do nothing不移动VirtualCamera
    Body--3rd Person Follow适用于第三人称或第一人称的跟随效果
    Body--Framing Transposer根据Follow设置的目标,以固定的屏幕空间关系移动
    Body--Hard Lock To Target根据Follow设置的目标,以固定的关系移动
    Body--Orbital Transposer根据Follow设置的目标,以可变的关系移动,例如可以选择接收玩家的输入
    Body--Tracked Dolly沿着预先设置的路径移动
    Body--Transposer根据Follow设置的目标,以固定的关系移动

    Body--Binding Mode

    该选项主要影响VirtualCamera的偏移(Offset)和阻尼(Damping)的计算方式,有以下几种坐标空间供选择,

    注:单独测试跟随效果的时候最好不要设置Look At目标,以防干扰。

    Binding Mode--Lock To TargetVirtualCamera相对于Follow目标的模型空间计算偏移,当目标旋转,Camera也会跟着旋转,保持偏移量不变。

    Binding Mode--Lock To Target With World Up

    与Lock To Target不同的是,该模式下会忽略模型的x和z的转动,只有y轴转动时,Camera才会跟着旋转

    Binding Mode--Lock To Target No Roll

    与Lock To Target不同的是,该模式下会忽略模型的z的转动,当x或y轴转动时,Camera会跟着旋转
    Binding Mode--Lock To Target On Assign测试时感觉和Lock To Target没什么区别,待定。。。
    Binding Mode--World SpaceVirtualCamera在世界坐标中相对于Follow目标原点的计算偏移,当目标旋转时,VirtualCamera的位置不会发生变化
    Binding Mode--Simple Follow With World UpVirtualCamera在世界坐标中相对于Follow目标在世界坐标中移动的方向的计算偏移和阻尼(不受在Y轴移动影响),例如一开始Camera在目标的世界坐标z轴负方向位置,当目标向世界坐标x轴正方向移动时,Camera会慢慢移动到目标的世界坐标x轴负方向位置。类似于小弟在屁股后面跟着的效果
    Body--Damping阻尼,数值越小,Camera响应的越快。当Damping设置为0时,Camera会和目标同步运动,若Damping大于0,Camera的运动会慢于目标。
    Damping--X Damping维持offset的x轴值时的阻尼
    Damping--Y Damping维持offset的y轴值时的阻尼
    Damping--Z Damping维持offset的z轴值时的阻尼
    Damping--Pitch Damping当目标沿自身x轴转动时,Camera跟随目标时的阻尼
    Damping--Yaw Damping当目标沿自身y轴转动时,Camera跟随目标时的阻尼
    Damping--Roll Damping当目标沿自身z轴转动时,Camera跟随目标时的阻尼

    Aim

    Aim的设置主要用于指定VirtualCamera的旋转规则,主要有如下六大类
    Aim--Do nothing不对Virtual Camera做任何旋转
    Aim--Composer保持Camera始终看向目标
    Aim--Group Composer可以使Camera看向多个目标,如果看向的目标是Cinemachine Target Group,会自动调整Camera的FOV和距离,来确保组里的所有对象都能被看见
    Aim--Hard Look At保持Look At的目标始终在屏幕中间,该选项没有额外的设置
    Aim--POV通过用户输入来旋转Virtual Camera
    Aim--Same As Follow TargetVirtual Camera的Rotation值保持和Follow目标的Rotation值相同(因此使用此模式必须设置Follow目标)。如果我们Body选择的是Hard Lock to Target,那么就可以通过Follow的目标来控制Camera的路径和旋转

    Tracked Object Offset

    在目标的对象空间中,相对于目标中心点的偏移。

    Lookahead Time

    基于目标的运动轨迹调整偏移,会估算未来几秒(即我们设置的这个时间)内目标的位置。该特征对噪点动画(noise)非常敏感,会放大噪声导致相机不正常的抖动。若无法接受该抖动,请关闭该属性,或者让目标的运动轨迹更加平滑。

    Lookahead Smoothing

    平滑值,较大的值可以使抖动预测的更加平滑,但是也会增加预测的延时。

    Lookahead Ignore Y

    计算时是否忽略Y轴上的移动。

    Horizontal/Vertical Damping

    水平或垂直的阻尼,这会影响到目标中心从soft zone到dead zone的速度。(有关soft zone和dead zone的信息可以看上面Game Window Guides相关的介绍)若Damping设置为0,则中心点永远不会到soft zone。

    Screen X/Y

    soft zone和dead zone在屏幕中的位置,使用的是屏幕空间。

    Dead Zone Width/Height

    调整dead zone的宽度和高度。

    Soft Zone Width/Height

    调整soft zone的宽度和高度。

    Bias X/Y

    soft zone相对于dead zone的偏移。

    Center On Active

    若开启,当VirtualCamera被激活时,强制目标在屏幕的中心点。

    Noise

    噪点,使用该属性可以利用Virtual Camera模拟Camera抖动的效果。Cinemachine中有一个名为 Basic Multi Channel Perlin 的组件,可以利用Perlin noise来移动Virtual Camera(Perlin noise是一种可以通过自然行为计算随机运动的技术)。

    Pivot Offset

    当相机因为抖动旋转时,偏移相机中心点的坐标。(2.6.3新增)

    Amplitude Gain

    振幅,该值会与Profile中设置的Amplitude值相乘,例如设置为1,等于使用Profile中设置的Amplitude。

    Amplitude值越大,则抖动的幅度会越大。

    Frequency Gain

    频率,该值会与Profile中设置的Frequency值相乘,例如设置为1,等于使用Profile中设置的Frequency。

    Frequency值越大,则抖动的速度会越快。

    图1

    图2

    Cinemachine鼓励我们多创建VirtualCamera,因为VirtualCamera只会消耗很小的性能。我们可以将除了正在使用的VirtualCamera都关闭,来达到最佳的性能。

    也建议一个镜头使用一个VirtualCamera,例如两个角色对话的过场动画,我们可以使用三个VirtualCamera,一个看向两个角色中间,另外两个分别给角色特写,然后利用Timeline来同步声音和VirtualCamera。例如一开始开启着看向屏幕中间的VirtualCamera,当其中一个角色需要单独特写的时候,再开启对应的VirtualCamera,当不需要特写的时候关闭,镜头就又会回到看向屏幕中间的VirtualCamera。

    2.Free Look 第三人称相机控制

    FreeLook Camera是可以基于第三人称视角进行自由观察的虚拟相机。如下图所示,自由视角相机有上中下三个红圈,我们可以通过修改Cinemachine Free Look组件中的值来修改红圈的高度及大小。三个红圈由一个纵向的红线相连,该组件中其他参数与Virtual Camera一致

    • 通过改变Y Axis及X Axis的Value可以修改虚拟相机的视角。
    • Spline Curvature决定纵向的紧绷状态。
    • TopRig、MiddleRig、BottomRig即三个红圈的属性。

     3.Dolly Track轨道相机控制

    轨道相机即相机可以在轨道上进行移动,来实现电影或游戏CG中部分镜头效果,要想实现该效果首先要创建轨道,而Cinemachine提供了Dolly Paths来实现路径的绘制。

    使用Dolly Path就可以指定出一个特定的路径来供我们的VirtualCamera,例如下图:

    图中的绿色的路径就是我们的相机的移动路径,它由图中的白点连线而成。这些小白点,我们称之为waypoint。我们可以通过添加删除以及修改waypoint,来绘制我们想要的路径。

    Cinemachine为我们提供了CinemachinePathCinemachineSmoothPath两种组件用于绘制路径。

    CinemachineSmoothPath组件如图

    其中路径中的点即对应着组件中Waypoints数组的成员。每个waypoint包含XYZ的坐标信息,以及Roll的旋转信息。waypoint之间的连线方式使用了贝赛尔曲线的插值法(Bezier interpolation),因此我们不需要进行太多的设置,Cinemachine就会帮我们绘制好光滑且连续的路径。推荐使用。

    接下来,我们来看看组件中各个属性的具体含义:

    Resolution定义了waypoint之间路径的精确度,即被分为多少段,会影响到路径长度的计算。
    Path ColorScene视图中,选中路径时,显示的颜色。
    Inactive Path ColorScene视图中,未选中路径时,显示的颜色。
    WidthScene视图中,路径的宽度
    Looped勾选该选项,路径会首尾相连。
    Path Length路径的总长度。
    Waypointswaypoint的数组。
    Waypoint.Roll即waypoint点围绕着z轴的旋转,默认为0,我们的路径会平行于xz平面,若旋转90度,则会垂直于xz平面。

    CinemachinePath组件如图所示,CinemachinePath相比CinemachineSmoothPath区别主要在于,waypoint的属性中除了Position和Roll外,还多了Tangent属性。该属性主要用于调整waypoint间路径的弯曲程度,由于是我们自己调整的,因此若调整的不好,在Camera经过两段路径的接连处时,可能会出现抖动的情况。

    大部分属性基本和CinemachineSmoothPath的一样,就不重复介绍了,此处只介绍不同处

    Prefer Tangent Drag如果我们要在Scene视图中通过拖动来调整Tangent时,但是此时Tangent的坐标系和waypoint的坐标系重叠时(即Tangent的值为Vector.zero),会发现点不到Tangent的坐标系。那么此时我们打开这个开关,就可以帮助我们优先选中的是Tangent的坐标系。
    Waypoint.Tangent我们可以理解为,有一个点,它到waypoint的偏移量为tangent的值。它和waypoint的连线,即该waypoint的曲线的切线,切线的长度代表着bezier handle的强度,长度越长,曲线越平滑。

    Tracked Dolly

    根据前面的知识,我们已经可以绘制自己想要的路径了。那么,接下来,我们要如何让我们的Camera在路径上移动?在设置VirtualCamera的时候,我们知道,当给VirtualCamera设置了Follow目标时,Camera就可以跟随着我们设置的目标移动,而通过设置Body属性,可以设置相关的跟随方式。在Body中Cinemachine为我们提供了Tracked Dolly模式,用于实现Camera在路径上移动,具体设置如下:

    Path即VirtualCamera要使用到的路径,也就是我们前面提到的Cinemachine Path 或 Cinemachine Smooth Path。
    Path Position和Position UnitsPosition Units的值会影响到Path Position的意义,因此放在一起说:
    Position Units--Path UnitsPath Position取值范围 0~waypoints.Length-1,如Path Position=1,VirtualCamera即在下标1的waypoint所在的位置。
    Position Units--DistancePath Position取值范围 0~Path Length,如Path Position=1,VirtualCamera即在距离起点长度为1的位置。
    Position Units--NormalizedPath Position取值范围 0~1,如Path Position=1,VirtualCamera即在路径的终点。
    Path OffsetVirtualCamera位置相对于Path的偏移,X的方向在Path所在平面且垂直于Path,Y的方向是Path的正上方,Z的方向在Path所在平面且与Path平行。会受到path旋转的影响,即waypoint的roll值。
    Camera Up如何设置VirtualCamera.transform.up的值,VirtualCamera在Aim计算时,会尝试遵守这个值。
    Camera Up--Default不修改VirtualCamera的up的值,使用Cinemachine Brain中World Up Override属性代替。
    Camera Up--Path使用当前位置Path的up向量
    Camera Up--Path No Roll使用当前位置Path的up向量,但是不受Roll影响
    Camera Up--Follow Target使用Follow目标的tramsform.up
    Camera Up--Follow Target No Roll使用Follow目标的tramsform.up,但是不受Roll影响
    Auto Dolly使用Auto Dolly,可以自动将VirtualCamera移动到Path上最接近Follow目标的位置。这样当我们Follow目标移动的时候,Path上的VirtualCamera会跟着移动到最接近我们目标的位置。
    Auto Dolly--Enabled开启或关闭Auto Dolly功能,开启该功能对性能会造成一定的影响。
    Auto Dolly--Position Offset偏移量(基于position units),Camera的最终在Path上的位置 = 最近的点 + 偏移量。
    Auto Dolly--Search Radius搜索半径,我们的Path是根据waypoint一段段连接起来的,这个半径指的是,在VirtualCamera所在的当前片段,向两边延伸多少个片段,作为搜索范围。若为0,则表示整个Path都作为搜索范围。 如果当目标移动时,Path上计算出的最近点不稳定,我们可以使用较小的值来缩小范围。
    Auto Dolly--Search Resolution将一个片段分成多少连续的块用于搜索。值越高结果越精确,但是消耗的性能也会更高。

    Cinemachine Dolly Cart

    如果想要我们的Camera自动在Path上移动,那么Cinemachine Dolly Cart组件可以帮助到我们。它可以约束带有它的GameObject在Cinemachine Path或Cinemachine Smooth Path上移动。

    Path即指定一个Cinemachine Path或Cinemachine Smooth Path。
    Update Method速度不为0时,移动Cart的时机。对于普通的组件更新使用Update,若想要同步物理模块,使用Fixed Update
    Position Units和PosiotionTracked Dolly中的相同,不重复介绍了。
    SpeedCart的移动速度,同样受到Position Units的影响。

    4.Cinemachine Collider相机碰撞器

    该碰撞器就是为防止相机穿透墙体等障碍物

    想要实现这种不会穿墙的摄像头效果,我们只需要在VirtualCamera的Extensions中添加CinemachineCollider即可。

    Cinemachine Collider会对我们VirtualCamera的位置进行后期处理,来保持Camera的视线不会被障碍物所遮挡。添加了Cinemachine Collider后,VirtualCamera会做下列事情:

    • 使Camera远离场景中阻挡视线的障碍物
    • 若障碍物在Camera和Look At的目标之间,则移动Camera到障碍物前方
    • 计算拍摄质量(shot quality)

    Cinemachine Collider原理是利用物理射线(Physics Raycaster)检测,因此需要潜在的障碍物都要带有碰撞体组件,这会导致性能消耗。若消耗过高,需要考虑使用其他方法来代替。

    Collider Against当障碍物属于Collide Against设置中选择的Layer时,才会属于潜在障碍物,参与计算。该属性没有选择的Layer中的GameObject会被忽略。
    Ignore Tag属于Ignore Tag设置中选择的Tag的GameObject会被忽略。
    Transparent Layers属于Transparent Layers设置中选择的Layer的GameObject会被当做是透明物体,即不会遮挡住视线,会被忽略。
    Minimum Distance From Target最小辨识距离,如果障碍物到目标轴心点的距离小于设置的值,会被忽略。
    Avoid Obstacles

    若勾选,当目标被障碍物遮挡时,会移动我们的Camera来避开障碍物。

    若不勾选,则不会尝试移动Camera来避开障碍物,但是会根据障碍物来报告shot quality。

    Distance Limit设置从Camera射出射线的最大长度,若值为0即指Camera到目标的距离。超过该长度的障碍物会被忽略。
    Minimum Occlusion Time设置一个时间,只有当障碍物遮挡住的目标的时间超过这个时间才会进行处理。这样可以忽略掉一些转瞬即逝的遮挡物。
    Camera Radius指的是Camera到任何一个障碍物所需要保持的最小距离,值越大Camera会离潜在障碍物越远,尝试保持较小的值会有比较好的效果以及节省性能。如果由于Camera的FOV较大而看见一些内部障碍物,我们可以适当增加这个值。
    StrategyCamera防止被障碍物遮挡视线所尝试的方法,有如下三种:
    Strategy--Pull Camera ForwardCamera沿着自身的z轴方向向前移动,直到移动到距离目标最近的障碍物之前。
    Strategy--Preserve Camera Height将相机移动到一个不会被障碍物遮挡视线的点,同时尝试保持Camera的原始高度不变。
    Strategy--Preserve Camera Diatance将相机移动到一个不会被障碍物遮挡视线的点,同时尝试保持Camera到目标的原始距离不变。
    Maximum Effect设置一次最多可处理多少个障碍物,值越大性能消耗越大,一般场景中设置为4就足够了。
    Smoothing Time

    Camera停留在离目标最近的点时的最小时间,即当视线中没有遮挡物时,Camera不会立即恢复到原始的偏移量,而会先保持一会当前的偏移量,保持时间取决于该属性设置的值。

    适用于Camera需要经过很多障碍物的情况,可以避免Camera频繁的移动。

    Damping当障碍物消失,Camera恢复到原始的偏移量的速度。值越大反应越慢。
    Damping When Occluded当出现障碍物,Camera移动到避开障碍物位置的速度。值越大反应越慢。
    Optimal Target Distance该属性主要应用于Clear Shot功能。设置为0的话代表关闭该功能,若设置了大于0的值,那么当目标到相机的距离越接近这个值,就会获得越高的评分。该评分在Clear Shot选择合适的VirtualCamera时会起到作用。

  • 相关阅读:
    我的创作纪念日
    Python钢筋混凝土结构计算.pdf-已知弯矩确定混凝土梁截面尺寸
    机器人C++库(3)Robotics Library 例程一
    JS 的 apply 方法
    CPDA|如何拥有数据分析思维?
    【JavaWeb】JSP系列——EL表达式
    蓝桥杯每日一题2023.10.9
    双目视觉(双目相机)
    java计算机毕业设计校园酒店管理系统源码+系统+mysql数据库+lw文档
    《动手学深度学习 Pytorch版》 7.2 使用块的网络(VGG)
  • 原文地址:https://blog.csdn.net/qq_42720695/article/details/133920223