差分

ナビゲーションに移動 検索に移動

メッシュベイカー

2,439 バイト追加, 2019年10月18日 (金) 08:59
'''メッシュベイカー'''(英語:mesh baker)とは、[[3DCG]]において[[ドローコール]]を減らすべく背景などに使用される複数のモデルを、事前に「1つのモデル」に結合してしまう手法である。

==概要==
100[[ポリゴン]]のモデルを100個表示したいとする。普通にやれば[[ドローコール]]は100回も発生する。そこで事前に「10000ポリゴンの1モデル」に結合してしまえば[[ドローコール]]が1回で済む。

主に[[ハードウェアインスタンジング]]が使えない環境や、[[ハードウェアインスタンジング]]は使えるが形状の異なるモデルが多数存在する場合に有効である。

基本的に「動かないもの」にしか使えない。主にマップ上の建築物などのように動かないモデル群に適用される。

==インデックスバッファのサイズに注意==
モデルを結合する際には[[ハードウェア]]的に「[[インデックスバッファ]]の最大サイズ」に注意すること。多くの環境ではインデックスバッファの最大サイズは「16ビット整数(最大値65535)」となっている。[[PC]]では32ビットが使えることもあるが、[[スマホ]]なんかも考慮する場合は16ビットで設計しておくのが無難である。

このような環境を考慮して65535インデックスの範囲内になるように結合して、最終的な取得は配列にするといい感じである。
<syntaxhighlight lang="csharp">
// 概略説明用の架空のソースコードである。
// 動かないよ。
class MashBaker {
List<Model> _list;

void Add(Model model) {
var current = _list.LastOrDefault();
if (current == null) {
current = new Model();
_list.Add(current);
}

// インデックスバッファのサイズ制限に注意
var ibcount = current.IndexBuffer.Count + model.IndexBuffer.Count;
if (65535 < ibcount) {
current = new Model();
_list.Add(current);
}

// モデルを結合する
current.Merge(model);
}

Model[] ToModels() {
return list.ToArray();
}
}
</syntaxhighlight><br />

==関連項目==

*[[ドローコール]]
*[[ハードウェアインスタンジング]]
*[[遅延レンダリング]]
匿名利用者

案内メニュー