3D UI 交互和 摄像机的Clar Flags 四种模式,Depth 深度理解,Randerer path 渲染方式控制

1 3D UI 交互

 将 精灵直接拖入3D场景

Spriter render       2D ui 放入3D场景中自动系统自动添加该组件

 BOX collider组件    射线检测

 Button 组件        变色控制    点击事件

Event Trigger 组件   添加各种触发控制,鼠标进入….离开。等等

要显示的摄像头 Main Camera 添加PhysicsRaycaster  组件

之后鼠标就可以出发3D场景中的UI 

2 如何让3D中的UI 标签总显示在模型的前面(无论位置如何调整)

1 为3D 标签添加标签层 

设置标签层为BQ

2 添加俩个一样的摄像机设为父子关系

 

父相机设为 Depth Only

Culling Mask   只渲染标签  

Depth   设为1   

3.子相机根据需求设为Solid Color 或SKY box

 Culling Mask    设为  Mixed    不渲染 BQ层  

 Depth 设为 0     设为5 就不渲染了(其实是看不见了)      必须小于1

 

注意: 标签层相机必须大于要优先渲染的物体 ,

       且为 depth Only   其他模式会看不见其他相机的物体

       当场景只有一个相机的时候  

         Depth OnlY  移动物体时---出现影像残留          don’t Clare  也会

       当场景有俩个相机的时候

       Depth OnlY  将不会出现物体影像残留,一切正常    don’t Clare  也是一样

摄像机的四种模式和深度理解:

 每个相机在渲染时会存储颜色和深度信息。屏幕的未绘制部分是空的,默认情况下会显示天空盒。当你使用多个相机时,每一个都将自己的颜色和深度信息存储在缓冲区中,还将积累大量的每个相机的渲染数据。当场景中的任何特定相机进行渲染时,你可以设定清除标记以清除缓冲区信息的不同集合。可以通过下面四个选项之一来完成:

1.Skybox 天空盒

   这是默认设置。在屏幕上空的部分将显示当前相机的天空盒。如果当前相机没有设置天空盒,它会默认使用渲染设置(在Edit->Render Settings里)中选择的天空盒。然后它将退回使用背景颜色。另外天空盒组件可以添加到相机上。如果你想创建一个新的天空盒,您可以使用本指南

2.Solid Color 纯色

    屏幕上的任何空的部分将显示当前相机的背景颜色。

 

3.Depth Only 仅深度

如果你想绘制一个玩家的枪而不让它在环境内部得到裁剪,你要设置一个深度为0的相机来绘制环境,还要另一个深度为1的相机单独绘制武器。该武器相机的清除标记应设置为仅深度。这将保持环境的图形显示在屏幕上,但会丢弃所有关于每个对象在三维空间中的位置的信息。当枪被绘制出来,不透明的部分将完全覆盖任何已绘制的事物,而不管枪到墙之间如何接近。(这部分看起来很费劲)---------------------也就是标签的设置

4.Don’t Clear 不清除

该模式不清除任何颜色或深度缓存。其结果是,每帧绘制在下一帧之上,造成涂片效果。这不是用于游戏的典型方式,最好是与自定义着色器一起使用。

Culling Mask 剔除遮罩

剔除遮罩使用层有选择地渲染一组对象。有关使用层的信息可以在这里找到。

通常好的做法,是把用户界面放到不同的层,然后用一个独立相机单独渲染UI层。

为了使UI显示在其他相机视角的顶部,你还需要设置清除标记为Depth only,并确保UI相机的深度比其他相机高。

 同样的,如果是制作游戏,你可以创建一个界面摄像机,单独渲染界面,而别的摄像机将渲染场景。你只需要添加UI图层,将所有的界面物体的Layer设置为UI,UI摄像机的Culling Mask也只勾选UI层。

Depth 深度

 首先在Unity场景中创建两个摄像机,分别命名为camera1和camera2;

           再在场景中创建一个cube和Sphere作为摄像机的拍摄物体;并让两摄像机都能够拍摄到两个物体。

           接着设置camera1的Depth为0,camera2的Depth为1;

           你会发现Game窗口将只显示camera2拍摄到的画面;

   可见摄像机Depth属性设置相机绘图顺序,具有较大值的相机将被绘制在具有较小值的相机的上面,换言之,一个深度为1的相机将绘制在一个深度为0的相机之上。

