Запекание света

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску

Запекание света — это древняя, как экскременты мамонта, и священная, как первая Half-Life, технология, позволяющая игорям не тормозить на твоем калькуляторе. Суть ее сводится к тому, чтобы заранее, еще до того, как хомячок запустит игру, просчитать все тени и блики, а потом намертво «впечатать» их в текстуры. В результате твой GPU вместо того, чтобы в реальном времени корпеть над каждым лучиком, просто показывает уже готовую картинку. Просто, дешево и сердито. Идеально для тех, кто до сих пор верит, что 30 FPS — это «кинематографично».

Шаманство с текстурами[править]

Анонимус, представь, что ты — бог-демиург своего собственного мирка в Unreal Engine. Ты расставил лампочки, повесил солнце, но если оставить все как есть, то даже топовая видеокарта завоет от натуги, пытаясь обсчитать весь этот праздник фотонов в реальном времени. Тут-то на помощь и приходит запекание. Эта технология, известная еще динозаврам геймдева, позволяет взять всю информацию об освещении и тенях и хитро запихнуть ее в отдельные каналы текстуры. И не надо тут умничать, что это «запекание теней». Это именно запекание всего света, потому что, как подсказывает нам Капитан Очевидность, тень — это, по сути, всего лишь отсутствие света. Просчитывается всё и сразу: где светло, где темно, где полутень от колонны, которую ты так криво поставил.

Эта магия работает уже давно и до сих пор используется в овердофига играх, потому что позволяет добиться красивой картинки без тотального геноцида производительности.

Развёртка: Когда твой 3D-стул превращают в выкройку[править]

Чтобы понять, как свет «ложится» на объект, нужно сначала понять, что такое развёртка (или, как говорят в приличных домах, UV mapping). У каждого полигонального меша, будь то футуристичное кресло или сраный куб, есть эта самая развёртка. Это, по сути, двухмерное представление его трёхмерной поверхности, как если бы ты аккуратно разрезал и разложил на столе шкурку от апельсина. Каждая вершинка (вертекс) 3D-модели получает свои координаты на этой плоской карте. Именно по этим координатам движок понимает, какой кусок текстуры на какой полигон натягивать. Это похоже на выкройку для шитья: у тебя есть плоский кусок ткани (текстура) и лекала (развёртка), по которым ты кроишь и сшиваешь объемную вещь (3D-модель).

И вот на такую же разложенную на плоскости «выкройку» объекта движок и начинает рисовать информацию об освещенности. Вместо цветастой текстурки кожи для кресла он создает так называемую лайтмапу (lightmap) — карту света.

Лайтмапы: Тени, которые не пересекаются[править]

А вот тут начинается самое интересное и полное ограничений. Главное отличие развертки для лайтмапы от обычной текстурной развертки в том, что ее элементы категорически не должны пересекаться. Если при текстурировании какой-нибудь растительности ты можешь взять один и тот же кусочек текстуры листика и наложить его на сто разных полигонов, экономя место, то со светом такой финт не пройдет. Каждый листочек, каждая веточка твоего куста освещается по-своему, под своим уникальным углом, а значит, и информация о свете для каждого полигона должна быть уникальной. Если на развертке два полигона будут лежать друг на друге, движок сойдет с ума, пытаясь понять, какую тень на них рисовать, и выдаст графический артефакт, от которого у эпилептика случится припадок. Поэтому для лайтмап создается отдельная, уникальная развертка, где каждый полигончик занимает свое, ни с кем не делимое место. PROFIT? Нет, сплошные страдания и долгое ожидание пересчета.

Почему нельзя просто так взять и добавить лампочку[править]

Думал, на этом боль заканчивается? Как бы не так. Главная засада запекания света — это жесткое ограничение на количество источников света. Поскольку информация о свете записывается в каналы стандартной текстуры, мы упираемся в их количество. В нашем распоряжении обычно четыре канала: красный (R), зеленый (G), синий (B) и альфа-канал (A). Соответственно, в одной точке пространства движок может запечь свет только от четырех пересекающихся источников.

