本文へ移動
cccskills
無料GitHub で公開

unity-lighting-vfx

Unity 6 lighting and visual effects guide. Use when working with lights, baked/realtime/mixed lighting, light probes, reflection probes, Adaptive Probe Volumes (APV), global illumination, Particle System, VFX Graph, or post-processing effects. Based on Unity 6.3 LTS documentation.

インストール方法を見る

含まれるファイル(4)

  • SKILL.md18.3 KB
  • references/lighting-guide.md17.8 KB
  • references/particle-system.md17.3 KB
  • references/vfx-graph.md15.8 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Unity Lighting and Visual Effects

Lighting Modes

Unity provides three light modes controlling how illumination is calculated.

Realtime Lights

  • Calculate lighting every frame at runtime
  • Allow dynamic changes to intensity, color, position
  • Cast shadows up to Shadow Distance
  • Contribute only direct lighting by default (no bounced light)
  • Higher runtime cost, especially in complex scenes or low-end hardware
  • Best for: dynamic objects, flickering effects, moving light sources

Baked Lights

  • Calculations performed in the Unity Editor and saved as lighting data to disk
  • At runtime, Unity loads pre-computed data instead of calculating dynamically
  • Bake both direct and indirect lighting into lightmaps
  • Store information in Light Probes for moving objects
  • Cannot modify light properties at runtime; do not illuminate dynamic GameObjects
  • No specular contributions
  • Best for: static scenery, complex indirect lighting, performance-critical scenarios

Mixed Lights

  • Combine baked indirect lighting with real-time direct lighting
  • Behavior depends on the Lighting Mode setting in the Lighting window
  • Cast real-time shadows (not baked soft shadows)
  • Can change properties at runtime (affects real-time component only)
  • Always more expensive than fully baked lighting
  • Best for: dynamic shadows with baked background lighting

Important: All baked/mixed modes require Baked Global Illumination enabled. Without it, Mixed and Baked lights behave as Realtime.

Light Types

Directional Light

  • Located infinitely far away, emits light in one direction
  • Parallel rays, no distance-based intensity falloff
  • Simulates sun/moon; every new scene includes one by default
  • Links to procedural sky system; rotate to create time-of-day effects

Point Light

  • Located at a point, emits in all directions equally
  • Intensity follows inverse square law (diminishes with distance squared)
  • Use for lamps, explosions, local illumination

Spot Light

  • Located at a point, emits in a cone shape
  • Adjustable cone angle; light diminishes at edges (penumbra)
  • Wider angles create larger fade areas
  • Use for flashlights, headlights, searchlights

Area Light

  • Defined by a rectangle or disc; emits uniformly across surface
  • Follows inverse square law; produces soft, subtle shading
  • Bake-only -- not available at runtime
  • Use for street lights, realistic interior lighting

Global Illumination

Global illumination (GI) simulates how light bounces between surfaces, producing realistic indirect lighting.

Baked GI

  • Pre-computes indirect lighting into lightmaps using the Progressive Lightmapper (CPU or GPU)
  • Results stored in lightmap textures and Light Probes
  • Configure in the Lighting window under Bake settings
  • GPU Progressive Lightmapper offers faster bake times with configurable tile sizes

Environment Lighting

Three ambient light sources configured in the Lighting window Environment tab:

  • Skybox: Uses skybox material colors for ambient light from different angles
  • Gradient: Separate sky, horizon, and ground colors with smooth blending
  • Color: Uniform ambient light across the scene

Intensity Multiplier (0-8, default 1) controls ambient brightness.

Environment Reflections

  • Source: Skybox or custom Cubemap/RenderTexture
  • Configurable resolution, compression, intensity multiplier
  • Bounces setting controls reflection evaluation iterations between objects

Light Probes and Adaptive Probe Volumes

Light Probes

  • Capture lighting information in empty space throughout a scene
  • At runtime, indirect lighting for dynamic GameObjects is approximated using nearest probes
  • Provide indirect bounced light for moving objects and LOD system support
  • Must be manually placed using Light Probe Groups
  • Store baked lighting information; work with both direct and indirect lighting

Adaptive Probe Volumes (APV)

APV is the modern replacement for manual Light Probe placement in URP:

  • Automated probe placement -- eliminates manual Light Probe Group positioning
  • Per-pixel lighting -- superior quality compared to per-object approaches
  • Scene baking -- bake multiple scenes together using Baking Sets
  • Runtime adjustments -- Lighting Scenarios and sky occlusion for dynamic changes
  • Large-world support -- streaming data for expansive open-world environments
  • Data flexibility -- loading from AssetBundles or Addressables
  • Configurable probe density and volume size with visualization tools

