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