差分
ナビゲーションに移動
検索に移動
'''ハードウェアインスタンシング'''([[英語]]:hardware instancing)とは、[[GPU]]内で3Dモデルを複製する機能のことである。「ジオメトリインスタンシング」や「GPUインスタンジング」などとも呼ばれる。
==概要==
1回の[[ドローコール]]で、位置などが異なる複数の「同一モデル」を描画することができる。
一般的なドローコールでは「[[バーテックスバッファ]]」と「[[インデックスバッファ]]」を設定して[[GPU]]を呼び出す。
ハードウェアインスタンジングではこれらに加えて「位置」や「向き」などの情報を格納した「ダイナミックバーテックスバッファ」を設定して[[GPU]]を呼び出す。
すると[[GPU]]はダイナミックバーテックスバッファを参照して、その個数だけ[[バーテックスシェーダー]]を実行してくれるというものである。
==対応==
[[ハードウェア]]([[GPU]])が対応している必要があり、未対応の環境では[[ドローコール]]した時点でエラーになる。
===Windows===
[[Windows]]ではDirectX 9世代の製品から徐々に対応している。絶対ではない。未対応製品の方が多い。
DX10世代でかなり対応している。やはり絶対ではない。[[Radeon]]系はほぼ対応している。
DX11世代からは必須要件となったので100%対応している。
===Android===
[[Android]]ではOpenGL ES 3.0以降で対応している。[[OS]]的には「Android 4.3以降がOpenGL ES 3.0対応」となるが、これ以降のバージョンを搭載している製品でも[[ハードウェア]]的に未対応の製品が多い。
つまり[[スマホ]]などの[[OpenGL ES]]系のプラットフォームでは未対応だと思ったほうがいい。
スマホでも最新機種は対応しているが機種や[[Android]]のバージョンで処理を切り替えるくらいなら未対応前提で実装したほうが清い。
===macOSとiOS===
[[macOS]]と[[iOS]]は[[Metal]]世代であれば対応している。
===WebGL===
[[WebGL 2.0]]以降で対応している。つまりほとんどの[[ブラウザ]]は[[WebGL 1.0]]なので「対応していない」と思って間違いない。
ほとんどのブラウザではWebGL 2.0を「実験的な機能」として搭載しており、チェックを入れれば使える状態にはなっているが、標準ではまだ無効化されている。利用者に「チェック入れろ」とは言いにくい。
==関連項目==
*[[ドローコール]]
*[[メッシュベイカー]]
*[[擬似インスタンシング]]
*[[MonoGameでハードウェアインスタンシングしてみる]]
<br />
==概要==
1回の[[ドローコール]]で、位置などが異なる複数の「同一モデル」を描画することができる。
一般的なドローコールでは「[[バーテックスバッファ]]」と「[[インデックスバッファ]]」を設定して[[GPU]]を呼び出す。
ハードウェアインスタンジングではこれらに加えて「位置」や「向き」などの情報を格納した「ダイナミックバーテックスバッファ」を設定して[[GPU]]を呼び出す。
すると[[GPU]]はダイナミックバーテックスバッファを参照して、その個数だけ[[バーテックスシェーダー]]を実行してくれるというものである。
==対応==
[[ハードウェア]]([[GPU]])が対応している必要があり、未対応の環境では[[ドローコール]]した時点でエラーになる。
===Windows===
[[Windows]]ではDirectX 9世代の製品から徐々に対応している。絶対ではない。未対応製品の方が多い。
DX10世代でかなり対応している。やはり絶対ではない。[[Radeon]]系はほぼ対応している。
DX11世代からは必須要件となったので100%対応している。
===Android===
[[Android]]ではOpenGL ES 3.0以降で対応している。[[OS]]的には「Android 4.3以降がOpenGL ES 3.0対応」となるが、これ以降のバージョンを搭載している製品でも[[ハードウェア]]的に未対応の製品が多い。
つまり[[スマホ]]などの[[OpenGL ES]]系のプラットフォームでは未対応だと思ったほうがいい。
スマホでも最新機種は対応しているが機種や[[Android]]のバージョンで処理を切り替えるくらいなら未対応前提で実装したほうが清い。
===macOSとiOS===
[[macOS]]と[[iOS]]は[[Metal]]世代であれば対応している。
===WebGL===
[[WebGL 2.0]]以降で対応している。つまりほとんどの[[ブラウザ]]は[[WebGL 1.0]]なので「対応していない」と思って間違いない。
ほとんどのブラウザではWebGL 2.0を「実験的な機能」として搭載しており、チェックを入れれば使える状態にはなっているが、標準ではまだ無効化されている。利用者に「チェック入れろ」とは言いにくい。
==関連項目==
*[[ドローコール]]
*[[メッシュベイカー]]
*[[擬似インスタンシング]]
*[[MonoGameでハードウェアインスタンシングしてみる]]
<br />