Unity 场景是通过在三维空间中放置并移动对象来创建的。由于观察者的屏幕是二维屏幕,因此需要通过一种方法来捕捉视图并将其“平面化”以进行显示。该过程通过__摄像机__完成。
摄像机是在场景空间中定义视图的对象。该对象的位置定义了视点,而其向前 (Z) 轴和向上 (Y) 轴分别定义了视图方向和屏幕顶端。摄像机组件还定义了视图中区域的大小和形状。通过设置这些参数,摄像机能够显示其在当前屏幕上“观察”到的内容。当摄像机对象移动和旋转时,显示的视图会随之移动和旋转。
现实世界中的摄像机(实际相当于人眼)在观察外界事物时,物体距离视点越远,看起来越小。这种众所周知的_透视_效果在艺术和计算机图形领域广泛应用,对于创建现实场景至关重要。当然,Unity 支持透视摄像机,有时需要专门在没有这种效果的条件下渲染视图。例如,需要创建一种与真实世界的对象不完全相同的地图或信息显示效果。显示的对象不随距离变远而缩小的摄像机称为正交摄像机;Unity 摄像机也有这样的选项。在透视和正交模式下观察场景称为摄像机投影。(上述场景来自于 BITGEM)
对于从当前位置能“观察”的最远距离方面,透视和正交摄像机都存在一定的限制。该限制由垂直于摄像机向前 (Z) 方向的平面定义。此平面称为远裁剪面,因为与摄像机距离较远的对象将被“裁剪”(即,不在渲染范围内)。摄像机附近还有一个相应的近裁剪面;可观察的距离范围位于这两个平面之间。
在非透视模式下,无论距离远近,对象大小不变。这表示,正交摄像机的视体由两个裁剪面之间的长方体定义。
使用透视摄像机时,对象会随其与摄像机的距离增大而缩小。这表示场景中可视部分的宽度和高度随着距离的增大而增大。因此,透视摄像机的视体不是一个长方体,而是金字塔形状,其顶点位于摄像机位置而底部位于远裁剪面。不过,该形状并不是严格的金字塔形,因为顶部被近裁剪面截断了;这种被截断的金字塔形状称为平截头体。由于平截头体的高度并非常量,平截头体由其宽度与高度之比(称为宽高比)以及顶部与底部之间在顶点处的夹角(称为视野即FOV)定义。请参阅关于了解视锥体的页面,了解更多详细说明。
对于室内场景,摄像机可能总是完全位于代表建筑物内部、洞穴或其他结构的某个对象内。但是,当动作发生在室外时,对象之间会有许多不含任何对象的空白区域;这些背景区域通常表现为天空、空间或水下场景的黑暗深处。
摄像机不能完全不顾背景,因此必须用一些对象填充空白空间。最简单的方法是在基于背景渲染场景之前,先将背景清理成单调的颜色。可以使用摄像机的 Background属性来设置此颜色,在检视面板或脚本中进行操作。有一种更复杂的方法非常适合处理室外场景,即使用天空盒 (Skybox)。顾名思义,天空盒的行为类似于一个布满天空图像的“盒体”。摄像机被有效地放置在此盒体的中央,并可从各个方向观察天空。摄像机在旋转的过程中可观察到天空的不同区域,但是摄像机绝不会移出中心位置(所以摄像机无法“靠近”天空)。天空盒是在场景中所有对象的后面渲染,因此表现了一个无限远的视图。最常见的用法是在标准室外场景中表现天空,但盒体实际上完全围绕着摄像机,甚至在摄像机下面也是如此。因此,可使用天空盒来表现场景的某些部分(例如,延伸到地平线之外的起伏平原)或者太空或水下场景的全方位视角。
只需在 Lighting 窗口(菜单:__Window__ > Rendering > _Lighting Settings__)中设置 Skybox_ 属性,即可在场景中添加天空盒。有关如何创建天空盒的更多详细信息,请参阅此页面。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.