「ドローコール」の版間の差分
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) |
||
| (同じ利用者による、間の10版が非表示) | |||
| 1行目: | 1行目: | ||
'''ドローコール'''(英語:draw call)とは、[[CPU]]から[[GPU]] | '''ドローコール'''(英語:draw call)とは、[[CPU]]から[[GPU]]に「描画依頼」を行うことをいう。最近は[[GPGPU]]などの登場で「描画を伴わないドローコール」も増えており、どちらかというと「実行依頼」といった方がいい感じになりつつある。 | ||
== 概要 == | == 概要 == | ||
ドローコールはとても重たい処理である。[[シェーダー]]で実行したい[[プログラム]]を設定して、シェーダーに渡すモデルや[[テクスチャマップ]] | ドローコールはとても重たい処理である。[[シェーダー]]で実行したい[[プログラム]]を設定して、シェーダーに渡すモデルや[[テクスチャマップ]]や変数などを設定して、ドローコールをする。下手をすると[[GPU]]で実行する「主たる処理」そのものよりも「呼び出し」の方が重いこともあるくらい重たい。 | ||
== ドローコールを減らす手法 == | |||
1フレームの描画に必要な「ドローコールの数」は、[[フォワードレンダリング]]ではシーン中にある「モデル」と「ライト」の数の掛け算となる。つまりシーン内のオブジェクト数が増えるに従ってどんどん重くなる。 | |||
ドローコールはとても重たい処理である。その数を減らすことができればパフォーマンスが劇的に向上させることができる。涙ぐましい手法が色々と考案されている。 | |||
=== インスタンシング === | === インスタンシング === | ||
| 19行目: | 17行目: | ||
=== メッシュベイカー === | === メッシュベイカー === | ||
[[メッシュベイカー]] | [[メッシュベイカー]]は背景などに使用される複数のモデルを、事前に「1つのモデル」に結合してしまう手法である。建築物のように動かないモデルだと比較的簡単に実装できる。 | ||
モデルを一通り読み込んだ後に結合すると利便性がよい。 | モデルを一通り読み込んだ後に結合すると利便性がよい。 | ||
| 37行目: | 35行目: | ||
== その他 == | == その他 == | ||
少しでも高速化すべくドローコールを[[キュー]]に積んで実際のドローコールは別[[スレッド]]で行うという「[[GPU]] | 少しでも高速化すべくドローコールを[[キュー]]に積んで実際のドローコールは別[[スレッド]]で行うという「[[GPU]]を休ませない」という手法もある。これが当たり前となっている[[フレームワーク]]もあり、それを知らずに「ドローコールしたのに結果が返ってこない」とハマるケースもあるので注意しよう。 | ||
== 仮想メモリ == | |||
最近ではVRAMが枯渇した際にメインメモリを仮想メモリ的に利用できるようなデバイスドライバも登場しているが、この際には「VRAMが枯渇してないか」「VRAMの一部をメインメモリに退避しろ」などと状態変化ごとに複数のドローコールが飛び交うことになる。このためVRAMとメインメモリの物理的な速度差以上に大きな速度低下を引き起こすことになる。 | |||
なお、Intel ARCではVRAM全体を「メインメモリの一部」として扱う手法を採用している。 | |||
これにより仮想メモリなどという軟弱な概念がないというか最初から最後まで仮想メモリという方式だ。 | |||