如何让Maya中的相机和Unity相机的FOV(Angle of View)对上

本文详细解释了Unity和Maya中FOV和AngleofView的区别,提供了一种方法来确保两个软件在不同分辨率屏幕上的预览效果一致。通过调整AspectRatio和FOV/AngleofView的值,可以实现在Unity和Maya中预览画面的统一。同时,文章还介绍了如何计算不同屏幕长宽比下应使用的FOV和AngleofView,以实现跨平台的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

Unity中的Camera的FOV和Maya中Camera的Angle of View即使设置成相同值,预览时结果会有很大差异

原因:

Unity Camera的FOV是 Vertical FOV的角度
Maya Camera的Angle of View是 Horizontal FOV的角度
 
 

解决方法

先保证Maya和Unity中的Aspect Ratio一致,然后再按照长宽比换算两者各自应该使用的FOV或者Angle of View。
 
例如按照下面的方式设置,即可实现两边完全一样
Unity中的设置:
  • Field of View:45
  • AspecRatio:4/3

Maya中的Camera设置:

  • Angle of View:60
  • AspecRatio:4/3

不同Aspect Ratio的屏幕适配

我们游戏中对不同Aspect Ratio的屏幕的适配方法是:
  • Vertical FOV维持不变
  • Horizontal FOV  = VerticalFOV * AspectRatio
也就是说 使用16:10设备的用户在水平方向上看到的东西比使用4:3屏幕的用户多!
制作过场动画或者和相机关系密切的动画时,建议在Maya中以4:3屏幕为准,以保证没有东西跑到画面外
 

2015年7月11号更新

经过反复测试发现horizontalFov和verticalFov的关系并没有那么简单。
横纵FOV与长宽比的关系如下:
tan(hFOV/2) = tan(vFOV/2) * aspect
 
针对我们的需求,horizontalFov为90°,verticalFov为60°,那么aspect应该是:
tan(hFOV/2) = tan(vFOV/2) * aspect
aspect = tan(hFOV/2) / tan(vFOV/2)
aspect = tan(90/2) / tan(60/2)
aspect = tan(45) / tan(30)
aspect = 1 / 0.57735 = 1.732
结论:当aspect为1.732的时候,摄像机的horizontalFov为90°,verticalFov为60°





转载于:https://www.cnblogs.com/mobilefishstudio/p/4634664.html

### 计算 Unity 中 Camera 的 Field Of ViewUnity 中,`Field of View (FOV)` 是指摄像机能够捕捉到的角度范围。当启用 `Physical Camera` 属性后,Unity 使用类似于实际摄影设备的方式处理 FOV,通过焦距 (`Focal Length`) 来间接定义视角大小[^1]。 对于给定的三个点来计算 FOV,假设这三个点分别是远裁剪面(Far Clipping Plane)上左右两侧边缘中点以及摄像机位置(透视中心),可以按照如下方法实现: #### 方法概述 为了基于这些特定点计算出准确的垂直或水平 FOV 值,需要考虑以下几个因素: - 远裁剪平面距离(`farClipPlane`) - 已知两点之间的宽度/高度(取决于想要测量的是水平还是垂直 FOV) 一旦有了上述参数,就可以利用三角函数关系求解得到最终的结果。 #### 实现代码示例 下面是一个简单的 C# 函数用于根据指定条件计算 FOV: ```csharp using UnityEngine; public class CalculateFOV : MonoBehaviour { public Vector3 pointA; // Far clipping plane left center public Vector3 pointB; // Far clipping plane right center public float farClipPlaneDistance = 10f; void Start() { Debug.Log("Calculated Horizontal FOV: " + GetHorizontalFOV(pointA, pointB)); } private float GetHorizontalFOV(Vector3 a, Vector3 b){ var distanceBetweenPoints = Vector3.Distance(a,b); return Mathf.Rad2Deg * 2 * Mathf.Atan(distanceBetweenPoints / (2*farClipPlaneDistance)); } } ``` 此脚本接收两个向量作为输入——代表远裁剪面上左侧右侧中间位置的坐标,并返回相应的水平 FOV 数值。注意这里的计算方式适用于水平方向上的 FOV 测量;如果是垂直方向,则需相应调整选取的参考点[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值