首先,要从主画布说起,maincanvas,这个有什么限制?
主画布是一张默认用来绘制UI的地方,这些UI必须是系统提供的UI组件,在画面下挂一个3D物体或非UI的2D物品是不会被绘制到画布上的,但是仍然会绘制到世界空间,但会被UI挡住,因为UI是绘制在所有其它游戏元素(3D物体,精灵,特效)之上的。因为画布的渲染队列数值最高。

渲染队列数值大的绘制会覆盖数值小的绘制,


sprite属于3000的半透明队列,因此,不可能将sprite放到UI上显示,它永远被UI盖住,除非重写它的shader。

因此,要想在UI之上显示一个3D模型,须要使用UI相机。所谓UI相机是指为相机指定target texture参数,相机将绘制到这张贴图而不是屏幕上。

然后将磁盘上生成的这张贴图赋给一个rawtexture组件,这样就将3D模型转为图片然后画到了UI上。

多个相机的作用是根据它们的depth值从小到大来顺序起作用的,与相机位置无关,与相机在场景层级中出现的先后无关,主相机默认 depth:-1。根据相机中的culling mask 属性来决定相机绘制的物件种类,根据相机视口来决定相机可见范围。举例:有A,B,C三个相机,深度值依次为-1,0,1,则绘制时:先启用A相机,从它的角度拍摄一张照片,这张昨默认是渲染到屏幕上的。然后启用B相机,默认设置,渲染到屏幕,这时候屏幕画面被B相机的画面覆盖(A相机在屏幕上的所有像素被覆盖掉),若想保留A相机的画面,同时将B相机的画面叠加上去,这时候可以设置相机的clear color为 depth only

另外:深度测试时,物体的深度值是指物体在相机坐标系中的Z值

PS: 渲染队列按数值划分:

1000:background, 2000: geometry, 3000:transparent, 4000:overlay,文档说明如下:

For special uses in-between queues can be used. Internally each queue is represented by integer index; Background is 1000,Geometry is 2000, AlphaTest is 2450, Transparent is 3000 and Overlay is 4000. If a shader uses a queue like this:

Tags { "Queue" = "Geometry+1" }

什么时候必须使用UI相机? 多个相机的作用原理?的更多相关文章

  1. 有关默认相机转VR相机

    呃...15年开篇~ 去年想写一个有关默认相机转VR相机的脚本,当时没写完,今天不小心翻到并写完了,而且思路也和原来完全不一样了,增加了是否删除原相机与是否转换所选相机的选项. 由于国内VR版本比较混 ...

  2. 干货 | LIDAR、ToF相机、双目相机如何科学选择?

    点击"计算机视觉life"关注,置顶更快接收消息! 本文阅读时间约5分钟 本文翻译自卡内基梅隆大学 Chris asteroid 三维视觉技术的选择 传感器参数及定义 LIDAR ...

  3. Android调用系统相机、自定义相机、处理大图片

    Android调用系统相机和自定义相机实例 本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显示出来,该例子也会涉及到Android加载大图片时候的处理 ...

  4. unity, 相机空间 与 相机gameObject的局部空间

    在unity里 相机空间 与 相机gameObject的局部空间 不重合. Camera.worldToCameraMatrix的文档中有这样一句话: Note that camera space m ...

  5. Android相机使用(系统相机、自定义相机、大图片处理)

    本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显示出来,该例子也会涉及到Android加载大图片时候的处理(避免OOM),还有简要提一下有些人Surf ...

  6. Android调用系统相机以及自定义相机

    0.综述 自定义相机,此处展示简单的相机功能,官方文档中还有相应关于视频拍摄的内容,此处不提 1.添加权限 <!--相机权限,数据存储--> <uses-permission and ...

  7. Unity设置相机正交相机和透视相机的动态切换

    Camera.main.orthographic = true;    Camera.main.orthographicSize = 4;    Camera.main.orthographic = ...

  8. 2D UI和3D UI的工作原理

    2D UI的工作原理 UI控件的位置在UI Root 的红框(视窗)上,也就是UI控件的z轴,相机的z轴,UI Root的z轴都是0,因为2D UI都是纯粹的2D图片按层次显示,不会不出现三维立体效果 ...

  9. 创建第一个UI

    创建一个2D UI 制作UI时,首先要创建UI的"根".在Unity顶部NGUI菜单中选择Create,然后选择2D UI. 创建完成后,在Scene窗口中,NGUI自动生成了一个 ...

  10. 【Android Developers Training】 50. 控制相机

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

随机推荐

  1. FreeMarker自定义TemplateDirectiveModel

    [参考:http://blog.csdn.net/fangzhangsc2006/article/details/8687371] 在采用FreeMarker做前台视图模板的情况下,我们可以通过< ...

  2. 每天一个linux命令(目录文件操作):【转载】linux文件属性详解

    Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组.最近访问或修改的时间等内容.具体情况如下: 命令:  ls -lih 输出: [root@loc ...

  3. spring自定义标签学习

    看到几篇很全的自定义标签,从定义到使用,写的很好. 这里我也是在那里学习的,对学习spring源码也很有帮助. 贴出来与大家共享. http://sammor.iteye.com/blog/11009 ...

  4. POJ3696 The Windy's 【网络流】

    #include<iostream> #include<vector> #include<cstring> #include<algorithm> #i ...

  5. 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦)

    知道了 csproj 文件中的一些常用 NuGet 属性,创建 NuGet 包时就可以充分发挥新 Sdk 自动生成 NuGet 包的优势,不需要 nuspec 文件啦.(毕竟 nuspec 文件没有 ...

  6. 从 “x is null 和 x == null” 的区别看 C# 7 模式匹配中常量和 null 的匹配

    尝试过写 if (x is null)?它与 if (x == null) 相比,孰优孰劣呢? x is null 还有 x is constant 是 C# 7.0 中引入的模式匹配(Pattern ...

  7. RF第二讲--Selenium2Library库的简单实用

    现在对于RF的应用方法已经有很多书介绍了,网上也可以搜到免费的电子书可以学习.今天就简单和大家介绍一下RF的用法之一,就是基于Selenium2Library库的使用. 1.首先需要安装Seleniu ...

  8. input type = number 去除上下箭头,禁用滚轮事件(默认的自带滚轮加减数字)

    <style type="text/css"> /*盒子大小从边框开始计算*/ html * { box-sizing: border-box; } /*解决模态框抖动 ...

  9. asp.net如何判断服务器上的目录或文件是否存在

    asp.net判断服务器上的目录或文件是否存在!(实例) // ======================================================= [判断文件是否存在] u ...

  10. HttpMessageConvert

    1. 我们先来看看框架会自动注册哪些httpmessageconvert? 在哪个地方开始注册的? 在对mvc:annotation-driven解析的AnnotationDrivenBeanDefi ...