AlphaTest与AlphaBlend对比

先说说使用场景吧。
假如场景中要做一颗有很多树叶的大树,那么可能会有两种做法。

  • 每个树叶做成真实模型,使用非透明贴图
    会导致面数极大的增加

  • 每个树叶做成一个片面,使用透明贴图
    这会极大的减少面数

然后使用透明贴图, 又可以分成两种做法

  • 使用AlphaBlend
    就是普通的透明物体渲染,也会存在透明物体渲染的问题(交叉物体的透明渲染问题)

参见这里 http://www.jianshu.com/p/e953e937e210

  • 使用AlphaTest
    将透明的像素剔除,只保留非透明的像素。不会出现交叉物体的透明渲染问题,但会造成性能问题(所有被其它物体遮挡,或者被自身遮挡的像素都会执行片元着色)

参见文尾 http://www.jianshu.com/p/fa94dd910a1b

那么到底使用哪种方案比较好呢,先总结一下:

方案 缺点
1. 非透明渲染 面数太多
2. AlphaBlend 深度问题
3. AlphaBlend 写深度 多一个Pass
4. AlphaTest 所有像素都会执行片元着色

那么,对于大树这个需求,哪个方案比较合适呢?继续分析。

  • 如果面数不会很多,那么方案1是最好的
  • 如果交叉物体的透明渲染问题可以接受,那么方案2是透明贴图方案中最好的
  • 方案3不太适用于树叶这个需求,因为树叶是一个面片,第一个Pas中写了深度会导致树叶透明部分会遮挡后面的树叶,而且多一个Pass。DrawCall翻倍。
  • 方案4虽然使用了透明贴图,但实质上与非透明物体渲染一致(队列不同)。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容