最新版 |
編集中の文章 |
1行目: |
1行目: |
− | '''バーテックスシェーダー'''([[英語]]:Vertex Shader、和名:頂点シェーダー)とは、[[シェーダー]]のうち、[[グローバル変数]](実質的に[[定数]])と[[ポリゴン]]の[[頂点データ]]が入力され、それを加工して、出力するものをいう。 | + | '''バーテックスシェーダー'''([[英語]]:Vertex Shader、和名:頂点シェーダー)とは、[[シェーダー]]のうち、[[グローバル変数]](実質的に[[定数]])と[[ポリゴン]]の頂点データが入力され、それを加工して、出力するものをいう。一般的には[[バーテックスバッファ]]から入力を受け取る。 |
| | | |
− | | + | バーテックスシェーダーと[[ピクセルシェーダー]]の2種類は基本中の基本であるため、[[シェーダーモデル]]を問わず、[[DirectX]]や[[MonoGame]]、[[Unity]]などのプラットフォームを問わず扱えるはずである。 |
− | == 概要 ==
| |
− | バーテックスシェーダーと[[ピクセルシェーダー]]の2種類は基本中の基本であるため、[[シェーダーモデル]]を問わず、[[DirectX]]や[[MonoGame]]、[[Unity]]などのプラットフォームも問わず扱えるはずである。 | |
− | | |
− | [[file:バーテックスシェーダー.png|none]]
| |
− | | |
− | バーテックスシェーダーは、[[バーテックスバッファ]]および[[インデックスバッファ]]で無駄を削がれた[[頂点データ]]群を入力として受け取る。
| |
− | | |
− | 出力も[[頂点データ]]群である。この出力は[[ジオメトリシェーダー]]に渡されて[[ピクセル]]群に分解され、その後[[ピクセルシェーダー]]に渡される。なお、近年のパイプラインではバーテックスシェーダーの直後に「[[ハルシェーダー]]」「[[テッセレーター]]」「[[ドメインシェーダー]]」の[[テッセレーション]]三兄弟(実質3つで1つ)を経由することもある。
| |
| | | |
| == 主な用途 == | | == 主な用途 == |
− | 主に服や草などが「なびく系」のアニメーションを行うのに用いられていることが多い。これらは[[物理演算エンジン]]で細かく計算してもいいが、たとえば草原の草を1本単位で物理演算するのは[[CPU]]では論外、専用ハードウエアでも厳しい。そういった場面でそれらしく見せるのに使われる。
| + | 主に服や草などが「なびく系」のアニメーションを行うのに用いられていることが多い。これらは物理演算エンジンで細かく計算してもいいが、たとえば草原の草を1本単位で物理演算するのはCPUでは論外、専用ハードウエアでも厳しい。そういった場面でそれらしく見せるのに使われる。 |
− | | |
− | また、小難しいことをしない場合はバーテックスシェーダーはほとんど使われず、頂点データにカメラ座標を行列乗算(カメラから見た位置に変換)して出力することも多い。[[MonoGame]]のサンプルプログラムではモデルとカメラの[[ジオメトリ変換]]に[[CPU]]で計算していることが多いが、バーテックスシェーダーを使うとかなり速くなるよ。
| |
− | | |
− | === 頂点データの最適化 ===
| |
− | 入力をそのまま出力するバーテックスシェーダーを用意して、そこに[[バーテックスバッファ]]と[[インデックスバッファ]]を投げ込む。すると[[インデックスバッファ]]と同じサイズに無駄を削がれた[[バーテックスバッファ]]が得られる(インデックスが頂点座標に置き換えられたものが得られる)。
| |
− | | |
− | この無駄の削がれたバーテックスバッファを[[物理演算エンジン]]にぶち込み[[レイキャスト]]を使った当たり判定に用いると結構いい感じになる。
| |
| | | |
− | なお、[[OpenGL ES]]系では[[バーテックスバッファ]]は書き込み一方通行であり読み出せないのでこの方法は使えない。あまり変化のない物体であれば[[PC]]上の[[OpenGL]]や[[DirectX]]でこの手法で無駄を削いだバーテックスバッファを事前に取得し、[[csvファイル]]なんかに保存しておき、[[iOS]]や[[Android]]などのOpenGL ES系のプラットフォームではそれを利用するという手もある。[[アプリ]]内での計算量も減るので高速化にもなる。
| + | 小難しいことをしない場合はバーテックスシェーダーはほとんど使われず、頂点データにカメラ座標を行列乗算(カメラから見た位置に変換)して出力することも多い。[[MonoGame]]のサンプルプログラムではモデルとカメラの[[ジオメトリ変換]]に[[CPU]]で計算していることが多いが、バーテックスシェーダーを使うとかなり速くなるよ。 |
| | | |
| == 関連項目 == | | == 関連項目 == |
33行目: |
18行目: |
| * [[HLSL]] | | * [[HLSL]] |
| * [[OpenGL ES]] | | * [[OpenGL ES]] |
− |
| |
− | [[category: コンピューター・グラフィックス]]
| |
− | [[category: GPU]]
| |