シェーダーは表示まで行うのでしょうか？


ツールや業界などによって意味が異なるかもしれないですが

  * シェーダーは「ほげほげを表示する」
  * 頂点を表示するためのシェーダー

などというような表現の日本語を見るのですが、表示を担当するのはレンダラーなのではないでしょうか？  
それともシェーダーも表示するのでしょうか？

注：シェーダーもレンダラーも厳密に何を指しているのかわかてないので学習中です。なんとなく、シェーダーは表示に必要な情報だけを持っており、表示するのはレンダラーだと推測しています。

そもそもCG系の本や記事では、「表示する」に類似の表現として「描画する」という日本語も用いられますが、同じことを言ってるのかよくわかってません（どちらも画面に写すこと？）

* * *

<https://zenn.dev/nissy_dev/scraps/ab45f4d51ec915#comment-60ba13c8271a7d>

> GPU 上で実行される任意のプログラムを指す大ざっぱな用語として「シェーダー」が使われている。
>
> 以前は、各ピクセルの色を計算するために GPU 上で実行される小さなコードを指し、レンダリングされているオブジェクトに陰影を付けるために存在していた。

とあるように「シェーダー」の意味自体が歴史的に変わってきていることを認識しています（シェーダーがなにかはっきり理解できていないので、単純に変わってきているんだなあと認識しているだけです）

この歴史の変革を素直に受け入れると、深く考えずにGPU上で実行されるコードなので、表示しようが描画しようが関係無い気もしますが...（どうも気になります）

* * *

ちょっと微妙なニュアンスの違いがわかってないので、質問の焦点が定まらなさそうなので、  
ここでの質問は下記の答えになるような感じとして受け止めていただければと思います。

想定回答

  * シェーダーもレンダラーも表示する機構である（表示するものが違う。たとえば影専用。頂点専用など）。
  * シェーダーは表示しない（表示に必要な情報だけを持っている）。レンダラーが表示する。
  * 上記２つのどちらでもない。
  * そもそもツールや業界によって意味が違う。

* * *

追記：  
どうやら

  * シェーダーは「表示」
  * レンダラーは「描画」

という日本語と一緒に説明されているのが多い気がします。（もしかしてシェーダーが表示で、レンダラーが位置情報だけを持っている（もしくは位置情報を計算するだけ）とかでしょうか？）




Wikipedia によると「レンダリング」とは、

[Rendering (computer
graphics)](https://en.wikipedia.org/wiki/Rendering_\(computer_graphics\))

> It is the last major step in the graphics pipeline, giving models and  
>  animation their final appearance.

とあり、グラフィックス・パイプラインの構造は

[Graphics
pipeline#Structure](https://en.wikipedia.org/wiki/Graphics_pipeline#Structure)

> A graphics pipeline can be divided into three main parts: Application,  
>  Geometry and Rasterization.

[![Graphics
pipeline#Structure](https://i.stack.imgur.com/aRbqa.png)](https://i.stack.imgur.com/aRbqa.png)

と説明されているので、ラスタライズが、CG におけるレンダリングに該当することになります（Wikipedia 説）。

ということは主にはフラグメント・シェーダー（別名ピクセル・シェーダー）以降の部分が、レンダラーに相当することになると思います。

[![Shader](https://i.stack.imgur.com/wbrYZ.png)](https://i.stack.imgur.com/wbrYZ.png)

本来、「シェーダー」という言葉は、我々プログラマー側にとっては「プログラマブル・シェーダー」という文脈で使われる言葉だと思うのですが、その場合は、プログラマブルにされて（ソフトウェア・プログラマーに対して解放されて）いるパイプラインの特定の部分を区別するために使われる用語だと思います。なので、「シェーダー」という用語それ自体は、バーテックス・シェーダーも含めば、フラグメント・シェーダーも含む広い範囲をカバーするので、「レンダラー」という用語と排他的に使い分ける言葉ではないと思います。

  * フラグメント・シェーダー以降の部分≒レンダラー
  * フラグメント・シェーダー以前の部分（バーテックス、ジオメトリー等）

と使い分けることは可能ですが、シェーダーという広い範囲をカバーする言葉そのものをレンダラーと対立させて使い分けようとするのは無理があるのかもしれません。




Wikipedia によると「レンダリング」とは、

[Rendering (computer
graphics)](https://en.wikipedia.org/wiki/Rendering_\(computer_graphics\))

> It is the last major step in the graphics pipeline, giving models and  
>  animation their final appearance.

とあり、グラフィックス・パイプラインの構造は

[Graphics
pipeline#Structure](https://en.wikipedia.org/wiki/Graphics_pipeline#Structure)

> A graphics pipeline can be divided into three main parts: Application,  
>  Geometry and Rasterization.

[![Graphics
pipeline#Structure](https://i.stack.imgur.com/aRbqa.png)](https://i.stack.imgur.com/aRbqa.png)

と説明されているので、ラスタライズが、CG におけるレンダリングに該当することになります（Wikipedia 説）。

ということは主にはフラグメント・シェーダー（別名ピクセル・シェーダー）以降の部分が、レンダラーに相当することになると思います。

[![Shader](https://i.stack.imgur.com/wbrYZ.png)](https://i.stack.imgur.com/wbrYZ.png)

本来、「シェーダー」という言葉は、我々プログラマー側にとっては「プログラマブル・シェーダー」という文脈で使われる言葉だと思うのですが、その場合は、プログラマブルにされて（ソフトウェア・プログラマーに対して解放されて）いるパイプラインの特定の部分を区別するために使われる用語だと思います。なので、「シェーダー」という用語それ自体は、バーテックス・シェーダーも含めば、フラグメント・シェーダーも含む広い範囲をカバーするので、「レンダラー」という用語と排他的に使い分ける言葉ではないと思います。

  * フラグメント・シェーダー以降の部分≒レンダラー
  * フラグメント・シェーダー以前の部分（バーテックス、ジオメトリー等）

と使い分けることは可能ですが、シェーダーという広い範囲をカバーする言葉そのものをレンダラーと対立させて使い分けようとするのは無理があるのかもしれません。