摄像机Display的理解:

Display 1   -----窗空置显示这个Display1演示下的物体

Display 2   ------窗空置显示这个Display2演示下的物体

一个Game视图中只能显示一个Display

Game 视图中可以选择的去显示哪个 Display

可以选择右键Game 视图去 Add game 窗口 同时显示俩个Game 窗口

渲染路径:

  Unity支持不同的渲染路径。应具体取决于你的游戏内容和目标平台/硬件来选择使用哪一个。不同的渲染路径有不同的特点和性能特点,主要影响灯光和阴影。
       项目所使用的渲染路径在Player Settings选择。此外,可以为每个摄像机重写(不同摄像机可以是不同的设置)。如果图形卡不能处理选定的渲染路径,Unity将自动使用一个较低保真度的设置。因此,在GPU上不能处理延迟照明(Deferred Lighting),将使用正向渲染(Forward Rendering)。如果不支持正向渲染(Forward Rendering ),将使用顶点光照(Vertex Lit)。

Forward Rendering 正向渲染
       正向渲染一个基于着色器的渲染路径。它支持逐像素计算光照(包括法线贴图和灯光Cookies)和来自一个平行光的实时阴影。在默认设置中,少数最亮的灯光在逐像素计算光照模式下渲染。其余的灯光计算对象顶点的光照。
       根据影响物体的光源的不同,正向渲染路径用单个或多个通道来渲染物体。在正向渲染中,光源本身也会根据他们的设置和强度受到不同的对待。
实现细节
       在正向渲染中,影响物体的最亮的几个光源使用逐像素光照模式。接下来,最多有4个点光源会以逐顶点渲染的方式被计算。其他光源将以球面调和(Spherical Harmonics)的方式进行计算,球面调和技术计算很快但只能得到近似值。根据以下的规则判断一个光源是否为逐像素光源:

  • 渲染模式被设置为不重要(Not Important)的光源以逐顶点或球面调和的方式进行计算
  • 最亮的方向光源为像素光源

  • 渲染模式被设置重要(Important)的光源为像素光源
  • 如根据以上规则得到的像素光源数量小于质量设置中的像素光源数量(Pixel Light Count),为了减少亮度,会有更多的光源以逐像素的方式进行渲染,向前渲染每个光照都会使用PASS块,所以在光照越多渲染的效率越低。

用以下的方法渲染每个物体:

  • 基础通道渲染一个逐像素方向光和所有的逐顶点/球面调和光。
  • 其他逐像素光在附加的通道中进行渲染,每个光源都需要一个通道

       假设光源A到H都有相同的颜色和强度,且它们的渲染模式都为自动的(Auto),那么它们严格的按照其名字排序。最亮的光源以逐像素光照模式的方式进行渲染(A到D),然后最多有4个光源以逐顶点光照模式进行渲染(D到G),其他光源以球面调和的方式进行渲染(G到H)。

     注意不同的光照组间有重叠,如,最后一个逐像素光源也以逐顶点光照模式的方式渲染,这样能减少当物体和灯光移动时可能出现的"光照跳跃"现象。
Base Pass 基本通道
       基础通道用一个逐像素方向光和所有球面调和光渲染物体。此通道还负责渲染着色器中的光照贴图,环境光和自发光。在此通道中渲染的方向光可以产生阴影。需要注意的是,使用了光照贴图的物体不会得到球面调和光的光照。
Additional Passes 附加通道
       附加通道用于渲染影响物体的其他逐像素光源。这些通道中渲染的光源无法产生阴影(因此,前向渲染支持一个能产生阴影的方向光)。
Performance Considerations 性能注意事项
       渲染球面调和光很快。它们只花费很少的CPU计算时间,并且实际上无需花费任何GPU计算时间(换言之,基础通道会计算球面调和光照,但由于球面调和光的计算方式,无论有多少球面调和光源,计算它们所花费的时间都是相同的)。
