こんにちわ、オオバです。

シェーダーって何?ってなりませんか。
3D、エフェクトだよね?
人によってあいまいな答えが帰ってきます。

そこでシェーダーの理解度に不安な方向けに
かんたんな言葉でわかりやすく
まとめてみました。

本記事でシェーダーとはこういうものだ!
ということを理解してもらえればと思います。

シェーダーとは「3Dオブジェクトをディスプレイに映し出すためのプログラム」

【超基礎】ひとことで「シェーダー」とは何なのか?まとめ_0

最初に結論から話します。
シェーダーをひとことで表すとこちらです。

3Dオブジェクトをディスプレイに映し出すためのプログラム

世の中の情報から 「"シェーダーとは"」 で調べてみましょう。

その1.シェーダーとは「陰影処理」である

シェーダー(英: shader)とは、3
次元コンピュータグラフィックスにおいて、
シェーディング(陰影処理)を
行うコンピュータプログラムのこと。

引用 : シェーダー - Wikipediaより

その2.シェーダーとは「物体の設定」である

シェーダーとは、物体そのものが元々持つ設定

引用 : シェーダ、とは -シェーダとはなんですか?Wikipediaなどを見てみたの- ビデオカード・サウンドカード | 教えて!gooより

その3.シェーダーとは「プログラム」である

レンダリングパイプラインにおいて、
頂点単位の処理、ピクセル単位の処理
をカスタマイズするためのプログラムのこと

引用 : OpenGL ES2.0 一問一答より

他にもさまざまな説明がありました。

シェーダーをひとことで表現してみた

【超基礎】ひとことで「シェーダー」とは何なのか?まとめ_1

今まで仕事で何度もシェーダーを書いてきた経験と、
インターネット、書籍の情報から
シェーダーをひとことで表すとこうなりました。

シェーダーとは、
3Dオブジェクトをディスプレイに映し出すためのプログラム
である。

シェーダーにもさまざまな種類があり、
ディスプレイに映し出す以外の機能もあります。

あくまで初心者向け一般論としての回答です。

この記事の内容

シェーダーを使うとさまざまな表現ができる

シェーダーはディスプレイに映し出すための
プログラムですので、さまざまな表現ができます。

【超基礎】ひとことで「シェーダー」とは何なのか?まとめ_2

引用 : 表現で使いわける!Unity の URPと HDRP - CEDEC2021 - YouTubeより
※CEDEC2021のUnity大下さんのセッションで紹介されたものです。
このような鉛筆で描いたような表現もシェーダーです。

ぶっちゃけシェーダーは分かりづらい

シェーダーが感覚的に3Dオブジェクトを
ディスプレイに映し出すためのプログラム

であることを理解しづらいです。

どういう手順を踏んで3Dオブジェクトが
ディスプレイに映し出されるのかを解説していきます。

トンネルをを抜けるとそこは一面ディスプレイ

【超基礎】ひとことで「シェーダー」とは何なのか?まとめ_3

  1. 表示したい3Dオブジェクトデータをとある筒に渡す
  2. とある筒からディスプレイに表示される

【超基礎】ひとことで「シェーダー」とは何なのか?まとめ_4

非常に簡略化するとこのような手順です。

とある筒とはレンダリングパイプラインです。
ディスプレイに映し出すまでの流れ作業のような過程のこと。
(別名 : グラフィックスパイプライン)

レンダリングパイプラインの中には非常に沢山の処理が含まれています。
3Dオブジェクトデータをレンダリングパイプラインに渡すことで、
さまざまな変換作業を経て3D上から2Dのディスプレイに表示 されます。

シェーダーはレンダリングパイプラインの中にある

シェーダーによる処理はレンダリングパイプラインの一部に含まれます。

【超基礎】ひとことで「シェーダー」とは何なのか?まとめ_5

頂点シェーダーとフラグメントシェーダーで描画する

【超基礎】ひとことで「シェーダー」とは何なのか?まとめ_6

ここで2種類のシェーダーが登場します。

【超基礎】ひとことで「シェーダー」とは何なのか?まとめ_7

頂点シェーダーは頂点を処理

頂点シェーダーはその名も通り、
3Dオブジェクトの 頂点 に関わる処理を行います。

例えば直方体を処理する頂点数は
8頂点ということです。

つまり 1フレームあたり8回 頂点シェーダが
処理するということになります。

フラグメントシェーダーはピクセルを処理

フラグメントシェーダーは、
ディスプレイの1ピクセル毎の処理です。

3Dオブジェクトの頂点は頂点シェーダーで座標変換され、
その結果がフラグメントシェーダーに渡されます。

フラグメントシェーダーで各ピクセルの色や表示の可否を決め
ディスプレイに映し出されるのです。

シェーダー(プログラマブルシェーダー)を使えない時代があった

【超基礎】ひとことで「シェーダー」とは何なのか?まとめ_8

一昔前まではプログラムで記述するタイプのシェーダーは使えませんでした。

固定機能パイプラインと呼ばれるハードウェア側に
予め定義された固定の機能を使って描画します。

【超基礎】ひとことで「シェーダー」とは何なのか?まとめ_9

プログラムで描画処理をカスタマイズできません。

現在はシェーダーはプログラミングで記述

現在は先の説明の通り、
頂点シェーダーフラグメントシェーダー
2か所をプログラミングすることでさまざまな表現が可能です。

【超基礎】ひとことで「シェーダー」とは何なのか?まとめ_10

以上のことからシェーダーをひとことでまとめました。

3Dオブジェクトをディスプレイに映し出すためのプログラム

コンピュータグラフィックスにおいて、
画面に何かしらの映像を映し出すためには、
シェーダーは必ず必要です。

逆にシェーダーが存在しなければ、
ディスプレイは真っ暗のままなのです。
(そもそも描画的にエラーの状態です)

何かが表示されてるということは、
何かしらのシェーダーが実装されている

ということなのです。

まとめ : シェーダーとは3Dオブジェクトをディスプレイに映し出すためのプログラムである

【超基礎】ひとことで「シェーダー」とは何なのか?まとめ_11

シェーダーとは 「3Dオブジェクトをディスプレイに映し出すためのプログラム」
であるということを解説してきました。

その中で3Dオブジェクトがどのようなフローで
ディスプレイに映し出されるのかを紹介しました。

まとめると以下の2点です。

  1. レンダリングパイプライン内に 頂点シェーダーフラグメントシェーダー がある
  2. 3Dオブジェクトはレンダリングパイプラインを通過して描画される

これさえ覚えておけば概要の理解はOKでしょう。

そしてシェーダーとはプログラムであり、
開発者がいかようにも実装することができる のです。

以上でシェーダーの概要を理解できたのでは無いでしょうか。
次のステップは実際にシェーダーを作ってみることでしょう。

Unityでシェーダを学ぶのがオススメ

最近のUnityはShader Graphと呼ばれる
GUIベースのシェーダー自動生成機能が実装されています。

シェーダーの処理が視覚的に理解しやすいため、
最初からシェーダーを書くより Shader Graph がオススメです。

シェーダーを書けるようになって
面白い表現を作れるようになりましょう!

このブログの内容が 分からない
分かりづらい 、などありましたら、
お気軽にTwitterでDMをください。

最後まで読んでいただきありがとうございました!
すばらしいシェーダーライフをお過ごしください。

期間限定 最大95%オフセール
効率UPメガバンドル開催中!最大95%オフ!!!
期間 : 11月1日午後15時59分まで
オススメ記事