【Unity】Unity插件 - InstantOC

1.渲染管线

  • 图形数据在GPU上经过运算处理,最后输出到屏幕的过程。这个过程由CPU(中央处理器)和GPU(图形处理器)参与完成。

1.1 CPU的工作:

  • 游戏:初步判断哪些物体需要被渲染
    (1)视锥(摄像机)范围内的
    (2)culling mask选中的layer
  • 图形API
什么是Draw Call?

Draw Call:每次引擎准备数据并通知GPU的过程。通俗来说,每帧调用显卡渲染物体的次数。游戏是一帧一帧去渲染的,每一帧要渲染前,都需要判断要渲染哪些物体。每一个物体当判断要渲染,就把数据交给GPU,就有一个Draw Call,有几个物体,就有几个Draw Call。一帧要渲染十个物体,这一帧就有十个Draw Call。Draw越大,表示要渲染的物体越多,渲染管线走的次数就越多,性能就会越差,所以要尽量减少Draw Call。

如何在Unity中查看Draw Call?

在Game面板中(右上角)有Stats按钮,在弹出窗口中的Draw Call(或Batches)可以查看。(在不考虑光照、多相机等复杂的情况下,通常一个物体一个Draw Call)

1.2 GPU的工作:

  • 顶点处理
    (1)接收模型顶点数据:图形由顶点组成的三角形组成,所以要接收这些顶点的坐标,CPU将图形数据(包含顶点坐标)发送给GPU。
    (2)坐标系转换:顶点坐标最终要进入到我们的屏幕坐标中,要进行坐标转换
  • 图元装配
    组装面:连接相邻的顶点,绘制为三角面
  • 光栅化
    计算三角面上的像素,并为后面着色阶段提供合理的插值参数
  • 像素处理
    对每个像素区域进行着色
    写入到缓存之中
  • 缓存
    一个存储像素数据的内存块,最重要的缓存是帧缓存和深度缓存。
    (1)帧缓存:存储每个像素的色彩,即渲染后的图像。帧缓存常常在显存中,显卡不断读取并输出到屏幕中。(你不能每次着色完一个面就显示出来,每次做完一部分,先放到缓存里,等到所有面全做完了,显卡再一次性显示出来)
    (2)深度缓存z-buffer:存储像素的深度信息,即物体到摄像机的距离(不同物体距离摄像机的先后顺序不同)。光栅化时便计算各像素的深度值,如果新的深度值比现有值更近,则像素颜色才会被写到帧缓存中,并替换深度缓存。(假设一帧画面中,一个车子停在房子的前面,并且车子的车头和车子后面的房子前后位置上重合了,车尾露在房子外面。那么对于重合的这一部分像素,车子和房子两个物体的深度值就是不一样的,渲染的时候判断车子在前面,显示到屏幕上这一部分像素就是车头的画面,而不显示房子。虽然实际物体上是车子和房子共存的,但对于一帧画面上的一个像素点来说,只需要一种着色来表现这个像素点的画面即可,房子就不进行着色了。)

2.Occlusion Culling

2.1即时遮挡剔除Instant Occlusion Culling

  • 遮挡剔除:当物体被送进渲染流水线之前,将摄像机视角内看不到的物体进行剔除,从而减少了每帧渲染数据量,提高渲染性能(优点)。
  • 缺点:判断物体是否被遮挡的过程,对CPU是有额外的消耗的。采用遮挡剔除,有可能CPU在判断是否剔除上增加了一些消耗,但最终渲染数量减少,总消耗还是降低了;当然也有可能,判断之后发现没剔除掉物体,渲染消耗量没有减少,反而又增加了判断的消耗,总消耗增加,这时就弊大于利了。发射射线数量太多也会增加消耗。所以并不是什么情况下都适宜使用遮挡剔除,通常场景中物体数量多且密集,遮挡量较大的时候适合使用。

2.2步骤

(1)将InstentOC中的IOCcam从Project中拖拽到Camera上
在这里插入图片描述
(2)对要参与遮挡剔除的游戏对象设置tag、layer,以及添加Box Collider(碰撞器)组件。因为InstantOC的原理是发出若干道射线,如果打到物体上,就说明这个物体没有被遮挡,但实际上射线是打在碰撞器上。
(补充:遮挡剔除这一概念指的是把视锥以内看不见的物体剔除掉。而InstantOC这个插件采用的原理是通过发射射线打向物体判断哪些物体是可见的。并不是所有遮挡剔除技术都采用这一原理。)
在这里插入图片描述

(3)在Camera的对应组件处配置属性(属性含义见下文)在这里插入图片描述
(4)配置完成后点击运行,可以发现演示用的立方体中被遮挡的部分被剔除了。
运行前:
在这里插入图片描述

运行后:
在这里插入图片描述
在配置完成后第一次运行时并没有出现上面运行后的剔除效果,后来我将摄像机的tag改为main camera之后再运行就生效了。
在这里插入图片描述

2.3属性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.LOD

3.1多细节层次

3.2步骤

3.3属性

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值