如果要将大量浮点数据传递给片段着色器,使用统一数组或纹理更好吗?似乎统一数组是正确的方法,但数组大小似乎有限(特别是在WebGL,我正在工作的地方)如果我想发送有关数千个对象的信息(为了光线追踪的目的)是有没有使用纹理传递数据的现实替代?这是件坏事还是好事?
答案 0 :(得分:2)
纹理是获取大量浮点数据的方法。
如果可能的话,将数据打包成4分量向量,并从片段着色器中删除尽可能多的分支指令。我们的想法是在GPU上执行尽可能少的逻辑,并将着色器简化为需要对大量数据执行的一些操作。
大规模并行硬件编程与CPU编码完全不同,许多关于性能的标准直觉在并行环境中完全相反。一个好的起点是:
http://developer.download.nvidia.com/GPU_Programming_Guide/GPU_Programming_Guide.pdf