0

頂点構造を定義しているとしましょう。頂点の RGBA カラーを単一の unsigned int にパックすることで、頂点構造を小さく保つことができます。したがって:

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

しかし、頂点が頂点シェーダーに到達すると、GLSL の vec4 または HLSL の float4 の 4 つの float 値に変換されます。おそらく、この型変換には GPU で時間がかかります。

したがって、頂点の色属性を 4-float として定義して、変換を回避する方が高速でしょうか?

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

それとも、この色のメモリ サイズが大きいと、GPU キャッシュの効率が低下し、レンダリングが遅くなりますか?

4

1 に答える 1

4

最新の GPU には、ロード時にパック形式をアンパックするための専用ハードウェアがあるため、変換は事実上無料です。メモリ帯域幅要件の削減と頂点キャッシュの使用効率の向上により、パフォーマンスが向上するため、原則として、目的に十分な精度を維持しながら、すべての頂点属性をできるだけ密にパックする必要があります。

于 2012-04-10T17:44:47.310 に答える