半透明渲染

 

半透明物体的特性是什么?

        半透明物体需要显示被它遮挡的的物体。

ok……场景中物体大致就分为半透物体和不透明物体,我们会分别讨论不透明物体与不透明物体,半透明与不透明物体,半透明物体与半透物体之间的渲染关系。

先来几个概念开胃

        在shader中,我们可以设置渲染类型,设置渲染队列值,渲染队列值表示该物体的绘制顺序。

        引擎在渲染时有一个规则,所有半透明物体会在所有不透明物体绘制完成之后绘制。所以引擎会自动给场景物体排序,保证这条原则正确执行。

明确这个之后,需要再回顾渲染管线逐片元处理阶段流程:  模板测试--》alpha测试--》深度测试--》合并图元 

 

渲染队列(RenderQueue):控制绘制顺序,

深度测试 ( ZTest):处理遮挡关系,

深度写入 ( Zwrite):控制通过深度测试的像素写入深度缓冲,

混合(blend):控制通过测试的图元和缓冲中的图元是否进行混合。

 

深度测试保证了被不透明物体遮挡的物体不会被渲染,不透明物体通常会关闭深度写入(zwrite_off),开启混合(blend on)操作。

 

为什么要关闭深度写入?

假设两面玻璃,正常情况下 我们可以透过前面的玻璃看到后面的玻璃,但是开启深度写入的话,在绘制两面玻璃的时候会将图元写入深度缓冲,那么在绘制第二面玻璃的时候,通过深度测试的图元会直接覆盖第一面镜子的渲染结果,这时候渲染的结果就是我们不能通过前面的玻璃看到后面的玻璃,因此渲染半透明物体时,需要关闭深度写入。

 

为什么要开启混合呢?

  就像前边说的,我们不能直接用第二面玻璃的渲染值覆盖第一面玻璃的渲染值,因此开启混合操作后,通过深度测试的图元会与颜色缓存中的值进行混合,这时候我们渲染的结果就是通过前边的玻璃 我们可以看到后边的玻璃。

 

总结一下:

渲染队     列解决了不透明物体和透明物体之间的渲染关系

深度测试    保证了被不透明物体遮挡的透明物体不被渲染

关闭深度写入    保证了不透明物体之间不会因为深度测试而剔除

混合操作   保证了不透明物体之间的正常渲染,我们可以透过玻璃看到另外一玻璃。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值