0

我想知道是否可以一次将一个场景渲染到多个渲染目标(或者比通过客户端代码多次绘制它更快)。我想优化一些代码,这些代码被渲染为几个不同尺寸的纹理(例如,512 x 512、256 x 256、128 x 128 和 64 x 64)。

我意识到我可以使用从原始目标派生的 mip 贴图,但我不想混合颜色。我怀疑 mip 映射将从几个纹素中取平均值,但出于我的目的,我只想要未经修饰的渲染,就像显卡渲染的那样。如果 mipmap 有任何设置允许这样做,那么它作为一个可行的解决方案也是相当可观的。

顺便说一句,有人知道mipmaps是在CPU还是GPU上生成的?

谢谢阅读。

4

2 回答 2

1

您的问题没有可能的解决方案。MRT 不能使用不同的分辨率。Mipmaping 无法生成看起来与原始纹理完全相同的较小纹理。实际上,绝对没有办法做到这一点。使用新显卡时,mipmap 会在 GPU 上生成。一个问题:为什么要渲染到方形目标?

于 2010-08-02T09:33:13.873 回答
0

正如广英所说——没有办法完全按照你的要求去做。那么你真正想要达到什么目的呢?

如果您担心缩小 mipmap 时发生的混合,为什么不使用您的渲染目标,并使用点采样将其(在“全屏”四边形上)渲染到另一个渲染目标?(并为您想要的每种尺寸重复此操作。)


添加了以下评论:

如果您正在做的事情涉及深度(或类似于深度的数据),并且您需要知道每个像素的最大(或最小)深度,并且每次都将图像的分辨率减半:

您可以通过使用点采样将一个渲染目标渲染到另一个渲染目标来使用相同的缩放技术(如上面我的原始答案中所述)。并且在像素着色器中对将成为输出图像中的一个像素的四个像素进行采样。只需从四个像素中选择最大(或最小)值的像素作为输出像素。

(我将把排列样本所需的数学作为练习。)

于 2010-08-02T10:42:47.533 回答