Хочешь поставить пятую лампочку, чтобы осветить тот темный угол? А вот хрен тебе. Движок вежливо покажет на этом источнике света красный крестик позора и напишет в логах что-то вроде:

Preview lighting build failed. Failed to allocate shadowmap channel. For stationary light due to overlap — light will fall back to dynamic shadows!

Это означает, что для твоей пятой лампочки не нашлось свободного канала, и она будет работать в динамическом режиме, то есть обсчитываться в реальном времени, сводя на нет всю идею оптимизации. Таким образом, вся сцена превращается в головоломку: как четырьмя лампочками осветить всё, что нужно, и не вызвать гнев движка.

В итоге вся сложная световая картина сцены, включая свет от солнца (Directional Light) и нескольких точечных лампочек (Point Light), сжимается в одну невзрачную текстурку. Если посмотреть на нее по каналам, можно увидеть, как в красный канал записана тень от солнца, в зеленый — от одной лампочки, в синий — от другой, и так далее. Эти черно-белые маски и есть вся информация о свете и тени на уровне. Движок просто смешивает их с основными текстурами, и вуаля — у тебя есть статичное, но дешевое освещение. Двигать такие «запеченные» источники света в игре, само собой, нельзя — они намертво впечатаны в геометрию. Хочешь подвинуть — добро пожаловать на новый многочасовой круг ада под названием «перезапекание света». Технологии, которые мы заслужили.

