实现PostProcessing管理器

时间:2010-08-09 10:22:32

标签: xna post-processing

我一直在考虑如何在我的引擎中实现PostProcessing管理器(Vanquish)。

我正在努力探讨后处理技术的工作原理。我已经阅读并查看了creators.xna.com网站上的后期处理示例,但这似乎重新渲染了应用后处理效果的模型。

我可以为静态模型添加此功能,但是当重新绘制蒙皮模型时,我会感到困惑,因为他们已经有自己的技术来实现它们的效果。

有人可以帮助我指出正确的方向来理顺我的想法吗?

1 个答案:

答案 0 :(得分:1)

通常,后期处理适用于整个屏幕。这很简单,真的。

你要做的是在设备上设置渲染目标(我假设你可以弄清楚如何从样本中创建渲染目标):

GraphicsDevice.SetRenderTarget(renderTarget);

从此时起,您渲染的所有内容都将呈现给该渲染目标。完成后,您可以将设备重新设置为绘制到后台缓冲区:

GraphicsDevice.SetRenderTarget(null);

最后你可以使用渲染目标进行绘制,就像它是一个纹理(this is new in XNA 4.0一样,在XNA 3.1中你必须在其上调用GetTexture)。

所以要做出后处理效果:

  • 将场景渲染为渲染目标
  • 切换回后台缓冲区
  • 使用将应用后期处理效果的像素着色器全屏渲染渲染目标(使用SpriteBatch即可)。

你觉得你想为每个型号做这个吗?这似乎有点奇怪,但有可能。只需确保渲染目标具有透明的Alpha通道,然后使用Alpha混合绘制它。

或者你不是指后处理吗?您是否真的希望更改模型绘制的像素着色器,同时保持蒙皮模型顶点着色器?