シェーダーとは何のこと?シェーダーの種類やできることを徹底解説!

シェーダーとは何のこと?シェーダーの種類やできることを徹底解説!

「シェーダー」とは、3Dオブジェクトをディプレイ表示させるためのプログラムのことです。3Dゲーム制作を手掛けるエンジニアの中には、名前は知っていたが、どのようなものか分からず使用していなかった方も多いのではないでしょうか。

今回は、シェーダーの基本概要や種類、できることについて解説します。

シェーダーとは何のこと?

『シェーダー』とは、英語表記で“Shader”と記述し、3Dオブジェクトがディスプレイに映し出されるときの陰影処理をするためのプログラムのことです。

3Dオブジェクトは、光源に対して陰影を付けます。例えば、制作ソフト「Blender」でモデリングを行う場合、デフォルトで光源が設置されており、画像・映像として可視化して、ディスプレイ上に表示する「レンダリング」をする際に、対象となるモデルに影をつけることでよりリアルな世界を表現可能となります。Blenderに限らずUnityでも同様です。

この陰影処理はシェーディングと呼ばれ、その陰影処理はシェーダーというプログラムによって映し出されています。

歩く人の影

3DCGは、モデリングやアニメーション、レンダリングなどの複数の要素がありますが、その中でもレンダリングの一部を担うのがシェーダーです。シェーダーには、さまざまな種類があり、ひとことで表現することは容易ではありません。

また、レンダリングする際、マテリアル設定や光源設定を照らし合わせてピクセルカラーを計算するための数学的計算や、アルゴリズムを含むプログラムです。言語自体は、C言語のスタイルに類似する点が多く、C言語に触れたことがある方やマスターしているエンジニアは速い上達を見込める可能性があります。

シェーダーについて理解するためには、3Dモデルの知識が必要不可欠になります。そのため、理解が不十分と思われる方は、事前に「3Ⅾモデルの作成方法は?概要から使えるソフトまで詳しく解説! 」をぜひご参照ください。

知っておきたいメッシュとマテリアル

次に、メッシュとマテリアルについて詳しく解説します。

メッシュ

メッシュとは、ポリゴンの集合体です。オブジェクトの形状を定義したもので頂点やエッジ、サブメッシュなどの情報を持ちます。

メッシュ(ポリゴンの集合体)

ちなみにポリゴンは、三角形もしくは四角形のコンポーネントのことです。三角形だけでなく、多角形も含まれますが、五角形以上はレンダリングの際にバグが発生しやすいので、ゲーム制作においては四角形までを使用します。

ポリゴン

すべての3Dモデルはポリゴンによって構成されているため、ポリゴンがなければメッシュも3Dモデルも制作することができません。

マテリアル

マテリアルとは、オブジェクト上の質感を設定することができる機能やデータのことです。テクスチャや表面の色、光の反射などの情報を含みます。例えば、四角のオブジェクトがあり、そこに色を付け加えたい場合、マテリアルで設定を行うのが一般的です。緑や青、赤など自由に設定することができます。

マテリアル

また、ツヤを出したり、反射の具合を決めたりするだけでなく、透過設定や画像データをマテリアルに貼り付けることも可能です。このように、オブジェクトの表面の質感や、見た目を変化させるときに使うのがマテリアルになります。

 

\文字より動画で学びたいあなたへ/

Udemyで講座を探す >

シェーダーの種類

3Dモデルは下記のような流れでレンダリングされます。

  1. 頂点シェーダー
  2. ラスタライズ処理
  3. ピクセルシェーダー

その他にも、ジオメトリーシェーダーなど複数の種類がありますが、今回は代表的な種類である、頂点シェーダーとピクセルシェーダーについて詳しくご紹介します。

頂点(バーテックス)シェーダー

別名、バーテックスとも呼ばれ、その名の通り3Dグラフィックスにおけるモデリング・データの頂点を処理することが主な役割です。先程3Dモデルは、ポリゴンの集まりであると表現しました。

ポリゴンは三角形もしくは多角形のコンポーネントになるため、頂点の位置を把握すれば、自ずと面の位置も決まります。そのため、頂点を計算するだけでオブジェクトを表示させることが可能です。この頂点の位置を計算するのが頂点シェーダーの役割になります。

頂点シェーダー

頂点に対してのみ作用するため、対象座標や法線ベクトル、UV座標などの属性を参照・変換することが可能です。基本的には、ワールド・ビュー・プロジェクション変換を担当します。また、頂点シェーダーはモデルを変形させたり、頂点を動かしたりすることも可能です。

ピクセル(フラグメント)シェーダー

ピクセルシェーダーは、計算して表示する色を決めるのが主な役割です。頂点シェーダー処理後、ラスタライズ処理が行われます。ラスタライズ処理は、ピクセルを列にする役割を担います。

そして、ピクセルの並びが決まると、そこに色を入れていかなければなりません。その色の計算を担うのがフラグメントです。もちろん、色だけでなく、陰影や凸凹、反射などを表現することもできます。

ピクセルシェーダー

 

シェーダーでできること

シェーダーは、3Dモデルの描画表現を変えられるプログラムです。では、実際に使用することでどのようなことができるのでしょうか。具体例をご紹介しながらできることを小見出しにわけて解説しますので、ぜひ参考にしてください。

色の合成

1つ目は、色の合成です。2つの色やテクスチャを用意してそれらを合成させることができます。例えば、背景画像と文字だけが表示された背景透過画像を組み合わせて、2つを合体させる処理を行うことが可能です。

また、緑と青を組み合わせて水色を表現したり、青と赤を合成させて赤紫を映し出すことができたりします。単に色を合成するだけでなく、Blend設定をプログラムで組み込み合成具合を調節することも可能です。

陰影の表現(ライティング処理)

2つ目がライティング処理です。ライティング処理を行うことで陰影の表現を変更することができます。

例えば、陰影を明確につける処理を施すことで、濃い影のオブジェクトを表現することが可能です。ただ真っ暗になるのではなく、明るい部分と影の部分をはっきりとさせることができます。一般的にはトゥーンシェイドといわれることが多いです。

また、陰影の表現では、鏡のように強く反射させることもできます。オブジェクトが銀色になり、鏡に映り込んでいるかのように表現することが可能です。ちなみに、強い反射は大きな負荷がかかりますので、スマホゲームなどではパフォーマンスに影響を与えます。

奥行きを表現する

3つ目は、奥行きを表現することです。

会社のオフィスが表現された3Dオブジェクトがあるとします。シェーダーを使用せずにレンダリングをするとイラストのように映し出されてしまい奥行きを表現することが難しいです。

一方、シェーダーを利用することで、3Dオブジェクトの中に奥行きを加えることができます。具体的には深度を元に指定したカラーにフェードさせることで、奥行き感を実現することが可能です。

例えば、会社のオフィスの室内を白色にフェードさせることで、奥側が薄っすらと白くなるため、奥行きを感じることができます。

 

今回は、シェーダーについての基本概要や種類、できることについて解説しました。レベルの高い3Dオブジェクトの表現には必須の知識になります。色の合成や陰影の表現、奥行きなどできることはたくさんあり、ほかの人と技術の面で差別化を図れる可能性があるでしょう。

実際に、習得することで3Dゲーム制作をする上で役立つ場面が非常に多くなるので、エンジニアとして活動されている方やゲームプログラマーを目指している人は、この機会に習得を目指してみてはいかがでしょうか。