球面调和光源的缺点有:

  • 它们计算的是物体的顶点而不是像素。这意味着它们不支持投影遮罩和发现贴图。
  • 球面调和光只有很低的频率。球面调和光不能产生锋利的照明过渡。它们也只会影响散射光照(对高光来说,球面调和光的频率太低了)。
  • 球面调和不是局部的,靠近曲面的球面调和点光和聚光可能会"看起来不正确"。

二、延迟渲染

1、介绍

在计算机3D图形学中,延迟渲染技术是一种在屏幕坐标空间渲染的技术。所谓延迟渲染,即在顶点和片段着色器中的第一个通道中没有真正的渲染被执行,而是延迟到第二个通道中被渲染。

在第一个通道中,仅仅是收集渲染所需的计算数据。每个表面的位置、法线和材质信息被渲染到几何缓冲区(G-Buffer)中,这种渲染技术被重围渲染到纹理技术。之后,片段着色器使用贴图缓冲信息在屏幕坐标空间为每一个像素计算直接或间接的光照。屏幕坐标空间方向的遮挡能作为延迟渲染管道的一部分,给物体的阴影和相互之间的光照反射提供方向性。如图所示为延迟着色的渲染过程

 

 

1.1、漫反射颜色几何缓冲区

 

1.2、深度缓冲区(Z-buffering)

 

1.3、表面法线几何缓冲区

1.4、最后的合成效果(图中还含有阴影,

因此计算阴影映射和阴影

卷必须和延迟渲染一起使用)

2、优点

延迟着色的主要优点是场景几何面的渲染和光照渲染的解耦。只需要一个几何通道,并且每个光源只计算它实际影响的那些像素。这为GPU在场景中有多个光源的渲染减少了性能上的开销。还有一些附加在这个上面的优点,如,对复杂的光源管理更为方便、其他的着色器资源也易于管理以及简化软件渲染流水线。

3、缺点

延迟渲染的关键缺点就是它不能处理算法内的透明度,虽然这个问题在Z缓冲(深度缓冲)场景中是一个常见的问题,通常的处理方法都是采用将场景中的透明部分进行排序和延迟。深度剥离在延迟渲染中可以被用来实现顺序无关的透明度,但是付出的代价就是增加几何缓冲区(G-Buffer)和附加批次的大小。
支持DirectX 10以及更高版本的现代GPU显示硬件通常能够足够快的执行批次处理,以保持交互式帧率的稳定。当需要产生顺序无关的透明度时(通常在一些游戏中),延迟渲染并不会比正向渲染使用相同的技术有效。

(注:延迟渲染在正交摄像机模式下也是不支持的,如果摄像机切换到了正交模式之后就会默认使用正向渲染)

       延迟着色中的实时渲染开销与由光照射的像素的数量成比例,并且不依赖于场景复杂度。因此,小小的点光源和聚光源都是开销非常小的渲染,特别是不会穿过摄像机的近平面的点光源和聚光源,渲染开销就更小。另外,带阴影的光源比不带阴影的光源开销要更高。因为在延迟渲染中,阴影投射到的物体上需要为每个阴影投射光渲染一次或多次。