Telepuz 2.jpg Человек нонче игры разные ценит весьма, дык
МетаRPGИгровая консольШтампы в компьютерных играхИгровой движокТиммейтМассовый запрет игровых видео на YouTubeРейтыАгроWarcraft III — не канонАвтокликерДонат в игры из РоссииАрхидьявол (Герои 3)Лесные тени (Герои 3)Это собака?Blizzard измеряет соцсправедливостьЭто игра?Дроп (видеоигры)Надо, чтобы на КЧ напалПол это лаваКоллекционная играШахматная доскаВизуальная новеллаКонсольТяжёлые танки (World of Tanks)САУФлеш-игрыЛёгкие танки (World of Tanks)Консоле-холопыСредние танки (World of Tanks)Кризис переводов современных видеоигрКомпьютерное зрениеТокенОтсутствие МефистоБоязнь женской грудиSteam для пиратовБонусЗахват движенияВырезанный контентПазлЗаконы жанраA-Life 2.0Red Dead RedemptionDxvkVkd3dСэм ХаузерClaw EngineCuckpointMi hermano no estáO3DEВыбор зомбиЧувак (Postal)Евгений ГришаковКрипыBaba YetuWarhammerСписок персонажей Sword Art OnlineГовноигрыБронечайка (Гвинт)ShovelwareШахматный рендерингDirectStorageAdventureЭкшн-триллерШутерыШутерыCRPGRTSTBS
ЯвленияЖульничество в шахматахРусская кибердеревняОткрытый мирКастомизация персонажаElden Ring против The Witcher 3ПапкаDarksiders GenesisЧекпоинтCheat EngineРед (персонаж)Speedrun.comМоей сестры нетЕврейские корни BioshockМитаСтиль миллениаловFextralifeДжонатан РоджерсМетание шахмат в оппонентаСломанная механикаПрокачкаПешкаЗемля свободныхФарм клоуновБольшая чёрная светящаяся сфераВойдзонаТень ОробиссаРаспуджовкаWho's Lila?Убийство АрхимондаПочему не ВайперНейтан ДрейкR.G. МеханикиГенеральский эффектОгромный боссЭпоха ремейковАлексей Воктаков (Катков)Травля Илона Маска псевдогеймерамиААА-игрыОптимизацияТройная буферизацияRTXSpeedrunБетрезенПацификаАльваро КалметTerminals.ioCs.rin.ruGaiminВайфугеймКвадратные кроссвордыПочему титаны слишком большого размера? (Хроники Хаоса)Души тьмыSegaФоллаут-онлайнГейлендКамень, ножницы, бумагаBASKACombats.ruАббревиатуры имени МедоксаОлег СтавицкийМобильные игрыАвтобаттлерОнлайн-игрыMOBABeat 'em upСкурвившиеся игрыТанки free-to-playZumaLuxorТапалки в ТелеграмеGLaDOSХейтеры про Ведьмак 3Деградация Equestria at WarDirectXValveБезумная сложностьСложностьМинусы Ведьмака 3The Elder Scrolls Travels: Oblivion (PSP)Найди невидимую коровуMindsEyeДизлайк из Бравл Старс
ЭпическоеНайди отличияУльтаГриферыКрестики-ноликиДонатная помойкаМультиплеерГамблингАзартные игрыСеранаArdub92СасикSupermassive GamesСтарый богХагги ВаггиИл-2Шахматная партияВнутриигровая валютаГриндилкаКатсценаБэктрекингГлорхМясной жукВидениеRMTEMPRESSМемные карточки ХСЕкатерина СтадниковаЦарь Соломон и шахматыМасонские шахматыАвтошахматыСигма-гармонайзерЧёрная стражаTeam SpiritНиколай АрмоникБойкот лаунчеровАвтохукБуст аккаунта в ДотеДота как медитацияWraith KingFFAДмитрий РоммельДэвид МайерсБагоюзерствоАчивкаВетераны ВОВРуслан ДиденкоМоршуОлег ЯворскийЧерноруссияRagDollСаня ТропинGiboSteam MachinesЭльф-торговецHD-изданиеИнди-хитыМидирGrimtoolsИгра в настольные игрыМетарабыПавел БурзаNetHackГюнтер о'ДимКирилл Баранов (Пятёрка)FunpayКанобуТюрягаРенфриКастомизация оружияГенератор случайных чиселDisable Core 0HvHРомхакингИгры из репозиториевProton GEМегатекстураPS4-Fake-PKG-ToolsВидеоигры про АстериксаОказуаливаниеThe SinПовестка SJWКартриджи для восьмибитки от NintendoStop Killing GamesSmekta: The Game7LauncherИнди-клише
ЛегендарноеТактические шутерыВиртономикаE3Настольные ролевые игрыМеркиSonyChris-chanSourceНастольная играГнилецБорьба с задницей ТрейсераКамбиВпук Дагона на рядДагон на токенахКотовухаБерашна а, бегашийна аДелает ли прокачка титана его сильнее или слабее? (Хроники Хаоса)Нужен ли Тесак? (Хроники Хаоса)На чём ездит Марта? (Хроники Хаоса)КибердемонЩитспавнRedotAsset FlipФайтингиMoswar.ruXbox Турция: Алярм, суки, аккаунты горят!Игру убилиЖенщина на корабле к бедеУправление рандомомИвентТрассировка фотоновHZB OcclusionTressFXОбъективный обзор игрПлотваChangedПочему плотва это лошадь?Расстрел НильфгаардаОрден смертного бденияУроборукКолдовские богиМусилакШтормовая плетьАнастерияНадзиратель ПотустороннегоЗвук пердежа в видеоиграхФракции Grim DawnКлючникКейранДевятая силаPay2WinБитва против 7 противников в Red Alert 2Гача-игрыMMORPGARPGRTSКвестFatCatDDrawCompatLOVE the gameПАНЕЛЬКИEurasian Game ShowMy name is You and it's the only unusual thing in my lifeNEEDY GIRL OVERDOSERiotlocThe Tomorrow WarEchoMindustry
Моды, карты и васянствоЛегенда о ТильдеParagonHorn of the AbyssJebus CrossX-PiratezOpenXComJebus OutcastThe World of Terrifying Silence6lm10a (шаблон)VANOMAS DEMO5 ночей с Тимохой 2: ДеревняСильная прокачкаSteampassФреймрейтNVidiaВзрыв лутаGTA: Криминальная РоссияМод-сообщество Рога и Копыта (Barnyard)Шахматный корольПасьянс КосынкаPity SystemЛегендаркаИгровые ресурсы
Игры реалаLEGOMagic: The GatheringБерсеркГоДоминоКамень-ножницы-бумагаКубик РубикаМонополияНа раздеваниеПокерПреферансРусская рулеткаСтрайкбол / Пейнтбол / ХардболШахматыЭкономические игры с выводом средств