メインコンテンツまでスキップ

Shader

3Dモデルや光の情報、シェーダー自身の設定情報をもとに、VRゴーグルやPCモニタ上にどう描写するかを決めるもの

なに?

シェーダー(Shader: 「陰影・グラデーションを付ける」という意味)は、Unityなどのゲームエンジンが画面にアバターや建築物を描写する「レンダリング」という工程において、ピクセルの色や、それを決める元となる陰影、光の反射などのを視覚効果を計算するためのプログラムです。

シェーダーを例えるなら「Unityが雇い入れた料理人」でしょうか。

料理人、つまりシェーダーがやるべきことは以下の3工程です。

  • ①材料を用意する
  • ③材料を調理する
  • ③調理した料理を客に提供する

①について、料理の材料となるものはアバターなどの「3Dモデルの頂点座標」やUnityのシーンに置かれた「光源オブジェクトの位置、光の色」などです。

②について、料理人(シェーダー)はそれら材料を客の要望に応じた「味付け」をして調理をします。味付けは客の要望(つまりはアバター改変をする「みなさん」)によって異なるでしょう。「リアル調の見た目にしたいから、可能な限り凹凸もはっきりと出したい!」とか、「デフォルメ感を出したいからここの塗り方はシンプルでいいよ」「ここはガラスのような透明感を、こっちは鎧のような金属感を出したい!」などといった注文があるでしょう。

③について、料理人(シェーダー)は注文された味付け方法に沿った調理をし、客に提供します。そうして出来上がった料理は「VRゴーグルやPCモニタ上の画面1ドットずつ吟味しながら置いていった色の集まり」です。すなわち皆さんがVRゴーグル越しに見るアバターやワールドの建築物そのものですが、素材をただ生の状態で出すのではなく、前述の「味付け」や材料となる「光の当たり加減」などが加味されたものになります。

これらの料理は基本的に1秒間にVRゴーグルでは90個(すなわち90FPS)、PCモニターでは60個(60FPS)あるいは120個(120FPS)等を作ることを努力目標にされることが多いです。しかしながら実際は調理環境の設備(PCのスペック、主にGPUなど)が不足している、要求された注文が複雑すぎる(大抵は3Dオブジェクトの頂点数や光源の数などの「材料」が多すぎることが原因)などの理由から1秒あたりに提供できる個数(=FPS)が少なくなってしまうでしょう。

料理人(シェーダー)は、やれることや得意分野に個人差があります。客の要望を可能な限り受け入れられる料理人もいれば、そうでない料理人もいるでしょう。

また、Unityの専属料理人と、そうでない雇い入れた料理人に分けることもできます。前者の専属料理人、すなわち「Unityをインストールすると一緒についてくるシェーダー」の例としてはスタンダードシェーダーやUnlitシェーダー、後者、すなわち「Unityとは別にインストールが必要なシェーダー」の例としてはlilToonなどが挙げられます。

なぜ?

シェーダーは、3DCG表現のリアリティと柔軟性を高めるために開発されました。従来、色や質感は単純な計算で決定されていましたが、シェーダーを使うことで、詳細な光の反射や屈折、半透明な表現、質感の違いなどを精密に計算・制御できるようになりました。これにより、ゲームや映画などで求められる高度なビジュアル表現が可能になりました。