新規のマテリアルを作成するにはメインメニューまたは プロジェクトビュー のコンテキストメニューから Assets->Create->Material を使用します。
デフォルトでは、新規のマテリアルに以下のようなすべてのマップ プロパティーが空の Standard Shader が割り当てられます。
マテリアルを作成した後はオブジェクトに適用して Inspector でプロパティーを微調整できます。オブジェクトに適用するには プロジェクトビュー から Scene または Hierarchy のいずれかのオブジェクトにドラッグ&ドロップします。
特定のマテリアルに使用させたいシェーダーを選択できます。インスペクターの Shader ドロップダウンを拡張して新しいシェーダーを選択します。選択するシェーダーによって、変更することができるプロパティーが示されます。プロパティーには、カラー、スライドバー、テクスチャ、数字、またはベクトルがあります。もし Scene 上のアクティブなオブジェクトにマテリアルを適用した場合、オブジェクトに対するプロパティー変更がリアルタイムで行われることが画面で確認できます。
Texture をプロパティーに適用する方法が二つあります。
スタンダードシェーダー に加えて、特殊な目的のためのビルトインシェーダーがいくつかあります。
シェーダーとは、モデル表面のピクセルの見え方を決めるための、数学的な計算とアルゴリズムを格納したスクリプトです。スタンダードシェーダーは、複雑で写実的なライティング計算を実現します。それ以外にも、もっとシンプルなものや、さまざまな表現を実現するためにさまざまな計算をするシェーダーが使われます。各シェーダー内には、そのシェーダーをマテリアルで使用するための値を設定できる、さまざまなプロパティーがあります。これらのプロパティーは、マテリアルを表示したときにインスペクターに現れる数値や色の定義、テクスチャなどによって設定できます。マテリアルはその後、ゲームオブジェクトに適用されたレンダラーコンポーネントによって、各ゲームオブジェクトのメッシュを描画するために使用されます。
いくつかの異なるマテリアルから、同じテクスチャを参照することが可能ですし、そのほうが都合のよい事が多いです。それらのマテリアルでは必要に応じて、同一のシェーダーか、個別のシェーダーを使用することもできます。
以下は、テクスチャ1枚にシェーダー2種、それにマテリアルを3つ使用して組合せ可能な設定の例です。
図の中に、赤い車と青い車があります。どちらのモデルも、ボディ部分用のマテリアルとして、それぞれ “Red car material” と “Blue car material” を使っています。
どちらのボディ用マテリアルも同じカスタムシェーダー、 “Carbody Shader” を使っています。カスタムシェーダーを使うのは、金属的な輝きの描画や、ダメージ用のマスク機能など、車体用の特別な拡張機能が追加されているためです。
どちらの車体用マテリアルも、個別の塗装色以外では、車体のディティールをすべて含んでいるテクスチャマップ “Car Texture” を参照しています。
Carbody shader は、赤い車と青い車それぞれに異なる色を設定し、中間色にすることも可能なので、それら両方でテクスチャ一枚を共有するだけで、どちらの車も異なる見た目にすることができます。
車輪のモデルも別々のマテリアルを使っていますが、車輪はそれぞれの車で違わないので、今回はどちらの車も同じマテリアルを共有します。車輪のマテリアルには Standard Shader を使っていて、こちらも Car Texture を参照しています。
car texture には、車体と車輪、両方のディティールが含まれていることに注意してください。これは テクスチャアトラス と言い、テクスチャイメージのさまざまな部分がモデルのさまざまな部分にマッピングされる、という事になります。
車体のマテリアルで車輪の画像を含んだテクスチャを使っていても、テクスチャのその部分は車体のジオメトリにはマッピングされていないので、車輪が車体に現れる事はありません。
車輪のマテリアルでも、車体のディティールを含んだ同じテクスチャを使っています。同じ事ですが、テクスチャの一部分だけに描かれた車輪のディティールは、車輪のジオメトリにマッピングされているので、車体のディティールが車輪に現れる事はありません。
このマッピングは Unity 外の 3D アプリケーションを使って、 3D アーティストが行います。これは、 “UV マッピング” と呼ばれます。
より具体的には、シェーダーが定義するのは、
マテリアルが定義するのは、
カスタムシェーダーはグラフィックスプログラマーにより記述されることを意図しています。ShaderLab 言語を用いて作成されていて、かなりシンプルです。しかし、シェーダーを幅広いグラフィックスカードで動作するようにすることはややこしい作業でありグラフィックスについて相当に網羅的な知識が必要です。
いくつかのシェーダーは Unity に内蔵されていて、いくつかは Standard Assets ライブラリに含まれます。