编写用于重新缩放浮点纹理的 HLSL 着色器
Writing a HLSL shader for rescaling floating point textures
当我的 Texture2D
使用 HalfSingle
/Single
格式时,XNA 抱怨采样必须设置为 PointClamp
,这使我的纹理看起来参差不齐。我实际上是用它来将深度数据传递给着色器,所以我试图获得比简单地使用 RGBA 灰度值更好的动态范围。
如果我用Color
或Bgra
,那我基本上只有255级。如果我将深度值编码为彩色像素,那么我可以启用抗锯齿功能,但它无法正常工作,因为采样器在 lerping 时会分别处理每个 byte/nibble。
问题:
有没有办法告诉 HLSL 使用抗锯齿过滤器对我的浮点纹理进行采样,或者我需要自己编写着色器?
原来有两种方法可以解决这个问题:
使用我自己的转换方法将 .NET 32 位浮点数打包成 RGBA,或者
用SurfaceFormat.Rg32
将两个16位的浮点数打包成RGBA(这种格式支持纹理过滤)
我选择了第一种方法。
当我的 Texture2D
使用 HalfSingle
/Single
格式时,XNA 抱怨采样必须设置为 PointClamp
,这使我的纹理看起来参差不齐。我实际上是用它来将深度数据传递给着色器,所以我试图获得比简单地使用 RGBA 灰度值更好的动态范围。
如果我用Color
或Bgra
,那我基本上只有255级。如果我将深度值编码为彩色像素,那么我可以启用抗锯齿功能,但它无法正常工作,因为采样器在 lerping 时会分别处理每个 byte/nibble。
问题:
有没有办法告诉 HLSL 使用抗锯齿过滤器对我的浮点纹理进行采样,或者我需要自己编写着色器?
原来有两种方法可以解决这个问题:
使用我自己的转换方法将 .NET 32 位浮点数打包成 RGBA,或者
用
SurfaceFormat.Rg32
将两个16位的浮点数打包成RGBA(这种格式支持纹理过滤)
我选择了第一种方法。