三角形ストリップは有効か?

後輩が、三角形ストリップを使うと遅いって本当ですか?とか聞いてきた。

頂点キャッシュを使えば三角形リスト形式でも十分で、ストリップのほうがむしろ遅くなるとかネットで見たとか言うようなことをいってたわけで。

調べてみると、ひげねこさんの所にストリップはもう必要ないんでは?みたいな記事がありまして。

つまりこういうこと。

ロングストリップは頂点キャッシュの効きやすさという点では不利。それなら、キャッシュ効率を考慮したリストの方が速い。

しかもストリップ作成にはけっこう時間がかかる。その辺を考えてもリストでいいんじゃね?ってこと。

ショートストリップにすれば頂点キャッシュは効きやすくなるけど、ショートストリップならストリップ化するメリットは薄いんじゃね?

まあ、一理ある。というわけで、試してみました。

http://monsho.hp.infoseek.co.jp/files/TestTriStrip.zip

300ポリゴンを1万回描画してその速度をチェック。

どの頂点もインデックス付きで、三角形リスト、三角形ストリップ、ところどころに縮退三角形を仕込んだ三角形ストリップの3種類です。

結果としては、やはりストリップのほうが速いです。縮退三角形を仕込んだほうでもリストより速いですね。

ただ、検証としては少々問題もあって、データが意味のあるモデルではなく、ただの帯であること。

帯はストリップにもってこいの形状で、明らかにリストの方が不利です。

本当は適当でもゲームで使われそうなデータを使用するべきなんでしょうけど(その分縮退三角形は多めに入れておきましたが)。

速度面ではキャッシュを考慮したストリップ化をするのが一番なんじゃないかとは思います。

これについてはMSのHoppe先生のSIGGRAPHの資料が役に立つでしょう。

まだきちんと読んでませんが、これを実装するのが一番高速化できるような気がします。

ただ、以前うちのサイトでやったようなロングストリップを作成する手段の場合、キャッシュ効率は悪くなるかと思います。

この場合、キャッシュ効率を意識したリストの方がいいかもしれません。

ひげねこさんでも書かれていましたが、ストリップ化プログラムはけっこう時間がかかります。

今後、数100万ポリゴンとかを扱うことがあるようならストリップ化はデータコンパイルにおいて致命的になりかねません。

ただ、キャッシュを考慮したポリゴンのソートを行う必要があります。これっていい方法あるんでしょうかね?知ってる人がいたら教えてプリーズ。

まあ、一番いいのは自前の描画エンジンで試してみることでしょうね。

あと、頂点キャッシュがないPSPの場合はインデックス付き頂点は逆に不利にしかなりません。

私が試した時は、インデックス付き三角形ストリップはインデックスなし三角形ストリップの5?7割の速度しか出ませんでした。

まあ、暇があったらXSIのデータを自前の形式にコンバートできるようにして試してみようかとも思っています。