使用Alpha混合成分合成纹理

时间:2018-08-31 06:50:29

标签: alphablending render-to-texture hud

Todo:

  • 在HUD上渲染模型,
    而不是渲染所有这些微小的多边形,
    我们希望优化这些多边形并将其渲染为纹理,然后将该纹理用作一个多边形叠加层

  • 如果整个渲染的纹理具有空白像素或不透明像素,此方法就可以正常工作,
    但是当我们的像素的alpha值在0到1之间时,就会出现问题。

  • 例如说我们在模型中只有一个红色(1,0,0)多边形,其alpha值为0.5。
    如果我们使用普通混合(SRC_ALPHA,1-SRC_ALPHA)将其渲染为纹理,则最终深红色(0.5,0,0)和alpha值为0.5
    当将其用作纹理时,它比应有的颜色要深得多,基本上是因为红色多边形已与基本的“黑色”纹理。
    无论显示什么背景,都是错误的。

我们需要的是纹理具有全红(1,0,0)颜色和0.5的alpha值,但是当我们彼此渲染多个alpha混合的多边形时,这将变得更加复杂。

有没有办法实现这一目标?
也许使用其他屏幕混合模式?
这需要在渲染到纹理的同时使用GPU来完成。

使用OpenGLES 2.0。

请提出建议。
谢谢

肖恩

1 个答案:

答案 0 :(得分:0)

我们的艺术家找到了这个答案。虽然可能并不完全相同,但是非常好。

Opengl Render To Texture With Partial Transparancy (Translucency) And Then Rendering That To The Screen

WE基本上使用了选项2,从黑色透明纹理开始,正常地将所有内容渲染到纹理上,但是当将该纹理渲染到hud时,修改像素着色器以简单地将颜色除以alpha。

之所以起作用,是因为假设已将25%alpha的颜色(1、0.5、0.2)添加到纹理,则纹理颜色将为(0.25、0.125、0.05)和0.25 alpha。再除以0.25 alpha即可得到我们需要的颜色(1、0.5、0.2)。

因此,仅在使用创建的纹理时,将此行添加到像素着色器的末端

outcol.rgb / = outcol.a

我们在叠加了多个透明胶片的情况下进行了测试,无法分辨出差异。颜色越不透明,原始的“零阿尔法黑色”就越少。除了实际使用创建的纹理的时间之外,不需要更改渲染管道。

肖恩

相关问题