admin管理员组

文章数量:1026989

透明物体排序

一。透明物体在渲染中一直是一个头疼的存在,除了会增加overdraw引起性能问题外,还经常导致各种渲染错误。所以很多效果都是不支持透明的。但有的时候,美术经常要这种效果。在这里总结下几种常用的解决透明物体渲染错误的办法。


1.基本方法:透明物体都是按照深度进行排序的,所以如果如果是2个物体始终能确定排序顺序,直接调整深度值或者调整renderqueue就可以了。

2.当一个透明物体出现前后面的情况,类似半透的裙子


这种效果 因为裙子是一个整体,他没办法与腿通过简单额深度排序就能解决。只能通过多Pass来解决。

第一遍Pass 只渲染裙子的非透明部分(a>0.8或者其他数值)

第二遍Pass 对于透明部分开启Cull Font 剔除掉前面的部分

第三遍Pass 对于透明部分开启Cull Back 剔除后面的部分。


当然如果是更简单的情况,例如


机甲这种 只是对后面的物体透明,并不需要自身透明,那可以简单的2个Pass搞定

第一个Pass 只渲染深度。

第二个Pass 正常渲染即可。


3 当一个模型出现大量穿插情况 类似发丝 (发梢是通过透明实现的,而非模型)


通过上述几种办法都得不到太好的效果。

解决办法有

1.alpha to coverage

   基于MSAA  其实相当于把他当成非透明物体来渲染。只是最后输出的颜色会乘以alpha值。unity内置 只需shader开启 AlphaToMask On 消耗点主要在MSAA。不过移动端开启MSAA还是比较耗的。

2.depth peeling 和 widget bledn不过这两项技术更篇OIT 需要很多RT 效果也不是很好。就不详细介绍了 感兴趣的可以参考

3.离线排序 就是对模型的三角面进行排序(或者对发丝进行排序)但是我试了几次 并没有试出好效果  最终幻想13是第一种方案

透明物体排序

一。透明物体在渲染中一直是一个头疼的存在,除了会增加overdraw引起性能问题外,还经常导致各种渲染错误。所以很多效果都是不支持透明的。但有的时候,美术经常要这种效果。在这里总结下几种常用的解决透明物体渲染错误的办法。


1.基本方法:透明物体都是按照深度进行排序的,所以如果如果是2个物体始终能确定排序顺序,直接调整深度值或者调整renderqueue就可以了。

2.当一个透明物体出现前后面的情况,类似半透的裙子


这种效果 因为裙子是一个整体,他没办法与腿通过简单额深度排序就能解决。只能通过多Pass来解决。

第一遍Pass 只渲染裙子的非透明部分(a>0.8或者其他数值)

第二遍Pass 对于透明部分开启Cull Font 剔除掉前面的部分

第三遍Pass 对于透明部分开启Cull Back 剔除后面的部分。


当然如果是更简单的情况,例如


机甲这种 只是对后面的物体透明,并不需要自身透明,那可以简单的2个Pass搞定

第一个Pass 只渲染深度。

第二个Pass 正常渲染即可。


3 当一个模型出现大量穿插情况 类似发丝 (发梢是通过透明实现的,而非模型)


通过上述几种办法都得不到太好的效果。

解决办法有

1.alpha to coverage

   基于MSAA  其实相当于把他当成非透明物体来渲染。只是最后输出的颜色会乘以alpha值。unity内置 只需shader开启 AlphaToMask On 消耗点主要在MSAA。不过移动端开启MSAA还是比较耗的。

2.depth peeling 和 widget bledn不过这两项技术更篇OIT 需要很多RT 效果也不是很好。就不详细介绍了 感兴趣的可以参考

3.离线排序 就是对模型的三角面进行排序(或者对发丝进行排序)但是我试了几次 并没有试出好效果  最终幻想13是第一种方案

本文标签: 透明物体排序