Reflection Probes

Capture a spherical view of surroundings as a cubemap for reflective materials.

Types

TypeDescription
BakedCaptures static GameObjects only; best performance
CustomAllows dynamic object capture with custom textures
RealtimeUpdates during gameplay; configurable refresh mode

Key Properties

  • Importance: Rendering priority when multiple probes overlap
  • Intensity: Texture brightness in shader calculations
  • Box Projection: Enables projection mapping for interiors (requires URP config)
  • Box Size/Offset: World-space bounding box for reflection contribution
  • Blend Distance: Blending distance for deferred probes

Realtime Options

  • Refresh Mode: On Awake, Every Frame, or Via Scripting
  • Time Slicing: All Faces At Once, Individual Faces, No Time Slicing

Particle System vs VFX Graph

FeatureParticle SystemVFX Graph
SimulationCPU-basedGPU-based
Particle countThousandsMillions
Render pipelineAll pipelinesURP/HDRP only
AuthoringInspector modulesNode-based graph editor
PhysicsBuilt-in collisionCustom collision blocks
ScriptingFull C# APIEvent-based C# API
Sub-emittersNative supportGPU Event contexts
Best forSmall/medium effects, mobileLarge-scale effects, high-end

Decision Guide:

  • Use Particle System for mobile targets, simple effects, when you need full CPU-side scripting control, or when targeting the Built-in Render Pipeline
  • Use VFX Graph for massive particle counts, GPU-driven simulations, complex node-based authoring, or high-end platforms with URP/HDRP

Particle System Modules

ModulePurpose
MainInitial state: lifetime, speed, size, gravity, simulation space
EmissionRate and timing of particle spawns
ShapeVolume/surface for emission and start velocity direction
Velocity over LifetimeModify movement over particle age
NoiseTurbulence for organic, chaotic motion
Limit Velocity over LifetimeNatural deceleration
Force over LifetimeSimulated physics forces
Inherit VelocitySub-emitter particles match parent velocity
Lifetime by Emitter SpeedAdjust lifespan based on emitter velocity
Color over Lifetime / by SpeedColor changes based on age or velocity
Size over Lifetime / by SpeedDimension changes based on time or speed
Rotation over Lifetime / by SpeedOrientation changes
CollisionParticle collisions with scene geometry
TriggersDesignate particles as collision triggers
Sub EmittersParticles that emit other particles
Texture Sheet AnimationTexture grid animation frames
TrailsMotion trail rendering
LightsReal-time lights on particles
External ForcesWind zones and force fields
RendererImage/mesh transform, shading, overdraw
Custom DataAttach custom data to particles

VFX Graph Basics

Systems

  1. Spawn System: Single Spawn Context managing emission
  2. Particle System: Initialize -> Update -> Output succession
  3. Mesh Output System: Single Mesh Output Context

Contexts

  • Spawn: Executes each frame to calculate spawn amounts. States: Running, Idle, Waiting. Configurable loop duration, count, and delays
  • Initialize: Runs at particle birth, sets initial state. Processes Blocks for newly spawned particles. Configurable bounds and capacity
  • Update: Per-frame for all living particles. Automatic: position integration, rotation integration, aging, reaping
  • Output: Renders particles (Quad, Mesh, etc.). No output ports. Customizable rendering blocks

Graph Elements

  • Blocks: Stackable nodes within Contexts; each handles one operation; top-to-bottom execution
  • Operators: Low-level property workflow nodes connecting to Block/Context ports
  • Properties: Connectable via property workflow
  • Settings: Non-connectable editable values per Context

GPU Events

Experimental feature where GPU computes events (vs CPU for normal events). Cannot be customized with Blocks.

