2D像素着色器从颜色中删除Alpha通道

时间:2012-05-10 19:52:02

标签: c# xna shader alpha hlsl

所以,我正在尝试在XNA中制作游戏,并且我正在将像素着色器应用到我的关卡,这样我就可以在游戏画面中添加效果了。着色器本身运行良好,但它有一个真正推动性能的缺陷。只要着色器处于活动状态,我绘制到屏幕上的任何内容都会像最大化它的alpha通道一样绘制。我正在使用XNA内置的Color类绘制很多东西,其中大部分都有不同的alpha。但是,着色器似乎忽略了所有这些。即使我只是从着色器返回源代码,也会发生这种情况。

我见过几种可能的解决方案。第一个是绘制到RenderTarget2D,虽然这确实解决了这个问题,但它引起了更严重的alpha问题,我甚至不想进入。

我见过一些人声称在着色器中将颜色乘以alpha值似乎有所帮助,但这绝对没有任何区别,这表明alpha值输入始终被读为1。

以下是一些图片来说明我的问题:

This is the result with the shader active This is what it's supposed to look like

希望有人知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

在Draw()方法中,您需要调用: 在调用任何调用着色器的方法(例如GraphicsDevice.BlendState = BlendState.NonPremultiplied;等)之前DrawUserIndexedPrimitives

否则,框架假定alpha值已被预乘,并且它只能将RGB值直接blit到帧缓冲区。