0

假设我正在定义一个顶点结构。我可以通过将顶点的 RGBA 颜色打包成一个无符号整数来保持顶点结构很小。因此:

struct Vertex
{
    float pos[3];
    float normal[3];
    float texcoord[2];
    unsigned int color;    // RGBA
};

然而,当顶点到达我的顶点着色器时,它将被转换为 4 浮点值:GLSL 中的 vec4 或 HLSL 中的 float4。大概这种类型转换在 GPU 上需要一些时间。

因此将顶点的颜色属性定义为 4 浮点数会更快,从而避免转换吗?

...
float color[4];
...

还是这种颜色的较大内存大小会降低 GPU 缓存的效率并导致渲染速度变慢?

4

1 回答 1

4

现代 GPU 具有专用硬件,用于在加载时解压缩打包格式,因此转换实际上是免费的。减少的内存带宽要求和更有效的顶点缓存使用将提高性能,因此通常您应该尽可能紧密地打包所有顶点属性,同时仍为您的目的保持足够的精度。

于 2012-04-10T17:44:47.310 回答