Common Patterns (C#)

Create and Configure a Light

using UnityEngine;

public class LightSetup : MonoBehaviour
{
    void Start()
    {
        GameObject lightObj = new GameObject("Dynamic Light");
        Light light = lightObj.AddComponent<Light>();
        light.type = LightType.Point;
        light.color = Color.yellow;
        light.intensity = 2.0f;
        light.range = 15f;
        light.shadows = LightShadows.Soft;
        light.shadowResolution = UnityEngine.Rendering.LightShadowResolution.Medium;
    }
}

Create a Realtime Reflection Probe

using UnityEngine;
using UnityEngine.Rendering;

public class ProbeSetup : MonoBehaviour
{
    void Start()
    {
        GameObject probeObj = new GameObject("Realtime Reflection Probe");
        ReflectionProbe probe = probeObj.AddComponent<ReflectionProbe>();
        probe.size = new Vector3(10, 10, 10);
        probe.mode = ReflectionProbeMode.Realtime;
        probe.refreshMode = ReflectionProbeRefreshMode.EveryFrame;
        probe.resolution = 256;
        probe.hdr = true;
    }
}

Control Particle System at Runtime

using UnityEngine;

public class ParticleController : MonoBehaviour
{
    ParticleSystem ps;

    void Start()
    {
        ps = GetComponent<ParticleSystem>();

        // Modify emission rate -- cache module in local variable first
        var emission = ps.emission;
        emission.rateOverTimeMultiplier = 50f;

        // Modify main module
        var main = ps.main;
        main.startLifetime = 3f;
        main.startSpeed = 5f;
        main.simulationSpace = ParticleSystemSimulationSpace.World;
    }

    void OnTriggerEnter(Collider other)
    {
        // Burst emit particles
        ps.Emit(100);
    }

    void OnDisable()
    {
        ps.Stop(true, ParticleSystemStopBehavior.StopEmittingAndClear);
    }
}

VFX Graph Runtime Control

using UnityEngine;
using UnityEngine.VFX;

public class VFXController : MonoBehaviour
{
    VisualEffect vfx;
    VFXEventAttribute eventAttr;

    void Start()
    {
        vfx = GetComponent<VisualEffect>();
        eventAttr = vfx.CreateVFXEventAttribute();

        // Set exposed properties
        vfx.SetFloat("SpawnRate", 100f);
        vfx.SetVector3("Direction", Vector3.up);
        vfx.playRate = 1.5f;
    }

    void OnTriggerEnter(Collider other)
    {
        // Send custom event with attributes
        eventAttr.SetVector3("position", other.transform.position);
        vfx.SendEvent("OnHit", eventAttr);
    }

    public void StopEffect()
    {
        vfx.Stop();
    }
}

Refresh Reflection Probe on Demand

using UnityEngine;

public class ProbeRefresher : MonoBehaviour
{
    ReflectionProbe probe;

    void Start()
    {
        probe = GetComponent<ReflectionProbe>();
        probe.refreshMode = UnityEngine.Rendering.ReflectionProbeRefreshMode.ViaScripting;
    }

    public void RefreshReflections()
    {
        probe.RenderProbe();
    }

    public bool IsReady()
    {
        return probe.IsFinishedRendering(probe.RenderProbe());
    }
}

Anti-Patterns

Lighting Anti-Patterns

  1. Too many Realtime lights: Each realtime light adds per-frame cost. Use Baked or Mixed for static lights
  2. Forgetting to enable Baked Global Illumination: Mixed/Baked lights silently fall back to Realtime without it
  3. Overlapping Reflection Probes without Importance values: Causes flickering; always set Importance to establish priority
  4. Using Area Lights expecting runtime behavior: Area lights are bake-only; they produce no light at runtime
  5. Ignoring Indirect Multiplier: Leaving at default can cause over-bright or too-dark bounced light; tune per light
  6. Not setting Shadow Bias correctly: Too low causes self-shadowing artifacts (shadow acne); too high causes peter-panning (shadows detach from objects)
  7. Manual Light Probe placement in large scenes: Use Adaptive Probe Volumes (APV) in URP instead for automated, per-pixel quality

Particle System Anti-Patterns

  1. Not caching module references: Each property access on a module struct immediately writes to native code; cache the module variable
  2. Using World simulation space for attached effects: Particles drift away from moving parents; use Local space for attached FX
  3. Excessive particle counts on CPU: Particle System is CPU-bound; for >10K particles, consider VFX Graph
  4. Forgetting to Stop/Clear: Leaked particle systems consume CPU even when invisible

VFX Graph Anti-Patterns

  1. Using VFX Graph for simple effects on mobile: GPU overhead and URP/HDRP requirement make it overkill for simple mobile effects
  2. Not setting Capacity in Initialize: Default capacity may allocate too much or too little GPU memory
  3. Ignoring Bounds: Incorrect bounds cause effects to be culled when visible; always configure bounds in Initialize context
  4. Sending events every frame without throttling: SendEvent has CPU-GPU sync cost; batch or throttle event dispatch

Key API Quick Reference

Light (UnityEngine.Light)

MemberTypeDescription
typePropertyLightType (Directional, Point, Spot, Area)
colorPropertyEmitted light color
intensityPropertyBrightness multiplier
rangePropertyMax distance (Point/Spot)
spotAngle / innerSpotAnglePropertyOuter/inner cone angles
shadowsPropertyLightShadows (None, Hard, Soft)
shadowResolutionPropertyShadow map quality
shadowBias / shadowNormalBiasPropertyShadow artifact reduction
bounceIntensityPropertyGI bounce strength
cookiePropertyProjected texture mask
cullingMaskPropertyLayer-based filtering
colorTemperaturePropertyCCT in Kelvin
lightmapBakeTypePropertyBaking configuration
bakingOutputPropertyLast bake contribution details
AddCommandBuffer()MethodExecute GPU commands at specified points

ParticleSystem (UnityEngine.ParticleSystem)

MemberTypeDescription
main / emission / shapePropertyModule access structs
particleCountPropertyCurrent active particles
isPlaying / isPaused / isStoppedPropertyPlayback state
Play() / Pause() / Stop()MethodPlayback control
Emit(count)MethodImmediate particle spawn
Simulate(time)MethodFast-forward simulation
GetParticles() / SetParticles()MethodDirect particle data access
Clear()MethodRemove all particles
TriggerSubEmitter()MethodActivate sub-emitters

VisualEffect (UnityEngine.VFX.VisualEffect)

MemberTypeDescription
visualEffectAssetPropertyAssign/change effect graph
playRatePropertySimulation speed
aliveParticleCountPropertyActive particle count
Play() / Stop() / Reinit()MethodPlayback control
SendEvent(name, attr)MethodTrigger graph events
CreateVFXEventAttribute()MethodCreate event payload
SetFloat() / SetVector3() / etc.MethodSet exposed properties
GetFloat() / GetVector3() / etc.MethodRead exposed properties
HasFloat() / HasVector3() / etc.MethodCheck property existence
ResetOverride(property)MethodRestore original values

ReflectionProbe (UnityEngine.ReflectionProbe)

MemberTypeDescription
modePropertyBaked/Custom/Realtime
size / centerPropertyBounding box config
intensity / importancePropertyBrightness and priority
boxProjectionPropertyEnable box projection
refreshMode / timeSlicingModePropertyRealtime update config
RenderProbe()MethodForce cubemap refresh
IsFinishedRendering()MethodCheck time-sliced completion
BlendCubemap()MethodBlend two cubemaps

Related Skills

  • unity-graphics -- Render pipelines (URP/HDRP/Built-in), shaders, materials, cameras
  • unity-2d -- 2D lighting (URP 2D Renderer), sprite rendering
  • unity-platforms -- Platform-specific lighting quality tiers, mobile optimization

Additional Resources

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

adopt

無料

Brownfield onboarding — audits existing project artifacts for template format compliance (not just existence), classifies gaps by impact, and produces a numbered migration plan. Run this when joining an in-progress project or upgrading from an older template version. Distinct from /project-stage-detect (which checks what exists) — this checks whether what exists will actually work with the template's skills.

日本語の概要は準備中です。原文の説明を表示しています。

IdoCohen560/claude-unity-game-studio222026年7月8日 更新

Creates an Architecture Decision Record (ADR) documenting a significant technical decision, its context, alternatives considered, and consequences. Every major technical choice should have an ADR.

日本語の概要は準備中です。原文の説明を表示しています。

IdoCohen560/claude-unity-game-studio222026年7月8日 更新

Validates completeness and consistency of the project architecture against all GDDs. Builds a traceability matrix mapping every GDD technical requirement to ADRs, identifies coverage gaps, detects cross-ADR conflicts, verifies engine compatibility consistency across all decisions, and produces a PASS/CONCERNS/FAIL verdict. The architecture equivalent of /design-review.

日本語の概要は準備中です。原文の説明を表示しています。

IdoCohen560/claude-unity-game-studio222026年7月8日 更新

art-bible

無料

Guided, section-by-section Art Bible authoring. Creates the visual identity specification that gates all asset production. Run after /brainstorm is approved and before /map-systems or any GDD authoring begins.

日本語の概要は準備中です。原文の説明を表示しています。

IdoCohen560/claude-unity-game-studio222026年7月8日 更新

Audits game assets for compliance with naming conventions, file size budgets, format standards, and pipeline requirements. Identifies orphaned assets, missing references, and standard violations.

日本語の概要は準備中です。原文の説明を表示しています。

IdoCohen560/claude-unity-game-studio222026年7月8日 更新

Generate per-asset visual specifications and AI generation prompts from GDDs, level docs, or character profiles. Produces structured spec files and updates the master asset manifest. Run after art bible and GDD/level design are approved, before production begins.

日本語の概要は準備中です。原文の説明を表示しています。

IdoCohen560/claude-unity-game-studio222026年7月8日 更新

IdoCohen560 のスキルをすべて見る

このスキルの問題を報告する