YAMADA TAISHI’s diary

ゲームについてとか私の日記とか。このブログのあらゆるコードは好きにどうぞ。利用規約があるものは記事内のGitHubのRepositoryのリンクで貼られていると思うので、そちらを参照ください。

超初心者シェーダー前提入門

こんにちは、やまだたいし( やまだ たいし (@OrotiYamatano) / Twitter )です。
Shader勉強したいって方の入り口になる部分がめっちゃ狭いなと思ったので
今回はデザイナーでも分かるような入門窓口となる記事を書いてみました。

目次


具体的にシェーダーって何が出来るの?


その前に描画の手順をカンタンに説明します

  1. 3Dモデルを準備
  2. 3Dモデルをディスプレイに表示するために座標変換
  3. 3Dモデルのバーテックス(頂点)ごとに描画位置を算出
  4. 裏表を調べて描画
  5. 描画する点の場所を確定
  6. 点ごとに描画優先度をデプスバッファ(深度情報)を比較
  7. 描画する点の色を確定
  8. 点を打つ

という流れで描画されます。
使用するアーキテクチャ等によって前後したり若干違ったりしますが大体こんな流れです。

(因みに3次元モデルのデータから2次元画像のイメージを作り出す多段階の過程全体のことをレンダリングパイプラインと呼びます)

で、シェーダーでは太文字の部分に手が加えられます。
3番に対してのプログラムをバーテックス(頂点)シェーダー
7番に対してのプログラムをフラグメント(ピクセル)シェーダー
とそれぞれ呼びます。

他にも出来ることはあるのですが、基本的にシェーダーで、この過程に手を加えられるのは、この2つと覚えてもらえばいいです。

シェーダーとマテリアルとテクスチャの違い


勘違いする人もいるので、ちゃんとした説明をする前にカンタンに解説

  • シェーダー
  • マテリアル
    • そのシェーダーに渡す値(設定)。
    • (マテリアルを設定してくださいって言うとシェーダー込みで指定されることが大半なので誤解する人も居るかも?)
  • テクスチャ
    • マテリアルに設定する2D情報(データ)のこと
      テクスチャ ≠ 2D画像(2D画像のこともテクスチャと呼ぶけど、同義じゃない)

バーテックスシェーダーで出来ること


こういう水面の歪み(反射はフラグメントシェーダー)

モデルを歪ませたり……。

めっちゃ頂点動かしてみたり

こういったエフェクト的表現に向いてる。
3Dモデラーさん向けにカンタンに言うと、シェイプキーを設定せずに3Dモデルの頂点をプログラムで動かすことが出来るってこと。

フラグメントシェーダーで出来ること


ディゾルブ表現とか……

マッピングされているテクスチャに対しての処理とか(セルルックシェーダーなど影やライティングの調整が出来る)

こういった歪みシェーダーとかもできる。

Blenderのこういった雲をつくる処理もフラグメントシェーダー

その他のシェーダー(ジオメトリ)


雑草作ったり、ファーシェーダー

フラグメントシェーダーとバーテックスシェーダーのあわせ技


因みにポストエフェクトのシェーダーは……


  1. 3Dモデルを準備
  2. 3Dモデルをディスプレイに表示するために座標変換
  3. 3Dモデルのバーテックス(頂点)ごとに描画位置を算出
  4. 裏表を調べて描画
  5. 描画する点の場所を確定
  6. 点ごとに描画優先度をデプスバッファ(深度情報)を比較
  7. 描画する点の色を確定
  8. 点を打つ
  9. ココ!で行われる

レンダリング結果に対してエフェクトをかけるので、
ロジックは2Dのドットに対して加工する処理になるのでピクセルシェーダーになります。
画面全体に対して1ピクセルずつ処理をするのでエフェクトが重なるほど重いです。

RGBずらしとか……

いわゆるカメラのエフェクト(ブラーとか)はポストエフェクト!

実際にシェーダーをイジってみたいと思ったら


いきなり数式とか仕組みやプログラムから入るのは辛い!
ノードでフラグメントシェーダーから始めてみよう!

まとめ


勉強にきっかけになる記事になればなぁと思い衝動的に作りました。
参考になれば幸いです。