「ハードウェアインスタンシング」の版間の差分
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) |
||
1行目: | 1行目: | ||
− | '''ハードウェアインスタンシング'''([[英語]]:hardware instancing)とは、[[GPU]]内で3Dモデルを複製する機能のことである。「ジオメトリインスタンシング」や「GPUインスタンジング」などとも呼ばれる。 | + | '''ハードウェアインスタンシング''' ([[英語]]:hardware instancing)とは、[[GPU]]内で3Dモデルを複製する機能のことである。「ジオメトリインスタンシング」や「GPUインスタンジング」などとも呼ばれる。 |
− | ==概要== | + | == 概要 == |
− | + | ハードウェアインスタンシングは1回の[[ドローコール]]で「位置」や「向き」などが異なる複数の「同一モデル」を描画することができるという機能である。 | |
一般的なドローコールでは「[[バーテックスバッファ]]」と「[[インデックスバッファ]]」を設定して[[GPU]]を呼び出す。 | 一般的なドローコールでは「[[バーテックスバッファ]]」と「[[インデックスバッファ]]」を設定して[[GPU]]を呼び出す。 | ||
− | ハードウェアインスタンジングではこれらに加えて「位置」や「向き」などの情報を格納した「ダイナミックバーテックスバッファ」を設定して[[GPU]] | + | ハードウェアインスタンジングではこれらに加えて「位置」や「向き」などの情報を格納した「ダイナミックバーテックスバッファ」を設定して[[GPU]]を呼び出す。すると[[GPU]]はダイナミックバーテックスバッファを参照して、その個数だけ[[バーテックスシェーダー]]を実行してくれるというものである。 |
− | + | ==主なプラットフォームの対応状況== | |
− | + | ハードウェアインスタンジングを利用するには[[ハードウェア]]([[GPU]])が対応している必要がある。未対応の環境では[[ドローコール]]した時点でエラーになる。 | |
− | == | ||
− | [[ハードウェア]]([[GPU]] | ||
===Windows=== | ===Windows=== | ||
21行目: | 19行目: | ||
===Android=== | ===Android=== | ||
− | [[Android]] | + | [[Android]]では[[OpenGL ES 3.0]]以降で対応している。[[OS]]的には「Android 4.3以降がOpenGL ES 3.0対応」となるが、これ以降のバージョンを搭載している製品でも[[ハードウェア]]的に未対応の製品が多い。 |
つまり[[スマホ]]などの[[OpenGL ES]]系のプラットフォームでは未対応だと思ったほうがいい。 | つまり[[スマホ]]などの[[OpenGL ES]]系のプラットフォームでは未対応だと思ったほうがいい。 | ||
36行目: | 34行目: | ||
==関連項目== | ==関連項目== | ||
− | *[[ドローコール]] | + | * [[ドローコール]] |
− | *[[メッシュベイカー]] | + | * [[メッシュベイカー]] |
− | *[[擬似インスタンシング]] | + | * [[擬似インスタンシング]] |
− | *[[MonoGameでハードウェアインスタンシングしてみる]] | + | * [[MonoGameでハードウェアインスタンシングしてみる]] |
[[category: 3DCG]] | [[category: 3DCG]] |
2021年1月26日 (火) 07:21時点における最新版
ハードウェアインスタンシング (英語: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[編集 | ソースを編集]
WebGL[編集 | ソースを編集]
WebGL 2.0以降で対応している。つまりほとんどのブラウザはWebGL 1.0なので「対応していない」と思って間違いない。
ほとんどのブラウザではWebGL 2.0を「実験的な機能」として搭載しており、チェックを入れれば使える状態にはなっているが、標準ではまだ無効化されている。利用者に「チェック入れろ」とは言いにくい。