3Dモデルに触ろうと思うと必ずどこかできくマテリアルとシェーダとテクスチャー。いままでは「モデルの色とか模様ってことでしょ」とか適当なことを考えていたけど、Unityやってるとそれじゃダメダメだと思って調べてみた。
テクスチャとシェーダーをマテリアルで?
Unityのマニュアル曰く
マテリアル は、使用するテクスチャ、そのタイリング設定や色調などへの参照を含んで、どのようにモデル表面を描画するかを定義します。マテリアルに用意されたオプションで、どのシェーダーをそのマテリアルに使用するかを決めます。
シェーダー は、光源入力とマテリアル設定をベースにして、ピクセル毎の描画色を計算するための数学的な計算とアルゴリズムを内包した、小さなスクリプトです。
Textures はビットマップ画像です。マテリアルにはテクスチャへの参照が含まれ、それによりマテリアルのシェーダーは、オブジェクト表面の色を計算するのに、テクスチャを使えるようになります。加えて、オブジェクト表面の基本色(アルベド)では、反射率や粗さなどのマテリアル表面のさまざまな要素をテクスチャで置き換える事ができます。
(引用:マテリアルとシェーダーとテクスチャ)
つまりは?
マテリアル
モデル表面の反射率や粗さなど、描画設定の集まり。
このなかでテクスチャやシェーダーの指定も行う。
テクスチャ
色や模様を表現するビットマップ画像。
場合によっては、マテリアルの役割と置き換えることができる。例えば、モデルの影になっている部分に対して、マテリアルの反射率で計算を行うのではなく、その部分を黒く塗ったテクスチャを用意するとか。そうすることで描画処理を軽くできる。
シェーダー
ピクセル毎の描画色を計算するスクリプト。
モデルデータの頂点位置を計算し、モデル表面のピクセル並びを決め、テクスチャに従って配色する。
まとめ
マテリアルという描画設定の集まりが入る箱に、テクスチャとシェーダーも入っており、シェーダーはテクスチャと、マテリアルの他の設定から、配色を計算してモデルに描画していく。