opengl 栅格化渲染管道如何选择正确的MIP贴图级别

vlurs2pr  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(140)

我已经学到的理论知识如下:
当选择mipmap级别时,首先计算碎片在纹理上的覆盖区。基于此,mipmap级别可以使用log2计算。对于光线跟踪渲染器,我知道一个简单的实现是投射光线通过每个像素角并与纹理平面相交。然后,覆盖区可以计算为uv坐标乘以纹理尺寸的差。
现在在光栅化渲染器中,这似乎不太可能是它的实现方式,因为当从纹理中采样时,我们只提供了uv坐标,这显然是不够的。我相信管道可能使用了其他隐含存储的数据,但我不知道这些数据可能是什么,我也不知道它是如何使用这些数据来计算mipmap级别的。

现在进入真正的问题:

像OpenGL这样的光栅化管道存储哪些数据,以及如何使用这些数据直接计算封装外形或mipmap级别。

4jb9z9bj

4jb9z9bj1#

“光栅化渲染器”做的和你建议的光线追踪完全一样,只是它比你的建议更快更健壮,因为它已经计算过了。
GPU通过并行执行大量计算来提高性能。因此,你永远不会栅格化单个碎片。你可以同时栅格化来自一个三角形的多个碎片。因此,对于任何碎片,你都已经在计算其相邻碎片的纹理坐标。
这只是一个简单的问题,只需查看相邻片段着色器的数据并进行一些计算。
请注意,这什至适用于三角形的边缘。即使一个三角形只覆盖了一个像素/样本,GPU也会为其计算至少4个碎片。这3个其他的被称为“辅助调用”,它们不会将结果写入帧缓冲区(什至图像加载/存储/SSBO)。因此GPU可以通过三角形的边界进行插值来计算相邻的纹理坐标。

相关问题