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

理解度がふわっとしている方向けに、
シェーダーを自分の言葉でまとめてみたいと思います。

この記事の内容

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

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

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

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

その1.陰影処理

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

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

その2.物体の設定

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

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

その3.プログラム

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

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

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

今まで仕事で何度もシェーダーを書いてきた経験と、
インターネット、書籍の情報元に導き出したのが、

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

です。

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

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

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

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

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

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

感覚的にシェーダーが3Dオブジェクトを
ディスプレイに映し出すためのプログラム
であることを理解しづらいです。

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

筒を抜けるとディスプレイ

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

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

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

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

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

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

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

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

2種類のシェーダーが登場

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

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

頂点シェーダー

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

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

フラグメントシェーダー

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

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

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

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

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

固定機能パイプラインと呼ばれるハードウェア側に
予め定義された固定の機能を使って描画します。
プログラムで描画処理をカスタマイズできません。

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

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

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

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

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

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

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

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

何かが表示されてるということは、
何かしらのシェーダーが
書かれているということなのです。

「シェーダーとは」 まとめ

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

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

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

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

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

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

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

📚 参考サイト : GitHub - baobao/ShaderGraphAnimation

※Unityで作ってみたシェーダーアニメーション

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

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

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

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

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

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

オススメ記事
2021秋 Asset Refreshセール
100以上のアセットがなんと50%OFF!!オオバもいくつか買いました!
期間 : 10月2日午後3時59分まで