Version: 2021.3
言語: 日本語
Mesh Renderer コンポーネント
Mesh Filter コンポーネント

Skinned Mesh Renderer コンポーネント

Skinned Mesh Renderer コンポーネントは、可変 (deformable) のメッシュをレンダリングします。可変メッシュには、スキンされたメッシュ (ボーンとバインドポーズを持つメッシュ)、ブレンドシェイプを持つメッシュ、クロス (布) のシミュレーションを実行するメッシュが含まれます。

通常のメッシュをレンダリングする場合は、代わりに Mesh RendererMesh Filter を使用します。

可変のメッシュやそれを持つモデルをシーンに追加すると、Unity は生成されたゲームオブジェクトにSkinned Mesh Renderer コンポーネントを追加します。

C# コードでは、SkinnedMeshRenderer クラスは、Skinned Mesh Renderer コンポーネントを表します。SkinnedMeshRenderer クラスは、その機能の多くを Renderer クラスから継承しています。そのため、このコンポーネントは Renderer を継承する他のコンポーネント、例えば Line RendererTrail Renderer などと多くの共通点があります。

Skinned Mesh Renderer の可視性に関するトラブルシューティング

Unity はメッシュの境界を使用して、それをレンダリングするかどうかを決定します。メッシュのバウンディングボリューム全体がアクティブなカメラの視野の外側にあると、Unity はそのメッシュをレンダリングしません。

Skinned Mesh Renderer の場合、そのメッシュ境界は変形に伴って変化します。Unity はインポート時に存在するすべてのアニメーションを考慮して最大のバウンディングボリュームを計算し、この値を使用して可視性を決定します。ただし、インポート後に発生する以下の状況では、頂点やボーンが既知の最大境界の外に押し出される可能性があります。

  • アニメーションを追加する場合
  • ランタイムにスクリプトからボーンの位置を変更する場合
  • 頂点位置を変更する頂点シェーダーを使用する場合
  • ラグドールを使用する場合

頂点やボーンが境界の外に押し出されると、Unity がメッシュの可視性を正しく判断できず、表示されるべき時に表示されないことがあります。

このような場合は、以下のいずれかの解決策で問題を解決できます。

  • 境界を修正してメッシュの可能な最大のバウンディングボリュームに一致するように修正します。パフォーマンスの向上のために、可能であればこのオプションを使用してください。
  • Update When Offscreen を有効にします。これにより、Unity はメッシュが表示されないときでも、常にメッシュの境界を計算し続けます。パフォーマンスがあまり気にならない場合や、バウンディングボリュームのサイズを予測できない場合 (ラグドールを使用する場合など) にこのオプションを使用します。

Skinned Mesh Renderer Inspector リファレンス

Inspector ウィンドウに表示される Skinned Mesh Renderer コンポーネントです。
Inspector ウィンドウに表示される Skinned Mesh Renderer コンポーネントです。

A: プロパティ
B: Materials
C: Lighting
D: Probes
E: Additional Settings

プロパティ

プロパティ 説明 
Bounds Unity がメッシュをいつオフスクリーンにするかを決定するために使用するバウンディングボリュームを設定します。Unity はモデルファイルにメッシュとアニメーションをインポートするときに境界を事前計算し、シーンビューでモデルの周囲の境目をワイヤーフレームで表示します。

Update When Offscreen を True に設定すると、Unity はフレームごとにこれらの境界を再計算し、計算された値を使用してこのプロパティを上書きします。

このプロパティは Mesh.Bounds API に対応します。
BlendShapes メッシュに定義された ブレンドシェイプ に使用するウェイト値を保存します。
Quality 頂点に影響を与えることができるボーンの最大数のランタイムの上限を設定します。

Unity がメッシュをインポートするとき、Unity は 1 - 32 の数のボーンですべての頂点をスキンできます。影響力のあるボーン数が多いほど、動きの結果は向上します。ただし、これは必要な計算リソースも増加させるため、パフォーマンスに影響を与える可能性があります。

パフォーマンス上の理由から、ランタイムの上限を使用するのではなく、インポート時に頂点に影響を与えるボーン数を設定する方が良いでしょう。これを行うには、Model Import Settings ウィンドウ の Rig タブを使い、Skin Weights 設定を調整します。

この設定を使用してコンポーネントごとにランタイムの上限を設定するほかに、Edit > Project Settings > Quality > Other > Skin Weights でプロジェクトのグローバルの制限を設定することもできま す。

このプロパティは、SkinnedMeshRenderer.quality API に対応します。
Auto Quality Settings > Skin Weights で設定したグローバルの制限を使用します。

