【Unity Shader】3.Unity Shader基本知识学习(剔除 & 深度测试 )

本文介绍了Unity Shader中的剔除(Culling)和深度测试(Depth Testing)概念,以及相关语法和实战应用。剔除通过避免渲染背对观察者的几何体面提高性能,深度测试确保只有最近的表面参与绘制。文中通过代码示例和对比图解释了Cull Back/Front、Zwrite on/off和ZTest的用法,帮助初学者理解并优化Shader性能。
摘要由CSDN通过智能技术生成

1.剔除(Culling)的概念


  对于实时交互的3D环境而言,现实的速度和效率是非常重要的。虽然现在的硬件能力非常的快,但是要想保持30FPS的同时处理数十万的三角形,还是有些困难的。
 
 

为了解决这种问题,人们提出了很多方法,其中有LOD,有Culling。这两种方法并不矛盾,而且我们往往需要在culling(剔除)的基础上再使用LOD进一步解决pipeline的负担。

在此,博主也把LOD技术解释一下:LOD技术即Levels of Detail的简称,意为多细节层次。LOD技术指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。

Culling:剔除是一种通过避免渲染背对观察者的几何体面来提高性能的优化措施。所有几何体都包含正面和反面。剔除基于大多数对象都是封闭的事实;如果你有一个立方体,你不会看到背离你的那一面(总是只有一面在你的前方),因此我们不需要绘制出背面。因此也被称做背面剔除。

总之,所谓剔除,就是被挡住或视角以外的我们看不到的物体,因为它们无关紧要,所以我们就不去绘制,以节省资源,提高场景的运行效率。

2.深度测试(DepthTesting)概念


我们在复杂的场景中,通常有多个物体需要绘制,这些物体之间会存在遮挡关系,离观察点较远的物体会因为近处物体的者的遮挡而不可见或只有部分可见。深度测试可以简化复杂场景的绘制,确保只有场景内的对象的最靠近的表面参与绘制。

3.相关语法


Cull Back | Front | off

作用:控制多边形的哪一面应该被剔除
- Cull Back : 不绘制 背离观察者的面
- Cull Front : 不绘制 面对观察者的面
- Cull off :剔除关闭,绘制所有的面

Zwrite on | off

作用:控制是否将对象写入深度缓存(默认为 on)

  • 如果要绘制实心的物体,则使其处于开启状态(on)
  • 如果要绘制半透明的物体,则使其处于关闭状态(off)
ZTest Less|Greater|LEqual|GEqual|Equal|NotEqual|Always|Never

作用:用于控制深度测试如何执行

默认为 LEqual ,LEqual就是绘制现有对象前面的对象或与现有对象有一段距离的对象。隐藏现有对象后面的对象(把自己和别人做对比)

系统中存在一个颜色缓冲区和一个深度缓冲区,分别存储颜色值和深度值,来决定画面上应该显示什么颜色。

深度值是物体在世界空间中距离摄像机的远近。距离越近,深度值越小;距离越远,深度值越大。

- Greater  只渲染深度大于当前对象的像素
- GEqual   只渲染深度大于等于当前对象的像素
- Less     只渲染深度小于当前对象的像素
- LEqual   只渲染深度小于等于当前对象的像素
- Equal    只渲染深
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值