今までは主に立方体をインスタンシングを利用して描画してきました。(2日目の日記)
今週はドアを作成予定で、立方体以外の形も描画する必要があります。
インスタンシングは個別に位置情報(x, y, z)とテクスチャ情報(kind)を与えることで同じ形をメモリ利用量を削減しつつ描画していましたが、今後は位置情報とテクスチャ情報に加えて、高さ、幅、奥行き情報も与えることで、より柔軟な描画を可能にしたいと思います。なお、テクスチャ情報はx, y座標で位置を指定可能な形式とします。
新しい仕組みでのメモリ利用量は、ベース336バイトに加えて、1つのインスタンス毎にx, y, z, tex_x, tex_y, width, height, depthのfloat値が必要なので、8 * 4 = インスタンス毎に32バイト必要になります。GL_TRIANGLE_STRIPで単純に描画した場合とメモリ利用量を比べた表にすると次のようになります。
単位:バイト立方体の数 | GL_TRIANGLE_STRIP | インスタンシング |
---|---|---|
1個 | 336 | 368 (91.30%) |
10個 | 3,432 | 656 (51.22%) |
100個 | 34,392 | 3,536 (9.50%) |