概要
3Dモデル(メッシュ)は、単なる「形状」のデータにすぎません。そのオブジェクトがどのような色で、どのような表面(金属、プラスチック、布など)を持っているかを定義するのが、マテリアル (Material) と シェーダー (Shader) の役割です。
この二つの概念は密接に関連しており、しばしば混同されがちですが、その役割は明確に異なります。
- シェーダー: オブジェクトをどのように描画(レンダリング)するかを計算するための プログラム(アルゴリズ ム) です。光をどのように反射するか、影をどう計算するか、テクスチャをどう貼り付けるか、といった計算式が記述されています。
- マテリアル: シェーダーを実際にオブジェクトに適用するためのアセットです。マテリアルは特定のシェーダーを選択し、そのシェーダーが公開しているプロパティ(色、テクスチャ、滑らかさなど)の具体的な値を設定します。
例えるなら、シェーダーが「料理のレシピ(計算式)」で、マテリアルが「レシピに具体的な材料(色やテクスチャ)を当てはめて作った料理そのもの」と言えます。同じレシピ(シェーダー)でも、材料(プロパティ)を変えれば、全く違う料理(見た目)になるのです。
この記事では、マテリアルの作成方法と、Unityの強力な標準シェーダー (Standard Shader) を使ってオブジェクトに様々な質感を与える方法について解説します。
マテリアルの作成と適用
- 作成: プロジェクトウィンドウで右クリックし、
Create > Materialを選択します。新しいマテリアルアセット(.matファイル)が作成されます。 - 適用: 作成したマテリアルアセットを、シーンビューまたはヒエラルキー上の3Dオブジェクトにドラッグ&ドロップします。すると、オブジェクトの
Mesh RendererコンポーネントのMaterials配列に、そのマテリアルがセットされます。
シェーダーの選択
マテリアルアセットを選択すると、Inspectorの上部にShaderというドロップダウンメニューが表示されます。ここで、このマテリアルが使用する「レシピ」を選択します。Unityには多くの組み込みシェーダーがありますが、最も基本かつ強力なのがStandard Shaderです。
Standard Shader: Lit vs Unlit
Unityの標準的なレンダーパイプライン(Built-in Render Pipeline)では、Standardシェーダーがデフォルトです。URP (Universal Render Pipeline) や HDRP (High Definition Render Pipeline) を使用している場合は、Lit (ライティングあり) と Unlit (ライティングなし) という名前のシェーダーが基本となります。これらは本質的に同じ役割を果たします。
- Lit (ライティングあり): シーン内のライト(光源)の影響を完全に受けます。光の当たり方によって陰影がつき、リアルな質感を表現できます。3Dゲーム内のほとんどのオブジェクトは、このLit系のシェーダーを使用します。これがPBR (Physically Based Rendering) の基本です。
- Unlit (ライティングなし): シーン内のライトを完全に無視します。オブジェクトは、設定された色やテクスチャがそのままの明るさで表示されます。UI要素や、特殊なエフェクト、あるいはデバッグ表示などに使われます。
PBR (物理ベースレンダリング) の基本プロパティ
Litシェー ダー(Standard Shader)は、物理法則に基づいて光の反射をシミュレートするPBRに対応しています。これにより、アーティストは現実世界の物質が持つ特性を指定するだけで、様々な環境下でリアルに見えるマテリアルを作成できます。主要なプロパティは以下の通りです。
-
Albedo (アルベド): オブジェクトの基本的な色を定義します。ここにカラーテクスチャ(物体の模様や色を描いた画像)を割り当てるのが一般的です。
-
Metallic (メタリック): 表面がどれだけ「金属らしいか」を0から1の値で設定します。
0は非金属(プラスチック、木、布など)、1は金属(鉄、金、銅など)を表します。通常、この値は0か1のどちらかに設定し、中間値はあまり使いません。 -
Smoothness (滑らかさ) / Roughness (粗さ): 表面がどれだけ滑らかか、あるいはザラザラしているかを定義します。
Smoothnessが1(Roughnessが0)に近いほど、表面は鏡のように滑らかになり、光をはっきりと反射します。逆にSmoothnessが0(Roughnessが1)に近いほど、表面はザラザラになり、光を乱反射します。この値は、プラスチックのツヤ、濡れた表面、すりガラスなどの質感を表現するのに非常に重要です。 注意: Unityの標準シェーダーではSmoothness、Unreal Engineなど他の多くの環境ではRoughness(1 - Smoothness)が使われます。概念は同じです。 -
Normal Map (法線マップ): メッシュのポリゴン数を増やさずに、表面に細かい凹凸やディテールがあるように見せかけるための特殊なテクスチャです。レンガの壁の溝、布の織り目、キャラクターの鎧の模様などを表現するのに使われ、見た目のリッチさを大きく向上させます。
-
Emission (エミッション): オブジェクト自体が光を発しているように見せかけます。ライトのように他のオブジェクトを照らすわけではありませんが、ネオンサインや魔法のアイテム、モニター画面などの表現に使われます。ポストプロセッシングの
Bloomエフェクトと組み合わせることで、美しいグロー(光のにじみ)効果を生み出します。
まとめ
マテリアルとシェーダーは、3Dオブジェクトに命を吹き込むための重要な要素です。
- シェーダーは「計算式」、マテリアルは「具体的な値が設定されたもの」。
Litシェーダーは光源の影響を受け、リアルな質感を表現する。Unlitシェーダーは光源を無視する。- PBRの基本は
Albedo(色)、Metallic(金属っぽさ)、Smoothness(滑らかさ) の3つの主要プロパティで質感を定義すること。 Normal Mapでディテールを追加し、Emissionで自己発光を表現できる。
これらのプロパティを調整し、様々なテクスチャを組み合わせることで、同じ3Dモデルから無限に近いバリエーションの見た目を作り出すことができます。良いマテリアルは、ゲームの世界の説得力を格段に高めてくれます。