ノート: スキンウェイトのカスタム数をインポートし 5 つ以上のボーンに影響を与えたい場合は、このオプションを選択し Skin WeightsUnlimited に設定する必要があります。
1 Bone 1 つの頂点につき、1 つのボーンのみを使用します。
2 Bones 1 つの頂点につき、最大 2 つのボーンを使用します。
4 Bones 1 つの頂点につき、最大 4 つのボーンを使用します。5 つ以上のボーンが 1 つの頂点に影響を与えるようにするには、Auto 設定を使用します。
Update When Offscreen これを有効にすると、どのカメラからも見えない場合でも、すべてのフレームでバウンディングボリュームを計算します。このオプションを無効にすると、ゲームオブジェクトが画面上にないときにスキニングを停止し、ゲームオブジェクトが再び表示されるとスキニングを再開します。

これはパフォーマンス上の理由から、デフォルトでは無効になっています。

このプロパティはSkinnedMeshRenderer.updateWhenOffscreen API に対応します。
Mesh このレンダラーが使用するメッシュを設定します。メッシュは、有効なバインドポーズとスキンウェイトを含むか、ブレンドシェイプを使用するか、クロス (布) のシミュレーションを実行する必要があります。メッシュがこれらの技術を使用しない場合は、Mesh Renderer と Mesh Filter の使用を検討してください。

SkinnedMeshRenderer.sharedMesh プロパティに対応します。
Root bone スケルトンの “ルート” であるトランスフォームを設定します。境界線はこのトランスフォームに沿って動きます。
Rendering Layer Mask このプロパティは、このレンダラーが割り当てられるレンダリングレイヤーを決定します。このプロパティを使用して、レンダリング固有のレイヤーマスクを追加で指定できます。これにより、レンダラーが持つマスクに基づいてレンダラーがフィルタリングされます。

このプロパティは、Renderer.renderingLayerMask API に対応します。

Unity は、Scriptable Render Pipeline を使用する場合にのみ、このプロパティを表示します。
Renderer Priority レンダラーを優先度でソートします。低い値が最初に描画され、高い値が最後に描画されます。

このプロパティは、Renderer.rendererPriority API に対応します。

Unity は、HD レンダーパイプラインを使用する場合にのみ、このプロパティを表示します。

Materials

Materials セクション、Mesh Renderer
Materials セクション、Mesh Renderer

Materials セクションには、このコンポーネントが使用するすべての マテリアル が列挙されています。

プロパティ 説明
Size マテリアルリストの要素数です。

要素数を減らすと、リストの末尾にある要素が削除されます。要素数を増やすと、リストの末尾に新しい要素が追加されます。新しい要素には、リストの末尾にある要素が使用しているマテリアルと同じマテリアルが使用されます。
Element リスト内のマテリアル。各要素にマテリアルアセットを割り当てることができます。

デフォルトでは、Unity はマテリアルの名前に基づいて、リストをアルファベット順に並べます。このリストは順序を変更することができ、順序を変更すると Unity は自動的に要素の番号を更新します。

ノート: サブメッシュの数よりもマテリアルの数が多い場合、Unity は最後のサブメッシュを残っている各マテリアルでレンダリングし、1 つずつ重ねていきます。マテリアルが完全に不透明でない場合、さまざまなマテリアルを重ねて、興味深い視覚効果を作成できます。ただし、完全に不透明なマテリアルは前のレイヤーを上書きします。そのため、Unity が最後のサブメッシュに不透明なマテリアルを加えると、パフォーマンスに悪い影響があり、メリットがありません。

Lighting

Lighting セクションには、ライティングに関連するプロパティを含まれています。

プロパティ 説明
Cast Shadows このレンダラーが、適切な Light に照らされるときに影を作るかどうか、また影を作る方法を指定します。

このプロパティは Renderer.shadowCastingMode API に対応します。
On このレンダラーは、影を投影するライトが当たるときに影を投影します。
Off このレンダラーは、影を作りません。
Two-sided このレンダラーは 2 面の影を作ります。つまり、平面や四角形のような片面オブジェクトは、光源がメッシュの背後にある場合でも、影を落とすことができます。

ベイクしたグローバルイルミネーション または Enlighten リアルタイムグローバルイルミネーション が両面シャドウをサポートするためには、マテリアルが Double Sided Global Illumination をサポートする必要があります。
Shadows Only このレンダラーは影を作りますが、レンダラー自体は可視ではありません。
Receive Shadows このレンダラーに投影された影を表示するかどうかを指定します。

このプロパティは、このシーンで Baked Global Illumination または Enlighten Realtime Global Illumination を有効にする場合にのみ、効果があります。

このプロパティは、Renderer.receiveShadows API に対応します。
Contribute Global Illumination ベイク時に行われるグローバルイルミネーションの計算に、このレンダラーを加えます。

