2.

Unity Mesh Renderer 完全ガイド

編集
この記事の要点
  • Mesh Renderer は GameObject にアタッチされた Mesh を画面に描画するコンポーネント。必ず MeshFilter とペアで使う
  • 主な設定: Materials(マテリアル配列)/ Lighting(Cast/Receive Shadows、Contribute GI)/ Probes(Light Probes、Reflection Probes)/ Additional Settings(Dynamic Occluded、Motion Vectors)
  • Skinned Mesh Renderer は骨格アニメ用で別物。スキニング処理が入るため重い
  • SRP(URP/HDRP)では Material は対応シェーダ必須。Built-in シェーダの "Standard" は URP では Universal Render Pipeline/Lit へ変換
  • GPU Instancing を有効にすると、同 Material の複数描画を 1 ドローコールに束ねられる。草・小物配置で必須
  • デバッグは Frame Debugger(Window → Analysis → Frame Debugger)でドローコール単位で確認

Mesh Renderer とは

Mesh Renderer は、3D メッシュを画面に表示するための Unity の標準コンポーネントです。GameObject に Mesh Renderer を追加することで、その GameObject が持つ MeshFilter に格納されたメッシュデータを、指定したマテリアル(シェーダ+テクスチャ)で描画します。

Unity でモデルをシーンに表示する仕組みは、次の 3 つのコンポーネントで成り立っています:

コンポーネント役割必須
Transform位置・回転・スケール必須(全 GameObject に付く)
MeshFilter表示するメッシュ(頂点・UV・法線)の保持Mesh Renderer に必須
Mesh RendererMeshFilter のメッシュをマテリアルで描画静的モデルなら必須
Skinned Mesh Rendererボーンに追従して変形させるキャラクタアニメ用

Inspector の主要項目

Materials

マテリアル配列。メッシュが複数サブメッシュを持つ場合、配列の要素数 = サブメッシュ数。サイズが合わないと描画されないサブメッシュが出ます。

Lighting

項目意味デフォルト
Cast Shadows影を落とすか(On / Off / Two Sided / Shadows Only)On
Receive Shadows他オブジェクトの影を受けるかtrue
Contribute Global Illuminationライトマップベイクに参加するかfalse
Receive Global IlluminationLightmaps / Light Probes 受光Light Probes

Probes

Light Probes(動的オブジェクトの間接光) / Reflection Probes(環境反射) / Anchor Override(プローブサンプリングの基準点)を制御。大型メッシュで Anchor を指定しないと、見た目がチカチカする原因になります。

Additional Settings

  • Motion Vectors: モーションブラー用。Camera Motion Only / Per Object Motion / Force No Motion
  • Dynamic Occluded: Occlusion Culling 対象にするか。大型動的オブジェクトは false にすると正しく描かれることも

MeshFilter とのペア設定

Mesh Renderer 単体では何も描画されません。MeshFilter にメッシュアセット(FBX 等から抽出された Mesh)を割り当てる必要があります:

using UnityEngine;

public class MeshSetup : MonoBehaviour
{
    public Mesh mesh;
    public Material material;

    void Awake()
    {
        // MeshFilter と MeshRenderer を取得(無ければ追加)
        var mf = GetComponent() ?? gameObject.AddComponent();
        var mr = GetComponent() ?? gameObject.AddComponent();

        mf.sharedMesh = mesh;
        mr.sharedMaterial = material;

        // 影を落とさない設定例
        mr.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
        mr.receiveShadows = false;
    }
}

Static フラグと最適化

GameObject Inspector 右上の Static ドロップダウンで、動かない前提のオブジェクトに対して以下の最適化が有効になります:

Static フラグ効果
Contribute GIライトマップにベイクされる
Occluder / Occludee StaticOcclusion Culling の対象
Batching StaticStatic Batching の対象(同 Material をまとめる)
Navigation StaticNavMesh ベイクの対象
Reflection Probe Static反射プローブベイクに含める

Skinned Mesh Renderer との違い

キャラクタの腕や脚が動く(ボーンに追従する)場合は Skinned Mesh Renderer を使います。Mesh Renderer はメッシュを変形できません。

項目Mesh RendererSkinned Mesh Renderer
用途静的モデル(地形、建物、武器)キャラ、骨格アニメ
必要コンポMeshFilter不要(内蔵)
BlendShape不可可(表情、変形)
処理コスト軽い重い(毎フレームスキニング)
GPU Instancing不可(標準では)

SRP(URP / HDRP)での扱い

Unity 2019.3+ では SRP(Scriptable Render Pipeline)が標準化されました。URP / HDRP では Built-in シェーダがそのままでは動かず、マテリアル変換が必要です:

  • Edit → Rendering → Materials → Convert Selected Built-in Materials to URP
  • シェーダ名: Standard → Universal Render Pipeline/Lit / HDRP/Lit
  • Mesh Renderer の Inspector 表記は同じだが、内部で SRP Batcher が効くため同 Shader 同 Keyword でドローコールが高速化

GPU Instancing

同じメッシュ+同じマテリアルを多数描画する場合(草、岩、敵兵団など)、GPU Instancing で 1 ドローコールにまとめられます:

  1. マテリアルの Inspector で Enable GPU Instancing にチェック
  2. シェーダが対応している必要あり(Standard / URP Lit / HDRP Lit は対応)
  3. 異なる色など MaterialPropertyBlock で per-instance データを渡せる
// インスタンスごとに色を変える例
void Start()
{
    var renderer = GetComponent();
    var props = new MaterialPropertyBlock();
    props.SetColor("_BaseColor", Random.ColorHSV());
    renderer.SetPropertyBlock(props);
}

Sorting Order と描画順

2D Sprite Renderer ほど直感的ではないが、Mesh Renderer にも Rendering Layer Mask / Sorting Layer / Order in Layer があり、Camera との組合せで描画順を制御します。半透明マテリアルの順番問題は renderQueue(Material.renderQueue)で対処することが多いです。

Frame Debugger でデバッグ

Window → Analysis → Frame Debugger。1 フレームをドローコール単位で再生し、各 Mesh Renderer がいつ・どのマテリアルで描かれたか確認できます:

  • SetPass call が多い → シェーダ切替が多すぎ → マテリアル統一
  • Batching 欄が "Batched" なら Static/Dynamic Batching 成功
  • GPU Instancing 欄で Instance Count を確認

FAQ

Q: Mesh Renderer を有効にしているのに見えない
A: ① MeshFilter にメッシュが入っているか、② Material が None でないか、③ カメラの Culling Mask にレイヤーが含まれているか、④ Material のシェーダが SRP に対応しているか、を順に確認。

Q: ピンク色(マゼンタ)で表示される
A: シェーダが壊れている、または SRP 不一致。URP プロジェクトで Standard シェーダを使うと出る典型症状。マテリアルのシェーダを Universal Render Pipeline/Lit に変更。

Q: 影だけ消したい
A: Lighting → Cast Shadows: Off。逆に「影だけ表示してオブジェクト自体は描かない」は Shadows Only

編集
Post Share
子ページ
  1. Skinned Mesh Renderer
同階層のページ
  1. Mesh FIlter
  2. Mesh Renderer