UE Gameplay入门51(相机视锥空间的计算方法推导)


非常感谢匿名大哥一直对我的支持,本文内容由他赞助
在这里插入图片描述


#1. 视锥(Frustum)是什么
在这里插入图片描述
在相机的近裁剪面和远裁剪面之间的渲染范围内的空间叫做视锥空间(Frustum),通常情况下我们是不需要处理,但
当下比较流行动态遮挡剔除技术,只渲染视锥空间里面物体,再配合LOD等级来最大化效果,可以最小使用设备机能
Unity的FOV和Unreal的FOV有些区别
Unity的FOV是指视锥空间的张开角度,好比人眼睛的开闭角度
Unreal的FOV是指视锥空间的范围角度,基于水平面来伸开的


#2. 计算视锥需要的参数
在这里插入图片描述
相机自身的2个参数:FieldOfView(FOV)和Aspect Ratio宽高比
在这里插入图片描述
一般情况下还需要配合摇臂一起使用,Target Arm Length
CameraSpringArm默认延展的长度是反向距离,所以需要减掉forward反向的摇臂长度


#3. 计算方法
在这里插入图片描述
使用0为原点,视角FOV为90度,摇臂300米来进行推导
第一个有效计算三角形,图中绿色部分
一个角是90度,另外一个角度是45度的等腰三角形
这是视锥空间中有效的计算三角形,总计2个可用,分别位于左右两边,我们已知了一个角度和一条边

因为视锥空间是真3维空间,完全是在空间中计算的,通常情况下3维度空间的计算我们可以转为
2维空间来处理,比如玩家移动,此时朝上的轴向是固定的
在完全3维空间中计算,我们需要找投影,只有投影的向量才是有效的(相机也是投影成像)
找投影需要找一个可靠的平面来进行投影,需要是相互垂直的平面,可以构成勾股定律

计算一个有效中心点
在这里插入图片描述

原点:(0,0,0)
理论点:(300,300,0) - 摇臂(300,0,0)
未知中心点:(0, 300, 0)

在这里插入图片描述

获取相机的宽高比aspect ratio:1.5 width/height
300/1.5 = 200
未知顶点1:(0,300,200)
未知顶点1:(0,300,-200)


#4. 显示相机的视锥空间
有两种方法可以显示相机的视锥空间,编辑器显示或者代码显示
> 编辑器显示
在这里插入图片描述

> 使用UDrawFrustumComponent来显示

DrawFrustum = CreateDefaultSubobject<UDrawFrustumComponent>(TEXT("DrawFrustum"));
DrawFrustum->SetupAttachment(CameraBoom, USpringArmComponent::SocketName);
DrawFrustum->FrustumAspectRatio = FollowCamera->AspectRatio;
DrawFrustum->FrustumAngle = FollowCamera->FieldOfView;
DrawFrustum->FrustumStartDist = 10.0f;
DrawFrustum->FrustumEndDist = 1010.0f;

代码显示的好处是可以在任意位置显示,编辑器默认跟随相机显示


#5. 代码绘制DebugLine
在绘制之前,我也不知道能不在空间中把相机的视锥边缘绘制出来,最关键的是如果我们不做,
那么功能一定是不能完成的,因此我们应该尝试迈出第一步,其中有3种常见情况,
分别是镜头默认在原点,镜头往上移动,镜头往下移动
> 镜头默认在原点
在这里插入图片描述
这种情况下,我们可以直接计算

//lv1.在原点,无旋转最简单的情况下
//1.通过角度计算对边(半边)
//2.通过比例计算上下顶点
//3.计算其余的两点
void AViewFrustumCharacter::DrawFrustumPlane(float Dist)
{
   
	float Angle = FollowCamera->FieldOfView / 2;
	float ToRadians = FMath::DegreesToRadians(Angle);
	float Tan = FMath::Tan(ToRadians);
	float HalfWidth = Tan * Dist;
	float AspectRatio = FollowCamera-></
UE4中的Gameplay框架是一个强大的工具集,用于开发和实现游戏玩法和用户交互。该框架提供了许多功能和组件,以帮助游戏开发者快速构建出丰富、流畅的游戏体验。 UE4的Gameplay框架主要由以下几个方面组成: 1.输入系统:该系统可以处理各种输入设备的操作,如鼠标、键盘和游戏手柄。开发者可以轻松地设置和管理输入映射和按键绑定。此外,还提供了鼠标和手柄的即时响应和移动方向控制功能,使玩家能够自由操作游戏中的角色。 2.角色控制器:角色控制器是游戏玩家在游戏中扮演的角色,他们的控制是通过输入系统和蓝图来实现的。游戏玩家可以移动角色、执行动作、攻击敌人等。角色还可以通过动画系统实现自然的运动和交互。 3.人工智能:UE4的Gameplay框架提供了内置的人工智能系统,可以对NPC和敌人进行编程控制。开发者可以设置敌人的行为模式、路径寻找和攻击策略,让游戏中的敌人具有更真实和智能的表现。 4.物理模拟:UE4的Gameplay框架使用了物理引擎来实现真实的物理模拟效果,比如碰撞、重力和刚体运动等。这使开发者能够创建更真实和具有交互性的游戏世界,使玩家可以与环境进行互动。 总之,UE4的Gameplay框架提供了强大而灵活的工具,帮助开发者轻松地构建出丰富多样的游戏玩法和用户交互。无论是开发动作冒险游戏、射击游戏还是角色扮演游戏,该框架都能满足开发者的需求,并带来令人惊叹的游戏体验。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值