unity摄影机depth模式_Unity3d摄像机详解
一 概述
Unity的相机用来将游戏世界呈现给玩家。你始终至少有一个相机在场景中,你也可以有多个。多相机可以给你一个双人分屏效果或创建高级的自定义效果。你可以让相机动起来,或用物理(组件)控制它们。几乎你能想到的任何事,都可以用相机变成可能,而且为了适合你的游戏风格,你可以用典型的或特殊的相机类型。
二 属性
1 clear flags
确定屏幕的哪一部分将被清除。
每个摄像机在渲染它视图的时候都会缓存颜色和深度信息。绘制出来的图像中那部分没有被绘制到的部分是空白的,默认的情况下会显示天空盒的颜色。
当使用多个摄像机的时候,每个都在缓存中存放了它自己的颜色和深度信息,在每个相机渲染的时候会累积更多的数据。在场景中任何特定的摄像机渲染其视图的时候,可以指定清除标志来清除缓存信息中的不同部分。可选项有sky
box,solid color,depth only和dont clear。
<1> Skybox
这是清除标志的默认设置。屏幕的任何空白部分都会显示摄像机的天空盒,如何当前摄像机没有设定天空盒,它会默认使用渲染设置中(Eidt->Render Settings)的天空盒。假如默认渲染设置中也没有设定天空盒,它会退而使用背景色。可以选择是否将一个天空盒组件添加到摄像机。
<2> Solid Color
屏幕的任何空白部分都会显示当前摄像机的背景色
<3> Depth Only
如果想要绘制一个玩家的枪而不让它在环境中不被裁剪,可以设定一个深度为0的相机来绘制环境,同时另一个深度为1的相机单独绘制这个武器。武器相机的清除标志应该设置成Depth Only。这会保持环境的图形显示在屏幕上,但是丢弃所有关于每个对象处于3D空间什么位置的信息。当枪被绘制的时候,被绘制出来的不透明部分会完全覆盖现有的被绘制的环境图像,而不管枪离墙壁多近。
为相机使用Depth Only作为清除标志,会使相机仅仅根据相机的深度信息来输出画面,比如相机深度为N的清除标志设为Depth only,那么它的输出会直接覆盖在所有深度小于N的相机输出画面上,而不管在真实的3D环境中,各种对象的z值如何。
<4> Don’t clear
这个模式下不会清除颜色和深度缓存。这会导致下一帧会在上一帧的结果上进行绘制,这个模式在游戏中用得少,一般用于常规的shader中。
不清除的话不过一会屏幕所有的空白区域都会被填满,完全看不出是什么东西。
2 Background
在没有天空盒的时候,当所有的元素绘制完成后剩余屏幕的颜色,即那些没有被元素绘制到的屏幕区域显示的颜色
3 Culling Mask
用于来设定是否剔除处于某一层的对象。Unity场景中的每一个对象,都被分配了一个层,默认为“default”层。打开层级管理器可以看到初始状态下分配了8个层,即0-7层是已经被U3D使用,而”default”处于第0层。
摄像机的Culling Mask的可选项就是这些被使用的层,外加两个完全选项Everthing和Nothing,摄像机Culling Mask的默认选择是Everything,即不剔除任何层,这个时候所有的层也都被选中,如下图
假如现在要隐藏处于Background Image层的对象,只需在该列表中取消勾选Background Image即可。
4 Projection
摄像机的投影方式,有透视投影和正交投影两种。
正交投影:投影线垂直于投影面,也叫平行投影
将摄像机设成正交投影,可以看到它变成了一个立方体
5 Size
当摄像机设成正交投影时,摄像机对应的那个长方体的大小
6 Field of view
视角,透视投影时才有的特性。视角越大,能看到的视野也越大,对应的焦距也越短
7 Clipping Planes
裁剪平面,Near和Far指定了裁剪的区域范围,即在Near-Far范围之内的面将被裁剪掉,不进行渲染。
远近裁剪平面和由Field Of view决定的平面一起构成一个椎体,被称为相机椎体或视椎体,完全处于该椎体之外的物体将会被剔除,这被称为椎体剔除。
8 Normalized viewport rect
指定如何将摄像机的视图绘制到屏幕坐标系上(取值范围为0-1)
X:摄像机视图在屏幕上被绘制的水平初始位置
Y:摄像机视图在屏幕上被绘制的垂直初始位置
W:摄像机视图输出图像占屏幕宽度的比例
H:摄像机视图输出图像占屏幕高度的比例
U3D屏幕的坐标系是以左下角为坐标原点,向右为X轴,向上为Y轴
9 Depth
摄像机在绘制序列中的位置(层级)。有更大深度值的摄像机将会在深度值更小的摄像机上面绘制,即假如两个相机C1和C2,深度值分别为10和8,假如将摄像机设为在场景中可见,则C1会在C2的上层绘制,会把摄像机C2也绘制到图像中
10 Rendering Path
用于指定摄像机使用哪种渲染方法,有下面几种Use Player Settings,摄像机会使用在玩家配置里面指定的渲染路径
Vertex Lit,所有被该摄像机渲染的对象都会被渲染成Vertex-Lit对象
Forward,所有的对象都会被渲染为一个材质对应一个通道
Deferred Lighting,所有的对象在没有光照的情况下绘制一次,然后在渲染队列的末端将所有对象的光照一起绘制,也就是所谓的“延迟光照”技术。
11 Target Texture
可以用于容纳摄像机视图输出的Render Texture对象的引用,设定这个引用将会禁止摄像机将视图绘制到屏幕
12 HDR
启用摄像机的高动态范围渲染(High Dynamic Range Rendering)
三 示例
示例:在屏幕上显示一个2D背景图
做法如下,来自这里创建一个新的摄像机,取名为”Background Camera”
创建一个新的GUI贴图,取名为”Background Image”
单击Background Image的监视器面板的”Layer”下拉按钮,创建一个新的层,取名为”Background Image”
设置好贴图Background Image的大小和位置,同时将它的层设定为“Background Image”
选中Background Camera,对它的一些属性进行这样的操作:取消勾选Flare Layer和Audio Listener,设定清除标志为Solid
Color,设定深度为-1,先将Culling Mask设为nothing,然后设为Background Image
选中主摄像机,设置清除标志为Depth Only,将它的Culling
Mask里面的Background Image取消勾选
到此为止,即设定了一个屏幕的背景贴图。这里先将背景相机的清除标志设置为Solid Color,那么该相机绘图后的空白区域就会填充背景色,让后通过设置Culling Mask使其仅仅显示层”Background Image”,也就是说背景摄像机仅仅绘制背景贴图,空白部分用背景色填充。然后主摄像机设置Culling
Mask使其不绘制背景贴图,并且将清除标志设置成Depth Only,因为背景相机的深度为-1,那么主相机的深度就为0,背景相机先进行绘制,然后主相机进行绘制,主相机绘制出来的不透明的部分会完全覆盖在前面层级相机的图像上,也就是说主相机的绘制结果会直接覆盖到背景贴图上,这就达到了屏幕背景贴图的效果。
假如要进行满屏显示的话,手动调整背景图的大小显然是不实际的,应该使用代码
backgroundGUITexture.pixelInset.width = Screen.width;
backgroundGUITexture.pixelInset.height = Screen.height;
backgroundGUITexture.pixelInset.x = 0;
backgroundGUITexture.pixelInset.y = 0;
但是由于程序运行的时候可能分辨率会发生改变,所以前面的两句应该设置成和分辨率相关的大小
backgroundGUITexture.pixelInset.width = Screen.currentResolution.width;
backgroundGUITexture.pixelInset.height = Screen.currentResolution.height;
http://blog.csdn.net/wjlsxl_whb/article/details/53019053
unity摄影机depth模式_Unity3d摄像机详解相关推荐
- unity摄影机depth模式_Unity3D Camera 摄像机属性详解
unity3d 摄像机参数 1. Clear Flags: 清除标记.决定屏幕的哪部分将被清除.一般用户使用对台摄像机来 描绘不同游戏对象的情况,有 3 中模式选择: Skybox : 天空盒. 默认 ...
- unity摄影机depth模式_摄像机的深度图
Camera可以创建深度图.深度+法向纹理.运动向量图.这算是一种简化版的G-buffer,这些纹理图可以用在post-processing中,从而实现自定义的光照模型.我们也可以使用Shader R ...
- Cocos 技术派 05 | Camera 摄像机详解
往期技术派文章: 第01期<野蛮人大作战>从开发到上线 第02期 Cocos Creator 2.0 摄像机的灵活运用 第03期 插件推荐 CC_inspector + 第04期 实时竞技 ...
- java 工厂模式详解_java 工厂模式的实例详解
java 工厂模式的实例详解 工厂方法中的"工厂"和我们平常理解的一样:用于生产产品. 而客户是要和产品打交道,所以工厂方法模式的意义在于把客户和产品分开,达到解耦和更灵活的目的. ...
- LVS-NAT和LVS-DR模式的实现详解
LVS-NAT和LVS-DR模式的实现详解 2011-09-10 10:51:08 我来说两句 收藏我要投稿 linux下LVS的实现 在2.4.23之前的linux内核想要使用LVS需要重新 ...
- 【5G RLC】AM模式的数据传输详解
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G ...
- STM32寄存器操作端口模式CRL/CRH详解
STM32寄存器操作端口模式CRL/CRH详解 首先,在开始讲解前,大家请先看如下一段代码: #define SDA_IN_24c02(){GPIOB->CRH&=0XFFF0FFFF; ...
- 【虚幻引擎UE】UE5 三种模式调用API详解(案例基于免费Varest插件)
[虚幻引擎UE]UE5 三种模式调用API详解(案例基于免费Varest插件) 想通过UE5 调用API实现GET和POST, 可以通过自己编写C++方法, 或基于相关HTTP请求插件, 如Vares ...
- RabbitMQ--交换器类型/队列模式--使用/教程/详解
原文网址:RabbitMQ--交换器类型/队列模式--使用/教程/详解_IT利刃出鞘的博客-CSDN博客 简介 本文介绍RabbitMQ的交换器类型和队列模式. 本内容也是Java后端面试常见的问题. ...
最新文章
- C++ 打造自己的Windows终端服务客户端(转)
- element-ui上传下载excel(超详细der)
- Visual Studio 2008 环境变量的配置(参考设置VS2010)
- 前端学习(2009)vue之电商管理系统电商系统之渲染商品属性的结构
- 叮叮叮 重点之中的python必备英语单词(2)来啦!请记得查收
- 3Dslicer中 PET/CT 模块:PET Standard Uptake Value Computation
- clojure 使用Lazy-seq创建斐波那契数列
- html 5 新增标签及简介
- Win10优化大师Windows 10 Manager v3.4.6.0 官方安装绿色版
- 【CVPR2022】论文列表与下载——PartFour
- FTP、Telnet、SMTP、POP3等服务的名称及端口号和各种数据库的端口号
- 量化交易18-先认识K线形态:下跌形态:十字暮星、暮星、墓碑十字/倒T十字、上吊线、风高浪大线、修正陷阱、颈内线、颈上线、黄包车夫、纺锤、停顿形态、条形三明治
- Zoommy for mac最新免费版(图片素材搜索下载软件)
- C#学习纪要(8):7月17日
- 深大教学区Dr.com,实现校园网自动认证的请求
- Trace32使用教程-访问类型(Access Class)
- 谷歌浏览器实现浏览器页面速播放视频
- JAVA图片裁剪工具类
- 378、有序矩阵中第K小的元素
- 错误接受率 (FAR), 错误拒绝率(FRR), 等错误率(EER)
热门文章
- 《机器学习》总结与心得
- 那些好看的渐变色linear-gradient(拿走不谢)
- 通过域名解析对应的IP地址
- java计算机毕业设计小型企业员工工资管理系统源码+系统+数据库+lw文档+mybatis+运行部署
- 树莓派博通BCM2835芯片手册导读及io口驱动代码的实现
- Icons - Material Design各种ICON图标大全
- [BUAA OO Unit 2 HW8] 第二单元总结
- 编辑为什么建议转投_编辑回信解读 —“建议转投子刊”实例
- 一个经济学果粉对国内iOS游戏厂商的5点斥责和5个建议
- 植物2 IOS 怎么实名认证_植物大战僵尸2未来世界22天困难怎么过关 植物阵容推荐...