OpenGl,Alpha 在同一个网格上混合

OpenGl, Alpha blending on the same mesh

我目前正在为游戏 Final Fantasy XIV 编写模型查看器。我 运行 遇到了一个我目前正在尝试解决的问题。

头发模型全部存储为单个网格。不同的层被放置在彼此之上以创造更逼真的效果。然后对细线应用 alpha。

现在我 运行 遇到的问题是当我应用 alpha 时,结果是这样的:

发生的事情不是 replacing/blending 下面层的片段,而是用清晰的颜色来做,可能是因为当时缓冲区中没有任何东西(记住它是一个单一的网格)。我将如何解决这个问题?渲染两次?

你可以做很多事情,但不知道具体要求我就列举几个:

  • OIT:独立于订单的透明性,它需要一些设置而且不容易做到,而且会产生一些成本http://en.wikipedia.org/wiki/Order-independent_transparency
  • 不要使用混合:我知道您可能想到了这一点,但是如果不使用混合而是使用 alpha 测试呢?别名有那么糟糕吗?它仍然是选项
  • 两者兼而有之,alpha 测试和混合。我会推荐这个,我会在下面快速解释

我的建议是基于 AMD 毛发渲染论文,网址为:

http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2012/10/Scheuermann_HairRendering.pdf

该论文首先解释了照明模型,然后解释了用于使用 alpha 混合渲染头发的技术。