我正在编写一个像素着色器,该着色器具有以下属性:对于给定的四边形,返回的值仅随u轴值而变化。即对于固定的u,则当v变化时,颜色输出是恒定的。
计算像素颜色的计算相对昂贵 - 即每个像素/循环等多个样本。
有没有办法利用v-invariance属性?如果我在CPU上执行此操作,那么您显然只会在计算后缓存这些值,但由于并行性,这些值不适用。我可以将纹理生成移动到CPU端并让着色器访问Texture1D,但我不确定它会有多快。
在GPU卡上是否存在适合这种情况的范例?
欢呼声
答案 0 :(得分:1)
将数据存储在一维纹理中并在像素着色器中对其进行采样看起来是一个很好的解决方案。您的GPU将能够使用纹理缓存功能,允许它利用您的许多像素使用1D纹理中相同值的事实。这应该非常快,纹理提取和缓存是你的gpu在渲染时如此高效的主要原因之一。
在计算像素着色器中的值或使用查找表纹理之间进行权衡是一种常见的做法。你正在通过它的声音进行复杂的计算,因此使用查找纹理肯定会提高性能。
请注意,您仍然可以通过GPU生成此纹理,无需将其移动到CPU。只需使用现有着色器代码作为预通道渲染到此1D纹理。