このプロパティは、このシーンで Baked Global Illumination または Enlighten Realtime Global Illumination を有効にした場合にのみ、効果があります。

このプロパティを有効にすると、ゲームオブジェクトの Static エディターフラグ にある Contribute GI フラグが有効になります。これは、StaticEditorFlags.ContributeGI APIに対応します。
Receive Global Illumination Unity が、ベイクされたライトマップから、またはランタイムのライトプローブから、このレンダラーにグローバルイルミネーションデータを提供するかどうかを指定します。

このプロパティは、Contribute Global Illumination を有効にした場合にのみ編集可能です。このシーンに対して Baked Global Illumination または Enlighten Realtime Global Illumination を有効にした場合にのみ、効果があります。

このプロパティは、MeshRenderer.receiveGI API に対応します。
Lightmaps Unity は、ライトマップからこのレンダラーにグローバルイルミネーションデータを提供します。
Light Probes Unity はシーン内の Light Probes からこのレンダラーにグローバルなイルミネーションデータを提供します。
Prioritize Illumination このプロパティを有効にすると、Enlighten リアルタイムグローバルイルミネーションの計算にこのレンダラーが常に含まれるようになります。これにより、パフォーマンス上の理由から通常グローバルイルミネーションの計算から除外されるものであっても、レンダラーが遠くのエミッシブの影響を受けることが保証されます。

このプロパティは、Contribute GI がゲームオブジェクトの Static エディターフラグ で有効になっており、プロジェクトがビルトインレンダーパイプラインを使用し、Enlighten Realtime Global Illumination がシーンで有効になっている場合にのみ表示されま す。

Probes

Probes セクションには、ライトプローブリフレクションプローブ に関するプロパティが含まれています。

プロパティ 説明
Light Probes このレンダラーが ライトプローブ システムから、ライトを受ける方法を設定します。

このプロパティは、Renderer.lightProbeUsage APIに対応します。
Off レンダラーは補間されたライトプローブを使用しません。
Blend Probes レンダラーは補間されたライトプローブを 1 つ使用します。これはデフォルトです。
Use Proxy Volume レンダラーは、補間されたライトプローブの 3D グリッドを使用します。
Custom Provided レンダラーは Light Probe シェーダーの統一値を MaterialPropertyBlock から抽出します。
Proxy Volume Override Light Probe Proxy Volume コンポーネントを持つ別のゲームオブジェクトへの参照を設定します。

このプロパティは、Light ProbesUse Proxy Volume に設定される場合にのみ表示されます。
Reflection Probes レンダラーが リフレクションプローブ システムからどのようにリフレクションを受けるかを設定します。

このプロパティは Renderer.probeAnchor API に対応します。
Off リフレクションプローブを無効にします。Unity はリフレクションにスカイボックスを使用します。
Blend Probes Reflection Probes を有効にします。ブレンドはリフレクションプローブ間のみで発生します。これは、キャラクターが異なるライティング設定のエリア間を移動する可能性がある屋内環境で便利です。
Blend Probes and Skybox リフレクションプローブを有効にします。ブレンドは、リフレクションプローブ間、または、リフレクションプローブとデフォルトのリフレクションとの間で行われます。これは、屋外環境に便利です。
Simple リフレクションプローブを有効にしますが、2 つのボリュームが重なっている場合、リフレクションプローブ間のブレンドは行われません。
Anchor Override ライトプローブ または リフレクションプローブ システムを使用するときに、Unity が補間位置を決定するために使用する Transform を設定します。デフォルトでは、レンダラーのジオメトリのバウンディングボックスの中心です。

このプロパティは、Renderer.probeAnchor API に対応します。

Additional Settings

Additional Settings には付加的なプロパティが含まれています。

プロパティ 説明
Skinned Motion Vectors これを有効にすると、メッシュのスキンデータをダブルバッファにします。そのため、Unity はスキンしたモーションを補間し、モーションベクトルテクスチャにそれを置くことができます。これは、より多くの GPU メモリを使用しますが、より正確なモーションベクトルになります。
Dynamic Occlusion これを有効にすると、静的遮蔽物 (Static Occluder) によってカメラのビューから隠されると、Unity はこのレンダリング対象オブジェクトをカリングし (除き) ます。これが無効になっている場合、このレンダリング対象オブジェクトが静的遮蔽物によってカメラのビューから隠されている場合、Unity はこのオブジェクトをカリングしません。

動的オクルージョンはデフォルトで有効になっています。壁の後ろにキャラクターの輪郭を描くなどの効果を出すには無効にします。
Mesh Renderer コンポーネント
Mesh Filter コンポーネント