UnityのCast Shadows
とは?影の描画設定を徹底解説
Unity の Cast Shadows
は、オブジェクトが影を落とすかどうかを設定するプロパティ です。Mesh Renderer
や Skinned Mesh Renderer
に含まれており、ライトの影響を受けて影を生成するかどうかを制御します。
Cast Shadows
の設定オプション
Cast Shadows
には、以下の 4 つのオプションがあります。
設定値 | 説明 |
---|---|
On (デフォルト) | 常に影を落とす(リアルな環境向け) |
Off | 影を落とさない(パフォーマンス向上、UIや一部オブジェクト向け) |
Two Sided | 両面に影を落とす(ポリゴンの裏側からも影を作る) |
Shadows Only | オブジェクト自体は表示せず、影だけを表示 |
Cast Shadows
の使い分け
✅ 通常のオブジェクト(プレイヤー・建物・アイテム)
→ On
(デフォルト)でOK。自然な影を作れる。
✅ ガラスやエフェクトなど、影が不要なオブジェクト
→ Off
にすると影が消え、パフォーマンス向上。影がちらついたりしている場合に、消したりする(画像の場合、銃の影が銃の表面でちらついていたのでOff
にすることでちらつきをなくした。また、一人称視点のPlayerであるCapsuleの影が銃を暗くしていたのでそれをなくした。)
✅ 葉っぱや薄いオブジェクト(裏面からも影が必要な場合)
→ Two Sided
を選ぶと、薄いオブジェクトも正しく影を落とせる。
✅ 透明なオブジェクトの影だけを描画
→ Shadows Only
にすると、影だけを残してオブジェクトを非表示にできる。
Cast Shadows
の設定方法
① Unity エディタで設定
-
オブジェクトを選択(
Mesh Renderer
またはSkinned Mesh Renderer
がある) - Inspector で「Cast Shadows」オプションを変更
② スクリプトで設定
using UnityEngine;
public class ShadowControl : MonoBehaviour
{
void Start()
{
// Mesh Renderer を取得
MeshRenderer meshRenderer = GetComponent<MeshRenderer>();
// 影を落とす(デフォルト)
meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On;
// 影を落とさない
// meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
// 両面に影を落とす
// meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.TwoSided;
// 影だけを表示
// meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.ShadowsOnly;
}
}
Cast Shadows
を使う際の注意点
⚠️ 影を増やしすぎるとパフォーマンスに影響!
特にモバイルやVR環境では、影の描画は負荷が高いので、不要な影は Off
にするのが推奨。
⚠️ リアルタイムシャドウは負荷が高い
影をリアルタイムで描画すると処理が重くなるため、静的な影は「ベイクド(Baked Shadows)」を使うと軽量化できる。
まとめ
✅ Cast Shadows
はオブジェクトが影を落とすかどうかを制御する設定
✅ デフォルトは On
(影を落とす)だが、用途に応じて変更するとパフォーマンス向上
✅ スクリプトでも制御可能
✅ 影の計算は重いので、適切に設定することでゲームの最適化が可能!