[转载] Unity3D 摄像机详解
作者:李志健
正如电影中的镜头用来将故事呈现给观众一样,Unity的相机用来将游戏世界呈现给玩家。你始终至少有一个相机在场景中,你也可以有多个。多相机可以给你一个双人分屏效果或创建高级的自定义效果。你可以让相机动起来,或用物理(组件)控制它们。几乎你能想到的任何事,都可以用相机变成可能,而且为了适合你的游戏风格,你可以用典型的或特殊的相机类型。
摄像机
相机是为玩家捕捉和显示世界的一种装置。通过定制和操作相机,可以让你的游戏外观与众不同。在一个场景中你可以有数量不限的相机。它们可以被设置为以任何顺序来渲染,在屏幕上的任何地方来渲染,或仅仅渲染屏幕的一部分。
属性
Clear Flags 清除标记
决定屏幕的哪部分将被清除。当使用多个相机来描绘不同的游戏景象时,利用它是非常方便的
Background 背景
在镜头中的所有元素描绘完成且没有天空盒的情况下,将选中的颜色应用到剩余的屏幕
Culling Mask 剔除遮罩
包含或忽略相机渲染对象层。在检视视图中为你的对象指派层
Projection 投射
切换摄像机的模拟透视功能
--> Perspective 透视
相机将用完全透视的方式来渲染对象。
--> Orthographic 正交
相机将用没有透视感的方式均匀地渲染对象
Size 大小
当设置了正交时摄像机的视口大小。
Field of view 视野范围
相机的视角宽度,以及纵向的角度尺寸。
Clipping Planes 剪裁平面
从相机到开始渲染和停止渲染之间的距离。
--> Near 近点
开始描绘的相对于相机最近的点。
--> Far 远点
开始描绘的相对于相机最远的点。
归一化视口矩形
用四个数值来表示这个相机的视图将绘制在屏幕的什么地方,使用屏幕坐标系(值0-1)。
--> X
相机视图将进行绘制的水平位置的起点
--> Y
相机视图将进行绘制的垂直位置的起点
--> W (Width) 宽度
相机输出到屏幕上的宽度
--> H (Height) 高度
相机输出到屏幕上的高度
Depth 深度
绘图顺序中的相机位置,具有较大值的相机将被绘制在具有较小值的相机的上面
Rendering Path 渲染路径
该选项定义相机将要使用的渲染方法
--> Use Player Settings 使用播放器设置
该相机将使用任意一个播放器设置中所设置的渲染路径
--> Vertex Lit 顶点光照
本相机对所有对象的渲染会作为顶点光照对象来渲染
--> Forward 快速渲染
所有对象将按每种材质一个通道的方式来渲染,如同在Unity2.x中的标准
--> Deferred Lighting 延迟照明
所有对象将无照明绘制一次,然后所有对象的照明将一起在渲染队列的末尾被渲染。
Target Texture 目标纹理
(Unity Pro/Advanced only)
请参考Render Texture,该页包含了相机视图的输出。这个引用属性将禁用相机渲染到屏幕的功能。
细节
相机对于将你的游戏显示给玩家是必不可少的。它们可以被定制、被脚本化、或被子类化以实现几乎任何可以想象的效果。对于一个益智游戏,你要保持相机处于静态显示全部视角。
对于第一人称射击游戏,你应该将相机作为玩家角色的子对象,并将其放置在与角色的眼睛等高水平上。对于一个赛车游戏,你可能更希望让相机跟随玩家的车辆。
你可以创建多个相机并且给每一个分配不同的深度。相机是按深度从低到高来绘制的,换言之,一个深度为2的相机将绘制在一个深度为1的相机之上。你可以调整标准视口矩形(参照前面的属性列表)的属性值来改变其大小和其在屏幕上的位置。这样你就可以创建多个小视窗,如导弹控制器,小地图窗口,后视镜等等。
Render Path 渲染路径
Unity支持不同的渲染路径。你应该选择哪一个取决于你的游戏内容和目标平台/硬件。不同的渲染路径有不同的功能和性能特点,主要影响光源与阴影。你的项目使用的渲染路径是在播放设置中选择的,此外,你可以为每个相机覆盖它(就是重新选择一种渲染方式)。
更多渲染路径的信息,请查看rendering paths page。
Clear Flags 清除标记
每个相机在渲染时会存储颜色和深度信息。屏幕的未绘制部分是空的,默认情况下会显示天空盒。当你使用多个相机时,每一个都将自己的颜色和深度信息存储在缓冲区中,还将积累大量的每个相机的渲染数据。当场景中的任何特定相机进行渲染时,你可以设定清除标记以清除缓冲区信息的不同集合。可以通过下面四个选项之一来完成:
Skybox 天空盒
这是默认设置。在屏幕上空的部分将显示当前相机的天空盒。如果当前相机没有设置天空盒,它会默认使用渲染设置(在Edit->Render Settings里)中选择的天空盒。然后它将退回使用背景颜色。
Solid Color 纯色
屏幕上的任何空的部分将显示当前相机的背景颜色。
Depth Only 仅深度
如果你想绘制一个玩家的枪(想象一下cs里的枪只在屏幕中显示一半)而不让它在环境里被剔除,你要设置一个深度为0的相机来绘制环境,还要另一个深度为
1的相机单独绘制武器。该武器相机的清除标记应设置为仅深度。这将保持环境的图形显示在屏幕上,但会丢弃所有关于每个对象在三维空间中的位置的信息。当枪被绘制出来,不透明的部分将完全覆盖何已绘制的事物,而不管枪到墙之间如何接近。
在清除掉它前面的相机的深度缓存之后,枪最后被绘制
Don't Clear 不清除
该模式不清除任何颜色或深度缓存。其结果是,每帧绘制在下一帧之上,造成涂片效果。这不是用于游戏的典型方式,最好是与自定义着色器一起使用。
Clip Planes 剪裁平面
Near和Far,剪裁平面的这两个属性决定了相机的视野开始和结束的地方。这两个平面垂直于相机的方向,并且由相机的位置来确定。近平面是开始渲染的最近位置,远平面则是最远位置。
剪裁平面也决定深度缓存精度如何在场景上分布。一般来说,要得到更好的精度你应该移动Near平面尽可能的远。
注意,Near和Far剪裁平面连同相机视野的轮廓平面一起构成的区域俗称相机锥(这种形状应该叫作棱台吧)。Unity确保在渲染你的对象时,那些完全在这个锥形区域外的对象则不显示。这就是所谓的可视剪裁。不论你的游戏是否使用遮挡剔除,可视性剪裁都将发生。
出于性能原因,你可能需要尽早剔除小物体。例如,小石块和碎片相对于大型建筑会在更短距离内不可见。要做到这一点,将小物体放入一个隔离层(separate layer)并使用Camera.layerCullDistances脚本函数设置每一层的剔除距离。
Culling Mask 剔除遮罩
剔除遮罩使用层有选择地渲染一组对象。有关使用层的信息可以在这里找到。
通常好的做法,是把用户界面放到不同的层,然后用一个独立相机单独渲染UI层。
为了使UI显示在其他相机视角的顶部,你还需要设置清除标记为Depth only,并确保UI相机的深度比其他相机高。
Normalized Viewport Rectangle 标准视口矩形
标准视口矩形是专门用来定义当前相机的视点将显示在屏幕的哪一部分。你可以把地图视角(意思就是小地图)放在屏幕右下角,或把导弹尖视角(可以理解为发射瞄准镜)放到左上角。只需一点设计工作,你就可以用视口矩形创造出一些独特的行为。
使用标准视口矩形可以很容易地创建一个双人分屏效果。
在你创建了两个相机之后,
改变玩家1的Ymin值为0.5,玩家2的YMax值为0.5。这将使玩家1的相机显示在屏幕的上半部分,玩家2的相机显示在屏幕下半部分。(Ymin、Ymax应该是旧版本的参数吧,3.1版的参数见前面列表)
使用标准视口矩形创建的双人分屏
Orthographic 正交
用正交标记一个相机将从相机视角中移除透视效果,这主要用于等轴游戏或2D游戏。
Perspective camera.透视相机
正交相机,对象不会因距离远而变小
Render Texture 渲染纹理
此功能仅适用于Unity Pro版,它将放置相机的视图到一个纹理上,该纹理可以被应用到另一个对象。这使得它可以方便地创建体育场大屏幕、监控摄像机、倒影等等效果。
渲染纹理用来创建一个直播监视器
Hints 提示
相机可以像其他对象一样被实例化、父子化和脚本化
为提高赛车游戏的速度感,请使用高视野范围。
如果你添加一个刚体组件,相机可用于物理模拟。
在你的场景中你可以使用的相机数量是没有限制的。
正交相机可以很好地用于制作3D用户界面。
如果你正遭遇深度问题(表面互相接近闪烁),尝试设置Near Plane尽可能大。
相机无法同时渲染到屏幕和渲染纹理,只能有一个。
Pro版有一个渲染相机的视图到纹理的选项,称为渲染到纹理,可以得到更独特效果。
Unity预装了相机脚本,在Components->Camera Control中可以找到。用它们来实验以体会
"一切皆有可能"。
- 大小: 187.9 KB
- 大小: 365 KB
- 大小: 440.9 KB
- 大小: 364.8 KB
- 大小: 431.6 KB
- 大小: 363.2 KB
分享到:
相关推荐
《Unity 3D实战核心技术详解》是一本专为Unity初学者和进阶者设计的电子书籍,旨在深度解析Unity 3D开发中的关键技术和实践应用。Unity 3D是一款广泛应用于游戏开发、虚拟现实(VR)、增强现实(AR)和其他交互式...
在Unity 3D游戏开发中,摄像机(Camera)扮演着至关重要的角色,它负责将游戏世界的场景渲染到屏幕上。摄像机的Clear Flags(清除标记)和Culling Mask(剔除遮罩)属性是摄像机组件中非常重要的两个设置,它们决定...
### Unity3D ShaderLab开发实战详解 #### 一、ShaderLab简介 ShaderLab是一种用于Unity游戏引擎中的着色器语言,它允许开发者直接编写GPU代码来实现复杂的视觉效果。ShaderLab是Unity内置的一种混合了HLSL(High-...
Unity3D 之 Lightmap 详解 Unity3D 提供了一个强大的光照贴图系统,称为 Lightmap,它可以将场景中的光照信息烘培到纹理中,从而提高游戏的性能。Lightmap 是 Unity3D 中的一种重要技术,它可以将场景中的光照信息...
Unity3D游戏开发技术详解与典型案例,完整版,一共四个压缩包
8. **摄像机与视图**:理解不同类型的摄像机和视图设置,如何实现相机运动和视口切换,以及如何利用多摄像机实现复杂的视角效果。 9. **资源管理与优化**:学习如何有效地管理资源,包括导入设置、资源打包和延迟...
电子书下载 : http://blog.csdn.net/good3651/article/details/53420721 -------《Unity 3D游戏开发技术详解与典型案例》对Unity 3D集成开发环境界面、脚本的编写和众多高级特效的实现进行了详细的介绍,内容深入浅...
Unity3D是一款强大的跨平台游戏开发引擎,广泛用于制作2D和3D游戏、互动体验以及虚拟现实应用。其中,粒子系统(ParticleSystem)是Unity3D中的一个重要组件,它允许开发者创建各种动态视觉效果,如火焰、烟雾、水波...
Unity3D 技术之 Unity3D 中的协程(Coroutine)详解 本文将详细介绍 Unity3D 中的协程(Coroutine)技术,包括为什么需要协程、协程的定义和工作原理、如何使用协程等方面的知识点。 一、为什么需要协程 在游戏中...
Unity 3D ShaderLab开发实战详解 pdf扫描版[238MB] 附随书源码这是part1,一共有2部分,都下载后一起解压才能用
"Unity3D内部Shader详解.doc"可能包含以下内容:讲解了Unity3D中Shader的基本结构,如顶点着色器(Vertex Shader)和片段着色器(Fragment Shader)的职责,以及如何在ShaderLab语言中定义和使用它们。文档可能还会...
《Unity3D ShaderLab开发实战详解》是一本深入探讨Unity引擎中ShaderLab技术的专业书籍,其源代码提供了丰富的实例,帮助读者深入理解并掌握Shader编程。ShaderLab是Unity3D中的一个专用语言,用于创建自定义图形...
Unity3D游戏开发技术详解与典型案例,完整版,一共四个压缩包,这是第1个, 吴亚峰 于复兴 编著
Unity3D游戏开发技术详解与典型案例,完整版,一共四个压缩包,这是第三个
《Unity3D太阳系模拟项目详解》 Unity3D是一款强大的跨平台游戏开发引擎,它在3D游戏、教育模拟、虚拟现实(VR)、增强现实(AR)等领域都有着广泛的应用。本项目“Unity3D太阳系(标准)”正是利用Unity3D引擎构建的一...
### Unity3D游戏设计与实现知识点详解 #### 一、Unity3D概述 Unity3D是一种跨平台的游戏开发工具,支持多种操作系统,如Windows、MacOS等,并且能够发布到多个平台,包括PC、Web、iOS、Android等。它不仅为专业...
《Unity3d Shaderlab开发实战详解(第二版)》是一本深入探讨Unity3d着色器编程的专业书籍,配套光盘包含完整的源码工程,旨在帮助开发者深入理解并掌握Shaderlab语言在Unity3d中的应用。Shaderlab是Unity引擎中用于...
* 主摄像机:读者将学习如何设置游戏中的摄像机,了解游戏角色的基本操作。 * 规范化窗口视图:读者将学习如何设置游戏中的窗口视图,了解游戏角色的基本操作。 * 画中画效果:读者将学习如何创建画中画效果,提高...
4. **游戏对象与组件**:Unity中的每个3D模型、光源、摄像机等都是游戏对象,它们由不同的组件构成,如Transform组件负责位置、旋转和缩放,Mesh Renderer显示3D模型,Collider处理物理碰撞。理解这些组件的使用是...