1。 减少代数运算.. 如果可以自己展开的先展开利于编译器优化
例如:
普通的球面帖图投射常常表示为
p = sqrt(Rx2 + Ry2 + (Rz + 1)2)
这可以展开为:
p = sqrt(Rx2 + Ry2 + Rz2 + 2Rz + 1)
2.不要把矢量值放入含有多个内插值的标量部件中
tangent = float4(tangentVec, viewVec.x)
binormal = float4(binormalVec, viewVec.y)
normal = float4(normalVec, viewVec.z)
或许可以修改为 targent2 = viewVec;
3。不要编写过于通用的库函数 很好理解 比如C标准的Alloc 就比windows的 heapalloc慢很多
4。 合并常量 比如一个uniform的颜色g_OverbrightColor * 2.0 需要在ps里面乘以2, 在cpu端坐乘法会快很多
因为ps端需要做百万级的乘法
来源: NVIDIA的电子书