「MonoGameでハードウェアインスタンシングしてみる」の版間の差分

編集の要約なし
imported>Administrator
編集の要約なし
1行目: 1行目:
1つの[[ポリゴンメッシュ]]を[[GPU]]側で複製することでDrawコールを減らして描画を高速化する「[[ハードウェアインスタンシング]]」という技術がある。
1つの[[ポリゴンメッシュ]]を[[GPU]]側で複製することで[[Drawコール]]を減らして描画を高速化する「[[ハードウェアインスタンシング]]」という技術がある。


ただ[[MonoGame]]と[[OpenGL]]の環境では長らく「new NotImplementedException()」であった。
ただ[[MonoGame]]と[[OpenGL]]の組み合わせの環境では長らく「new NotImplementedException()」であった。


これがついにMonoGame 3.7で[[OpenGL]]環境でも[[ハードウェアインスタンシング]]が使えるようになったそうだ。さっそく[[MacOS]]上で試してみた。[[ハードウェアインスタンシング]]が使えるとなると[[ボリュームレンダリング]]の実装が捗る可能性がある。
これがついにMonoGame 3.7で[[OpenGL]]環境でも[[ハードウェアインスタンシング]]が使えるようになったそうだ。さっそく[[MacOS]]上で試してみた。[[ハードウェアインスタンシング]]が使えるとなると[[ボリュームレンダリング]]の実装が捗る可能性がある。


== HLSLを書く==
==HLSLを書く==
[[HLSL]]はこんな感じ。今回は移動だけで回転はしていない。 [[Mac]]上で[[HLSL]]を[[コンパイル]]する方法は「 [[MonoGameでプログラマブルシェーダーを使う]]」および「[[InfinitespaceStudios.Pipeline]]」の項目を参照。
[[HLSL]]はこんな感じ。今回は移動だけで回転はしていない。 [[Mac]]上で[[HLSL]]を[[コンパイル]]する方法は「 [[MonoGameでプログラマブルシェーダーを使う]]」および「[[InfinitespaceStudios.Pipeline]]」の項目を参照。


69行目: 69行目:
}
}
</syntaxhighlight>
</syntaxhighlight>
== C#で呼び出してみる==
==C#で呼び出してみる==
この[[コード]]は「[[MonoGameのカメラを作る]]」で作ったカメラを使っている。Cameraクラスは[[MonoGame]]標準物ではないので注意。
この[[コード]]は「[[MonoGameのカメラを作る]]」で作ったカメラを使っている。Cameraクラスは[[MonoGame]]標準物ではないので注意。


205行目: 205行目:
</syntaxhighlight>
</syntaxhighlight>


== Mac上で動かしてみる==
==Mac上で動かしてみる==
こんな感じ。[[Mac]]でも[[HLSL]]で書いた[[シェーダー]]が使えてる。なお、[[OpenGL]]系の環境では[[シェーダーモデル]]は3.0までだ。まあSM3.0もあれば元気があれば何でもできる。
こんな感じ。[[Mac]]でも[[HLSL]]で書いた[[シェーダー]]が使えてる。なお、[[OpenGL]]系の環境では[[シェーダーモデル]]は3.0までだ。まあSM3.0もあれば元気があれば何でもできる。


<movie>https://youtu.be/qU-toUOhvRI</movie>
<movie>https://youtu.be/qU-toUOhvRI</movie>


== 関連項目==
==関連項目==
 
*[[MonoGameでプログラマブルシェーダーを使う]]
*[[MonoGameでプログラマブルシェーダーを使う]]
*[[MonoGameでピクセルシェーダーを使ってテクスチャを貼る‎]]
*[[MonoGameでピクセルシェーダーを使ってテクスチャを貼る‎]]
*[[ハードウェアインスタンシング]]
*[[疑似インスタンシング]]
*[[メッシュベイカー]]
*[[ドローコール]]


[[category: MonoGame]]
[[category: MonoGame]]
[[category: HLSL]]
[[category: HLSL]]