模型与透明度

时间:2013-09-09 20:55:25

标签: opengl transparency

我有一个带透明四边形的模特留胡子。我不知道哪些三角形属于胡须,因为它们的颜色来自传递给片段着色器的纹理。我试图在导出模型期间将三角形预先排到前面,但这没有用。所以我实现了MSAA和Alpha覆盖率,但这也没有帮助。我最后的尝试是绘制模型,关闭深度遮罩并跳过任何透明数据,因此颜色缓冲区将具有非清晰的颜色值以进行混合。然后,我将第二次绘制模型,深度测试并绘制alpha片段。

到目前为止,我没有尝试过任何工作。还有哪些其他技巧可以让模型的胡须正确绘制?我正在寻找一种方法来处理这个不使用一堆扩展的方法。我更喜欢可以使用普通的旧OpenGL 4处理的技术。

这是我正在处理的图像。 enter image description here

这是我应用所选答案后得到的结果。 enter image description here

2 个答案:

答案 0 :(得分:3)

您正在尝试做的事情还有一个尚未解决的问题:订单独立透明度。 MSAA与alpha报道完全不同。

到目前为止,最好的解决方案是将模型分为不透明和毛发部分。首先绘制场景的不透明部分,然后绘制所有(半)半透明的,在第二遍中排列到远处。

你的图像看起来像胡须被呈现为第一个的东西,这与你真正想要的完全相反。

答案 1 :(得分:1)

简单方法:

  1. 启用深度写入(深度遮罩),禁用Alpha混合,绘制没有胡须的模型。
  2. 禁用深度写入,启用Alpha混合,绘制胡须。确保已启用面部剔除。
  3. 很难:

    因为使用z-buffer的渲染器中与顺序无关的透明度是一个未解决的问题(如datenwolf所述),您可以尝试depth-peeling。我相信这篇论文可以在OpenGL SDK中找到。它很可能比“简单方式”慢,并且最大重叠透明多边形的数量会有限制。另请查看order-independent transparency上的维基百科文章。