マテリアルとシェーダーとテクスチャ
スタンダードシェーダー

マテリアルの作成と使用

新規のマテリアルを作成するにはメインメニューまたは プロジェクトビュー のコンテキストメニューから Assets->Create->Material を使用します。

デフォルトでは、新規のマテリアルに以下のようなすべてのマップ プロパティーが空の Standard Shader が割り当てられます。

マテリアルを作成した後はオブジェクトに適用して Inspector でプロパティーを微調整できます。オブジェクトに適用するには プロジェクトビュー から Scene または Hierarchy のいずれかのオブジェクトにドラッグ&ドロップします。

マテリアルプロパティーの設定

特定のマテリアルに使用させたいシェーダーを選択できます。インスペクターの Shader ドロップダウンを拡張して新しいシェーダーを選択します。選択するシェーダーによって、変更することができるプロパティーが示されます。プロパティーには、カラー、スライドバー、テクスチャ、数字、またはベクトルがあります。もし Scene 上のアクティブなオブジェクトにマテリアルを適用した場合、オブジェクトに対するプロパティー変更がリアルタイムで行われることが画面で確認できます。

Texture をプロパティーに適用する方法が二つあります。

  1. プロジェクトビューからテクスチャのボックスの上にドラッグ&ドロップします。
  2. Select ボタンをクリックして、表示されるドロップダウンリストからテクスチャを選択します。

ビルトインシェーダー

スタンダードシェーダー に加えて、特殊な目的のためのビルトインシェーダーがいくつかあります。

  • FX : ライティングとガラスのエフェクト
  • GUIUI: UI グラフィック
  • Mobile: モバイル デバイス用に簡素化されたハイパフォーマンス シェーダー
  • Nature : 樹木および地形
  • Particles : パーティクルシステムエフェクト
  • Skybox: すべてのジオメトリの裏側でレンダリングする背景環境
  • Sprites: 2D スプライトシステムとともに使用
  • Toon : カートゥーン(漫画)風のレンダリング
  • Unlit: すべてのライトとシャドウイングを完全にバイパスするレンダリング
  • Legacy: スタンダードシェーダーに取って代わられる古いシェーダーの大きい集合

シェーダー技術詳細

シェーダーとは、モデル表面のピクセルの見え方を決めるための、数学的な計算とアルゴリズムを格納したスクリプトです。スタンダードシェーダーは、複雑で写実的なライティング計算を実現します。それ以外にも、もっとシンプルなものや、さまざまな表現を実現するためにさまざまな計算をするシェーダーが使われます。各シェーダー内には、そのシェーダーをマテリアルで使用するための値を設定できる、さまざまなプロパティーがあります。これらのプロパティーは、マテリアルを表示したときにインスペクターに現れる数値や色の定義、テクスチャなどによって設定できます。マテリアルはその後、ゲームオブジェクトに適用されたレンダラーコンポーネントによって、各ゲームオブジェクトのメッシュを描画するために使用されます。

いくつかの異なるマテリアルから、同じテクスチャを参照することが可能ですし、そのほうが都合のよい事が多いです。それらのマテリアルでは必要に応じて、同一のシェーダーか、個別のシェーダーを使用することもできます。

以下は、テクスチャ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 ライブラリに含まれます。

マテリアルとシェーダーとテクスチャ
スタンダードシェーダー