我想知道是否可以在一次传递中将场景渲染到多个渲染目标(或者比通过客户端代码多次绘制几次更快)。我想优化一些代码,这些代码被渲染成不同尺寸的多个纹理(例如512×512,256×256,128×128和64×64)。
我意识到我可以使用从原始目标派生的mip贴图,但我不想混合颜色。我怀疑mip贴图将从几个纹素中取平均值,但就我的目的而言,我只想要由显卡渲染的未经修饰的渲染。如果有任何mipmaps设置允许这样做,那么它也是一个可行的解决方案。
另外,有人知道是否在CPU或GPU上生成了mipmap?
感谢阅读。
答案 0 :(得分:1)
您的问题没有可能的解决方案。 MRT不能用于不同的分辨率。 Mipmaping不能产生看起来与原始纹理相同的较小纹理。实际上,绝对没有办法做那个AFAIK。使用新显卡,GPU上会生成mipmap。 一个问题:为什么要渲染到方形目标?
答案 1 :(得分:0)
正如Quang Anh所说 - 没有办法完全按照你的要求去做。那么你究竟想要实现什么目标呢?
如果您担心缩小mipmap时发生的混合,为什么不使用渲染目标,并使用point sampling将其渲染(在“全屏”四边形上)到另一个渲染目标? (并针对您想要的每种尺寸重复一遍。)
添加了以下评论:
如果您正在做的事情涉及深度(或类似于深度的数据),并且您需要知道每个像素的最大(或最小)深度,并且每次都将图像的分辨率减半:
您可以使用相同的缩放技术,通过点采样将一个渲染目标渲染到另一个渲染目标(如我上面的原始答案中所述)。并且在像素着色器中对四个像素进行采样,这四个像素将成为输出图像中的一个像素。只需从四个中选择最大(或最小)值像素作为输出的像素。
(我将留下所需的数学数据,以便将样本排成一个练习。)