Unity 场景是通过在三维空间中放置并移动对象来创建的。由于观察者的屏幕是二维屏幕,因此需要通过一种方法来捕捉视图并将其“平面化”以进行显示。该过程通过__摄像机__完成。
摄像机是在场景空间中定义视图的对象。该对象的位置定义了视点,而其向前 (Z) 轴和向上 (Y) 轴分别定义了视图方向和屏幕顶端。摄像机组件还定义了视图中区域的大小和形状。通过设置这些参数,摄像机能够显示其在当前屏幕上“观察”到的内容。当摄像机对象移动和旋转时,显示的视图会随之移动和旋转。
现实世界中的摄像机(实际相当于人眼)在观察外界事物时,物体距离视点越远,看起来越小。这种众所周知的_透视_效果在艺术和计算机图形领域广泛应用,对于创建现实场景至关重要。当然,Unity 支持透视摄像机,有时需要专门在没有这种效果的条件下渲染视图。例如,需要创建一种与真实世界的对象不完全相同的地图或信息显示效果。显示的对象不随距离变远而缩小的摄像机称为正交摄像机;Unity 摄像机也有这样的选项。在透视和正交模式下观察场景称为摄像机投影。(上述场景来自于 BITGEM)
对于从当前位置能“观察”的最远距离方面,透视和正交摄像机都存在一定的限制。该限制由垂直于摄像机向前 (Z) 方向的平面定义。此平面称为远裁剪面,因为与摄像机距离较远的对象将被“裁剪”(即,不在渲染范围内)。摄像机附近还有一个相应的近裁剪面;可观察的距离范围位于这两个平面之间。
在非透视模式下,无论距离远近,对象大小不变。这表示,正交摄像机的视体由两个裁剪面之间的长方体定义。
使用透视摄像机时,对象会随其与摄像机的距离增大而缩小。这表示场景中可视部分的宽度和高度随着距离的增大而增大。因此,透视摄像机的视体不是一个长方体,而是金字塔形状,其顶点位于摄像机位置而底部位于远裁剪面。不过,该形状并不是严格的金字塔形,因为顶部被近裁剪面截断了;这种被截断的金字塔形状称为平截头体。由于平截头体的高度并非常量,平截头体由其宽度与高度之比(称为宽高比)以及顶部与底部之间在顶点处的夹角(称为视野即FOV)定义。请参阅关于了解视锥体的页面,了解更多详细说明。
对于室内场景,摄像机可能总是完全位于代表建筑物内部、洞穴或其他结构的某个对象内。但是,当动作发生在室外时,对象之间会有许多不含任何对象的空白区域;这些背景区域通常表现为天空、空间或水下场景的黑暗深处。
摄像机不能完全不顾背景,因此必须用一些对象填充空白空间。最简单的方法是在基于背景渲染场景之前,先将背景清理成单调的颜色。可以使用摄像机的 Background属性来设置此颜色,在检视面板或脚本中进行操作。有一种更复杂的方法非常适合处理室外场景,即使用天空盒 (Skybox)。顾名思义,天空盒的行为类似于一个布满天空图像的“盒体”。摄像机被有效地放置在此盒体的中央,并可从各个方向观察天空。摄像机在旋转的过程中可观察到天空的不同区域,但是摄像机绝不会移出中心位置(所以摄像机无法“靠近”天空)。天空盒是在场景中所有对象的后面渲染,因此表现了一个无限远的视图。最常见的用法是在标准室外场景中表现天空,但盒体实际上完全围绕着摄像机,甚至在摄像机下面也是如此。因此,可使用天空盒来表现场景的某些部分(例如,延伸到地平线之外的起伏平原)或者太空或水下场景的全方位视角。
You can add a skybox to a scene simply by setting the Skybox property in the Lighting window (menu: Window > Rendering > Lighting Settings). See this page for further details on how to create your own skybox.