「定数バッファ」を編集中
この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
5行目: | 5行目: | ||
== 概要 == | == 概要 == | ||
− | + | [[CPU]]側で動く[[プログラム]]の[[変数]]を、[[GPU]]側で動く[[プログラマブルシェーダー]]に[[定数]]として送り込むには、 | |
+ | * Direct3D 9ではSetVertexShaderConstant命令とSetPixelShaderConstant命令を使って1個1個送り込んでいた。 | ||
+ | * Direct3D 10からは定数バッファ(Constant Buffer、cbuffer)を使用してドスンと送信できるようになった。 | ||
− | + | まず、シェーダーへ渡す変数(定数)は[[ドローコール]]のたびに再設定するものである。 | |
+ | 変数(定数)は1回のドローコールが終わると自動消去される。 | ||
− | + | このためDirect3D 9では[[定数]]を描画の直前に毎回1個1個設定していた。 | |
− | + | 描画のたびに[[メインメモリ]]から[[VRAM]]に小さな[[データ]]の転送を繰り返している感じである。 | |
− | + | 一方、Direct3D 10も描画の直前に毎回設定するのは同じだが、定数バッファを1個設定するだけでよくなった。[[メインメモリ]]から[[VRAM]]に「定数バッファの[[ポインタ]]」だけが転送される感じである。つまり定数バッファを利用することで[[頂点バッファ]]や[[インデックスバッファ]]などと同様に再利用できるわけだ。 | |
− | |||
− | |||
− | |||
== 利点 == | == 利点 == | ||
− | シェーダー定数には主に[[ディレクショナルライト]]や[[ポイントライト]]の座標や明るさなどを格納していることが多い。これらはゲームシーンの中でそんなに勢いよく変化するものではない。[[ゲーム]]内で時間経過とともに「昼から夜に」「夜から昼に」なるものでも[[フレームレート]]単位でみたら変化などないに等しい。何千回、何万回という[[ドローコール]] | + | シェーダー定数には主に[[ディレクショナルライト]]や[[ポイントライト]]の座標や明るさなどを格納していることが多い。これらはゲームシーンの中でそんなに勢いよく変化するものではない。[[ゲーム]]内で時間経過とともに「昼から夜に」「夜から昼に」なるものでも[[フレームレート]]単位でみたら変化などないに等しい。何千回、何万回という[[ドローコール]]で1回変化するくらいのものである。 |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ならば定数は定数バッファとして[[GPU]]内の[[VRAM]]に格納しておいて再利用すれば効率が良くなるということのようだ。 | |
== 関連項目 == | == 関連項目 == | ||
76行目: | 30行目: | ||
[[category: 3DCG]] | [[category: 3DCG]] | ||
− |