はかせのラボ

私の頭の中を書いていく雑記ブログです

プログラミング ジオメトリインスタンシング①

あいさつ

どうも、はかせです。
今回からまったりと技術系の記事を再開していきたいと思います。
とはいえ就活真っ盛りの中完全新規で開発を起こすのは
結構スケジュール的にも辛いので
作品を作るというよりかは
技術検証・学習が目的って感じの記事がしばらく続くと思います。

そんな学習系技術記事のシリーズ第一弾は
「ジオメトリインスタンシング」です。

ジオメトリインスタンシングとは?

インスタンシングやインスタンス利用描画みたく色んな呼び方があるみたいです。
ただ私が最初に発見した時の名前がジオメトリインスタンシングだったので
私のブログではジオメトリインスタンシングで通していきます。

では具体的にどういうものかと言いますと
「同じないし似たモデルを一括で描画する」ことです。

描画に必要な情報として
①インデックス
②頂点情報
③シェーダーのパラメータ
④テクスチャ情報

大きく分けるとこんな感じになると思います。
これらの情報をバッファにセットして
Draw命令キックして描画します。

実際私が作ってきたプログラムも
レンダラーコンポーネントを作成し
アタッチすることで
各オブジェクトがそれぞれパイプラインを構築し
情報を流して描画していました。

イメージとしてはこんな感じ
f:id:hakase0274:20190521231444p:plain
図の作りからしてわかるようにほとんど同じなわけですね。

基本的に同じないし似たモデルならば
①②と使用シェーダーは同じであることが多いです。
(というか同じだから同じないし似たモデルなんでね)

つまり③と④を描画データとして貯めといて
シェーダーに一括で渡してしまえば
ほぼ同じ処理を繰り返す必要はなくなるわけです。
f:id:hakase0274:20190521232343p:plain

この形にすれば
・描画が一回で済む
・描画データを一括で管理するため描画順を弄るのが楽

こんな感じでパフォーマンス・管理共にうれしいことがあります。

あとがき

今回はジオメトリインスタンシングの第一回目でした。
今日はほとんどこのジオメトリインスタンシングそのものを探すのと
その概要把握だけで終わりましたw

次回からはまったりこのジオメトリインスタンシングを
作っていきたいと思います。

それでは今回はこの辺でノシ