using UnityEngine; namespace _Project.Scripts.LevelGenerating { [CreateAssetMenu(menuName = "Level/Room Light Config", fileName = "RoomLightConfig")] public class RoomLightConfig : ScriptableObject { [Header("Префаб")] public GameObject lightPrefab; [Header("Размещение")] [Min(0.5f)] public float spacing = 6f; public float ceilingDrop = 0f; public Vector3 rotationOffset = Vector3.zero; [Header("Параметры источника света")] public bool overrideLightParameters = true; public Color color = Color.white; [Min(0f)] public float intensity = 1.5f; [Min(0.1f)] public float range = 8f; public LightShadows shadows = LightShadows.None; [Header("Runtime Запекание (GPU Baker)")] [Tooltip("Запечь свет в текстуру _RuntimeLightmap при генерации комнаты")] public bool bakeToRuntimeLightmap = true; [Tooltip("Выключить компоненты Light после запекания (даёт огромный прирост FPS!)")] public bool disableRealtimeLightsAfterBake = true; [Tooltip("Разрешение текстуры света (128 или 256 идеально для мягкого света и не жрёт VRAM)")] public int lightmapResolution = 128; [Tooltip("Сила отражённого света от пола на потолок и стены (Indirect GI Bounce)")] [Range(0f, 2f)] public float ceilingBounceIntensity = 0.35f; [Tooltip("Минимальная базовая освещённость тёмных участков")] [Range(0f, 1f)] public float bakedAmbientIntensity = 0.08f; [Tooltip("Затенение в углах между стенами, полом и потолком (Ambient Occlusion)")] [Range(0f, 1f)] public float cornerAOStrength = 0.6f; } } /* . Блок «Размещение» (Сетка ламп в комнате) Spacing (по умолчанию 6): Расстояние между лампами в метрах. Если комната маленькая (например, 4x4 м) — поставится 1 лампа по центру. Если поставишь Spacing = 4, то в комнате 8x8 м появится сетка 2x2 (4 лампы). Ceiling Drop: На сколько метров ниже потолка висит префаб лампы (например, 0.1 или 0.3, чтобы моделька не проваливалась в потолок). Rotation Offset: Поворот префаба лампы (если вдруг у модели светильника конус света направлен не вниз). 2. Блок «Параметры источника света» (Яркость и конус самой лампы) Override Light Parameters: Если галочка стоит — цвет, яркость и радиус всех ламп в этой теме берутся из ползунков ниже. Если галочка снята — берутся те настройки (Spot Angle, Intensity, Color, Range), которые настроены прямо внутри твоего префаба лампы (lightPrefab). (Кстати, угол конуса Spot Angle всегда берётся из префаба лампы — захочешь сделать пятно на полу шире или уже, просто поменяй Spot Angle на самом префабе лампы!). Color / Intensity / Range: Цвет света, сила прямого луча (на пол) и дальность добивания света в метрах. 3. Блок «Runtime Запекание (GPU Baker)» (Самое вкусное!) Именно эти ползунки управляют тем, как запекается текстура _RuntimeLightmap: Bake To Runtime Lightmap (true): Включает/выключает сам запекатель для этой темы. Disable Realtime Lights After Bake (true): Выключает компоненты Light после запекания. Когда галочка стоит — реальные лампы не нагружают видеокарту вообще (0 мс на GPU!). Lightmap Resolution (по умолчанию 128): Разрешение текстуры света на каждую стену/пол (64, 128, 256, 512). Для мягкого света 128 или 256 — идеально и почти не тратит видеопамять GTX 1650. Ceiling Bounce Intensity (ползунок от 0 до 2, по умолчанию 0.35): Яркость стен и потолка! Это сила отражённого света (Indirect GI). Если стены или потолок кажутся темноватыми — подними до 0.6 – 1.0. Если хочешь мрачный хоррор, где виден только круг на полу от Spot-лампы, а стены тонут во мраке — убавь до 0.1 – 0.15. Baked Ambient Intensity (ползунок от 0 до 1, по умолчанию 0.08): Минимальная базовая подсветка самых дальних тёмных углов, куда вообще не достаёт радиус ламп (Range). Если хочешь полную темноту вдали от ламп — ставь 0 или 0.02. Corner AO Strength (ползунок от 0 до 1, по умолчанию 0.6): Сила затемнения в углах комнаты (на стыках между стенами, полом и потолком). На 0.7 – 0.85 даёт очень красивый объём, как будто в сцене включён дорогой SSAO. */