颜色分级,着色器和3d纹理

我试图用3d查找表来实现颜色校正。 查找表实际上只是一个256×16的2d纹理,由16个16×16的正方形组成。

渲染时,我将2个纹理传递给着色器:第一个是我在屏幕上渲染的,第二个是查找表。 着色器获取渲染图像的RGB分量,并使用它在查找表中查找replace。

有两个问题:首先,我不能使用滤镜来平滑颜色(每个维度16个是不够的),因为它也平滑了两个连续的16×16平方之间的线条,这是不合适的。 第二个问题是B分量没有插值。

使用体积纹理可以解决这两个问题,但不幸的是我时间紧迫,并没有太多有关在着色器中使用3D纹理的信息。 所以,这是我的问题。

  1. 是否有可能传递3D纹理到着色器(HLSL)?
  2. 如果有可能,filter可以应用到三维空间吗?
  3. 也许有更好的方法来实现我不知道的颜色分级?

是的,您可以在HLSL中使用体积纹理,并沿着所有三个轴进行硬件插值。

  • 在D3D9中,创建一个sampler3Dvariables,并使用tex3d函数在着色器中读取它。
  • 在D3D10-11中,创建一个Texture3Dvariables,并使用其Sample方法在着色器中读取它。

在任何一种情况下,您都必须从主应用程序创建纹理作为16x16x16 3D纹理,而不是作为展平的256×16 2D纹理。