另外一个比较严重的缺点是使用多材质比较困难。要使用多材质不是不可能,需要在几何缓冲区存储更多的数据,这就需要更大的内存宽带。

       一个更致命的缺点是,由于光照和几何渲染的分离,导致抗锯齿变得不稳定,主要是因为这种分离会导致内插子样本会产生不稳定的位置、法线和切线属性。克服这种限制的常用方法是在最终的图像上使用边缘检测,然后在边缘上使用模糊处理。而且,如今有更高级的边缘平滑处理技术,如MLAA(Efficiently MovingAntialiasing from the GPU to the CPU,https://software.intel.com/sites/default/files/m/d/4/1/d/8/MLAA.pdf),时间反混叠法(Temporal anti-aliasing https://en.wikipedia.org/wiki/Temporal_anti-aliasing用在虚幻引擎中),尽管它不是一个完全的边缘平滑处理技术,但是能使得给定的边缘一个平滑的表面。

4、延迟光照(内容有争议)

       延迟光照是延迟渲染的修订。这个技术在延迟渲染的时候使用了3个通道,而不是2个。第一个通道覆盖了场景几何体,仅仅将计算每个像素照明所必需的属性写入几何缓冲区。在屏幕空间,“延迟”通道然后输出仅仅漫反射和高光反射光数据信息,因此,必须在场景上进行第二遍,以回读光照信息和最终输出的逐像素渲染。延迟光照最明显的优点是动态的减少了几何缓冲区的大小。最明显的成本就是需要渲染场景几何体两次而不是一次。另外一个额外的消耗是在延迟光照的延迟通道必须单独输出漫反射和镜面反射,然而延迟渲染的延迟通道仅仅需要输出一个两者组合的辐射值。

       由于几何缓冲区的大小的减少技术,部分克服了延迟着色的一个严重缺点—多个材质。

三、传统延迟光照渲染(Legacy Deferred LightingRendering Path)

       这是随着Unity5.0遗留下来的延迟光照特性,新的工程都应该考虑使用前面讲的延迟渲染。

四、顶点光照渲染(Vertex Lit Rendering Path Detail)

       顶点光照渲染通常渲染每一个物体都在一个通道上,计算在物体每个顶点上的所有光源的光。这是最快的渲染方式,并且有着最为广泛的硬件支持。(当然不能工作在控制台上)。因为,所有的光照计算都发生在顶点着色器上,因此这个渲染方式不能计算许多逐像素的效果,比如,阴影、法线映射以及光源Cookies,即将被淘汰:

五,总结:

Deferred Lighting 延时光照
延时光照是有着最高保真度的光照和阴影的渲染路径。如果你有很多实时灯光,最好是使用延时光照。它需要一定水平的硬件支持,仅在 Unity Pro可用,移动设备上不支持。
Forward Rendering 正向渲染
       正向渲染一个基于着色器的渲染路径。它支持逐像素计算光照(包括法线贴图和灯光Cookies)和来自一个平行光的实时阴影。在默认设置中,少数最亮的灯光在逐像素计算光照模式下渲染。其余的灯光计算对象顶点的光照。
      根据影响物体的光源的不同,正向渲染路径用单个或多个通道来渲染物体。在正向渲染中,光源本身也会根据他们的设置和强度受到不同的对待。
Vertex Lit 顶点光照
顶点光照(Vertex Lit) 是最低保真度的光照、不支持实时阴影的渲染路径。最好是用于旧机器或受限制的移动平台上。

Rendering Paths Comparison 渲染路径比较

 

 Deferred Lighting 延时光照Forward Rendering 正向渲染Vertex Lit 顶点光照
Features 功能   
Per-pixel lighting (normal maps, light cookies)
每像素计算光照(法线贴图、灯光cookies)
YesYes-
Realtime shadows 实时阴影Yes1 Directional Light(一盏平行光)-
Dual Lightmaps 双光照贴图Yes--
Depth&Normals Buffers 深度与法线缓冲区YesAdditional render passes 额外渲染通道-
Soft Particles 软粒子Yes--
Semitransparent objects 半透明的物体-YesYes
Anti-Aliasing 抗锯齿-YesYes
Light Culling Masks 灯光剔除蒙板LimitedYesYes
Lighting Fidelity 光照保真度All per-pixel 全部像素Some per-pixel 某些像素All per-vertex 所有顶点
Performance 性能   
Cost of a per-pixel Light 每像素光照的花费Number of pixels it illuminates
照亮的像素数
Number of pixels * Number of objects it illuminates
像素数*照亮的像素数
-
Platform Support 支持平台   
PC (Windows/Mac) 台式机Shader Model 3.0+Shader Model 2.0+Anything
Mobile (iOS/Android) 移动设-OpenGL ES 2.0OpenGL ES 2.0 & 1.1
Consoles  (游戏)平台360, PS3360, PS3-

 


http://blog.csdn.net/Fenglele_Fans/article/details/77842546

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值