メインメニューを開く

差分

定数バッファ

334 バイト追加, 2020年3月30日 (月) 01:37
編集の要約なし
'''コンスタントバッファ定数バッファ'''([[英語]]:Constant Buffer、通称:cbuffer)とは、[[CPU]]で動く[[プログラム]]の[[変数]]群を、[[GPU]]で動く[[プログラマブルシェーダー]]に[[定数]]群としてドスンと送り込むバッファ、機構をいう。群(バッファ)としてドスンと送り込む機構をいう。
[[OpenGL]]界隈では「界隈では宗教上の理由により「[[Uniform Buffer Object]]」という方言が使われている。意味はほぼ同じである。」という方言が使われている。意味はほぼ同じである。
== 概要 ==
[[CPU]]側で動く[[プログラム]]の[[変数]]を、[[GPU]]側で動く[[プログラマブルシェーダー]]に[[定数]]として送り込むには、
* Direct3D 9ではSetVertexShaderConstantとSetPixelShaderConstantを使って1個1個送り込んでいた。9ではSetVertexShaderConstant命令とSetPixelShaderConstant命令を使って1個1個送り込んでいた。* Direct3D 10からはコンスタントバッファ(Constant Buffer、cbuffer)を使用してドスンと送信するようになった。10からは定数バッファ(Constant Buffer、cbuffer)を使用してドスンと送信できるようになった。
Direct3D まず、シェーダーへ渡す変数(定数)は[[ドローコール]]のたびに再設定するものである。変数(定数)は1回のドローコールが終わると自動消去される。 このためDirect3D 9では[[ドローコール定数]]の直前で毎回1個1個変数単位で設定していたが、を描画の直前に毎回1個1個設定していた。Direct3D 10からはコンスタントバッファを1個設定するだけでよい。つまり一方、Direct3D 10も描画の直前に毎回設定するのは同じだが、定数バッファを1個設定するだけでよくなった。つまり定数バッファを利用することで[[バーテックスバッファ頂点バッファ]]や[[インデックスバッファ]]などと同様に再利用できるわけだ。 == 利点 ==シェーダー定数には主に[[ディレクショナルライト]]や[[ポイントライト]]の座標や明るさなどを格納していることが多い。これらはゲームシーンの中でそんなに勢いよく変化するものではない。[[ゲーム]]内で時間経過とともに「昼から夜に」「夜から昼に」なるものでも[[フレームレート]]単位でみたら変化などないに等しい。何千回、何万回という[[ドローコール]]で1回変化するくらいのものである。
シェーダー定数には主に[[ディレクショナルライト]]や[[ポイントライト]]の座標や明るさなどを格納していることが多い。これらはゲームシーンの中でそんなに勢いよく変化するものではない。[[ゲーム]]内で時間経過とともに昼から夜に、夜から昼になるものでも[[フレームレート]]単位でみたら変化などないに等しい。何千回、何万回という[[ドローコール]]で1回変化するくらいのものである。
ならば定数はコンスタントバッファとして[[GPU]]内の[[VRAM]]に格納しておいて再利用すれば効率が良くなるということのようだ。