Декомпозиция света: как работает освещение в играх

Методы

Оптимизация карты освещённости

Практически всю свою информацию карты освещённости хранят в файлах Source BSP, поэтому их эффективное использование является эквивалентом хорошего освещения. Они вносят ключевой вклад в размер файла BSP: эффективное использование имеет преимущество в загрузке карты для любого желающего поиграть.

Масштаб карты освещённости — основной момент оптимизации. Он определяет, насколько детальна будет информация об освещении для данной грани ( вы можете посмотреть эффекты). Чем больше хранится информации, тем больше размер файла. Меньший масштаб карты освещённости даёт отличную детализацию, но ценой распухшего файла (производительность останется без изменений). Больший масштаб создаёт размытое освещение, но уменьшает размер файлов. Поэтому, нуждается ли грань в детализированной карте освещенности — является определённой задачей.

В основном, это может быть сделано на глазок после компилирования карты. Посмотрите на грани с высоко-контрастными тенями или конкретными деталями, поскольку они первые кандидаты на низкий (т.е. детализированный) масштаб карты освещённости. У граней с мягкими тенями и освещением, когда они мало отличаются друг от друга, можно смело поднимать масштаб.

 Примечание: Не забывайте также учитывать размер грани. Если большую поверхность переместить всего лишь на одну точку вверх или вниз, это может иметь большие последствия. Если необходимо, не бойтесь разделять грань на сегменты.

Пример

Рабочий пример.

Рассмотрим рабочий пример коридора, который изображён справа. Одна картинка показывает вид в игре, другая отображает карты освещенности в редакторе Hammer. Карту освещённости легко посмотреть: в окне 3D-вида щелкните левой кнопкой мыши по слову Camera, и в выпавшем меню выберите 3D Lightmap Grid. И так, жёлтые грани показывают меньший масштаб относительно масштаба по-умолчанию, белые грани — масштаб по-умолчанию, и синие — большой масштаб.

В коридоре видим светильники на стенах и потолке. На снимке видно, где масштаб освещения выше, а где ниже. Передняя сторона колонны имеет повышенную карту освещённости, чтобы поймать все нюансы, т.к. на ней висит источник света. Это не такая большая проблема, ведь колонна — суть маленькая тонкая грань с малым масштабом. Пол и стены вдоль края имеют увеличенный масштаб освещённости, поскольку в игре их детализация интереса не представляет, особенно пол. У остальных граней оставлен масштаб по-умолчанию, поскольку там есть некоторая игра теней и перепады яркости. Увеличение масштаба в них приведёт к плохой освещённости и потере детализации.

Хотя, с технической точки зрения, для улучшения чёткости теней можно уменьшить масштаб на всей карте, однако затянутая компиляция и раздутый размер файла перевешивают эту плюшку. Поиск баланса между большим и малым масштабами карты освещённости может отнять у вас несколько компиляций и привести к некоторым догадкам, которые позволят найти оптимальный размер файла карты.

Создание теней

Некоторые пропы пропускают сквозь себя статичный свет, но имеют сетку столкновений, которая полностью их покрывает (большинство, если не все[confirm], чему хороший пример — модель забора в серии игр Half-Life 2). Как результат — большие, неестественные тени. Обойти это можно, создав func_brush, отключив в нём тени и покрыв текстурой . Насколько это будет трудно, зависит от размеров пропа. Обычно, браши с block_light рисуются там, где свет не должен проходить сквозь браши/пропы.

В этом примере материал metaltruss024a используется без block_light.

В игре. Материал не отбрасывает тени, хотя балка реально загораживает свет.

Покрыв балку материалом block_light, вы создадите ‘фиктивные’ тени.

Здесь же, block_light покрывает балку по контуру текстуры.

В игре.

Как делать процедурно генерируемые эффекты

Самый первый комментарий к начальной статье этого цикла звучал так: «Магия! И прямые руки.» Не уверен в полной прямоте моих рук (в конце предыдущей статьи — визуальные баги, которые это подтверждают), но никакой магии тут нет. Поделюсь секретом процедурных эффектов:

  • Минимум треть работы уже сделана, как только вам в голову пришла идея сделать процедурно генерируемый контент. Это может быть что угодно: пятна на крыльях бабочек или атмосфера планеты, деревья и кусты и т.д. Иногда, особенно со светом, сразу понятно, как происходит «генерация» в реальном мире. Чаще всего алгоритм сводится к: «пустить бесконечно много лучей в бесконечное количество направлений и получить реалистичную картинку».

  • И это вторая треть — написать подобный алгоритм (с учетом того, что бесконечность хорошо аппроксимируется тысячей). Он получается простой, как «hello world», но медленный. Руки сразу тянутся что-нибудь оптимизировать, но, поверьте, не стоит. Лучше запустить его в редакторе и пойти пить чай. А после чая понять, что придуманный метод не даст красивой картинки и всё переделать. Если планируется единожды предрассчитать какую-то картинку в редакторе, и потом использовать её в билде — на этом можно остановится.

  • И, наконец, последняя треть — придумать алгоритм, который даст визуально близкий результат, но будет работать быстрее. Обычно тут пригождается знание всяких интересных контейнеров, алгоритмов, деревьев и т.д. За один из таких алгоритмов — большое спасибо Dionis_mgn, который когда-то рассказал, как сделать классные двумерные тени.

Непрямое освещение на основе световых проб (Probe-based indirect lighting)

Эволюционное продолжение предыдущего метода, световые пробы предназначены для частичного решения проблем с видеопамятью и интерактивностью окружения. Упрощенно говоря, световые пробы (light probes) представляют собой зонд меньшего размера и с меньшим числом сторон, чем кубические карты — например, с четырьмя, а не шестью сторонами. То есть, идейно это та же кубическая карта, но более низкого разрешения и всего с несколькими битами цветовой информации.

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

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

Однако и здесь есть свои минусы и компромиссы:

  • Столь малые зонды улавливают лишь основную информацию о свете — а значит, хуже работают с отражающими поверхностями в сравнении с кубическими картами.

  • Система зондов может создавать прерывистое освещение для динамических объектов, да и вообще сильно зависит от плотности расположения проб. Освещение от световой пробы может просачиваться даже сквозь объекты, создавая косвенное освещение и эффект свечения в затененных областях.

  • Из-за низкой точности световые пробы не в состоянии отображать мелкие детали и тени, из-за чего затенение поверх освещения на основе проб зачастую нужно накладывать дополнительно иными способами.

Как можно заметить, оговорка про использование дополнительных техник освещения звучала неоднократно: все эти методы вовсе не обязательно являются конкурирующими и взаимоисключающими — скорее наоборот, все чаще в современных играх используются их комбинации и различные улучшения. Например, мы уже раньше писали статью о том, как реализовали кастомные тени в своих проектах: предварительно рассчитанное освещение для статики — при помощи теневых карт, для динамической геометрии — зонды освещения. 

Все это доказывает, что, сколько бы еще различных методов не было изобретено, рендеринг действительно правдоподобного непрямого освещения в реальном времени — сложная задача, требующая комплексных решений.

Модульная система

У мода Dynamic Lights модульная система и вы можете либо включать, либо выключать те или иные модули, чтобы улучшить производительность игры или повысить качество картинки. Достаточно просто удалить соответствующий модуль из JAR файла по пути .jar/atomicstryker/dynamiclights/client/modules.

  • BurningEntitiesLightSource — Горящие мобы и монстры. Высокая нагрузка.
  • ChargingCreeperLightSource — Светящиеся криперы перед взрывом. Низкая нагрузка.
  • DroppedItemsLightSource — Светящиеся или корящие брошенные вещи. Высокая нагрузка.
  • PlayerSelfLightSource — Светящиеся и горящие броня и вещи, носимые игроком. Также когда игрок корит. Низкая нагрузка.
  • PlayerOthersLightSource — Светящиеся и горящие броня и вещи на других игроках и мобах. Средняя нагрузка.

Скриншоты здесь мало чем помогут и вряд ли покажут ту красоту, которую дает мод Dynamic Lights. Так что лучше посмотреть видео.

Что такое глобальное освещение?

Давайте определимся, какую картинку мы вообще хотим получить. «На свету светло, в темноте — темно» — звучит неплохо для отправной точки. Как в реальном мире: в шкафу темно, в коридоре светлее, в комнате еще светлее, а на крыше совсем ярко. Переформулируем: элементы фона, персонажи и прочие объекты должны получать столько света, сколько фотонов смогло добраться до них от небесной сферы (в нашем 2D случае — небесной окружности). Понятно, что лучше направлять наши «фотоны» не с неба, как в реальном мире, а наоборот, из освещаемой точки в небо: в противном случае нам понадобится слишком много бросков, да и то, многие уйдут «в молоко».

Ещё одно из условий: рассчитываем глобальное освещение только для статических объектов: стен, земли. Так мы сможем запускать его при загрузке и пользоваться результатами весь уровень (без влияния на fps).

Кусочек сцены. На самом деле, расчеты идут для всей сцены целиком.

Значения[]

ID блока

Java Edition:

Название Текстовый ID
Красный факел (на полу)
Красный факел (на стене)

Bedrock Edition и Java Edition 1.12:

Название Текстовый ID Числовой ID
Красный факел (активный)
Красный факел (неактивный)

Нумерация данных

Основная статья: Нумерация данных

В Bedrock Edition и Java Edition 1.12 используется следующая нумерация данных:

НД Описание
(неиспользуемый)
1 Направлен на восток.
2 Направлен на запад.
3 Направлен на юг.
4 Направлен на север.
5 Направлен вверх.

Состояния блока

Основная статья: Состояния блоков

На полу:

Название Значение Описание
 lit Если true, то факел горит.

На стене:

Название Значение Описание
 facing Сторона света, в которую направлена сторона блока, на которой расположен факел.
 lit Если true, то факел горит.

Для Майнкрафт: 1.5.2, 1.6.4, 1.7.2, 1.7.10, 1.8

Моды

607 Просмотров

Мод Dynamic Lights добавляет в Майнкрафт несколько интересных вещей касательно системы динамического освещения в игре. Теперь исследование пещер и других подземелий будет намного интереснее и проще. Держа в руке факел или глоустоун (светящийся камень) вы сможете освещать себе путь намного дальше и это будет выглядеть намного естественнее.

Этот мод заставит источать свет такие вещи как Факел, Светящийся камень, Тыква на Хэллоуни, Редстоун, Лава и т.п.. Они своим легким свечение будут освещать все вокруг себя. Кроме того у вас есть возможность «включить» свечение и на других проивзольных вещах и предметах. Это можно сделать изменив файл настроек. Вы можете осветить вашу любимую броню или любимы меч. Так же можно задать возможность свечения под водой, время свечения, когда вещь брошена на землю или поднята с земли. Теперь это возможно.

Управление

По умолчанию, всё динамическое освещение мода включается и выключается кнопкой «L», но это можно изменить в настройках. Мод позволяет создавать неограниченное количество источников света, но учтите, что слишком их большое количество значительно снизить скорость FPS в игре, все зависит от мощности вашего компьютера. Для оптимизации работы мода очень рекомендуем установить OptiFine HD. Он полностью совместим и работает корректно. Также мод хорошо ведет себя и в сетевой игре со стороны клиента. Он никаким образом не нагружает сервер. Можете смело его устанавливать в мультиплеер игрищах.

Модульная система

У мода Dynamic Lights модульная система и вы можете либо включать, либо выключать те или иные модули, чтобы улучшить производительность игры или повысить качество картинки. Достаточно просто удалить соответствующий модуль из JAR файла по пути .jar/atomicstryker/dynamiclights/client/modules.

  • BurningEntitiesLightSource — Горящие мобы и монстры. Высокая нагрузка.
  • ChargingCreeperLightSource — Светящиеся криперы перед взрывом. Низкая нагрузка.
  • DroppedItemsLightSource — Светящиеся или корящие брошенные вещи. Высокая нагрузка.
  • PlayerSelfLightSource — Светящиеся и горящие броня и вещи, носимые игроком. Также когда игрок корит. Низкая нагрузка.
  • PlayerOthersLightSource — Светящиеся и горящие броня и вещи на других игроках и мобах. Средняя нагрузка.

Скриншоты здесь мало чем помогут и вряд ли покажут ту красоту, которую дает мод Dynamic Lights. Так что лучше посмотреть видео.

Факел светящейся в руке

А еще Dynamic Lights это уникальный мод на факел светящийся в руке во всем Майнкрафт. Теперь не нужно на протяжении всего пути в пещере расставлять факелы, чтобы осветить себе путь. А идя назад собирать их, чтобы добро не пропало за зря. Можно просто взять один факел себе в руку и идти с ним, видя все что нужно. Очень удобно и прямо как в реальности.

Установка

  1. Проверяете, установлен ли у вас Forge для Minecraft. Если нет, то нужно скачать и установить.
  2. Скачиваете мод Dynamic Lights, под нужную версию вашей игры.
  3. Переносите скачанный файл в папку %appdata%\.minecraft\mods.

Проверено Dr.Web: без вирусов

Декали

Декали («decal» — «переводная картинка»), это отличный способ сделать игру более живой, не сильно жертвуя производительностью. Идея проста: на определенную поверхность (стена, пол и т.д) накладывается прямоугольник с текстурой, как настоящая переводная картинка. Это может быть след от пули, какой-нибудь мусор, надпись, что угодно.

Но мы будем использовать декали немного иначе: в качестве источников света произвольной формы. Раз уж мы генерируем текстуру с освещением, мы можем добавлять в неё объекты произвольной формы. И эти объекты сразу же начнут светиться! Так можно легко реализовать эффекты люминесценции, теплового излучения.

Но есть два важных момента:

  1. Кроме самого объекта нужно добавить bloom — как эффект мягкого рассеянного свечения;
  2. Нельзя рисовать объект и bloom одинаково на фоне и стенах: так потеряется ощущение глубины. Вместо этого будем рисовать спрайт либо только на стенах, либо только на фоне (помните маску твердости из глобального освещения?). А силу bloom’а будем менять тоже в зависимости от слоя.

По сути, алгоритм простой:

Разделим все декали (например, с помощью тегов Unity3D) на декали переднего и заднего планов:

  1. Отрисовываем спрайт с нужной яркостью и цветом в текстуру, с учётом п.3 или п.4;
  2. Добавляем эффект «bloom» (очередное размытие), с учётом п.3 или п.4;
  3. Декали переднего плана:
    • Отрисовываются только на пикселях стены;
    • Bloom эффект сильнее на пикселях стены и слабее на пикселях фона.
  4. Декали заднего плана:
    • Отрисовываются только на пикселях фона;
    • Bloom эффект сильнее на пикселях фона и слабее на пикселях стены.

На примере будет понятнее:

Находим старый спрайт травы.

Позиционируем «траву» так, чтобы она закрывала кончики стен.

Рендерим спрайт только в текстуру освещения.

Добавляем свечение на стены.

Добавляем свечение на фон.

И получаем интересную радиоактивную плесень.
А еще можно делать раскаленные стены, уникальные светящиеся предметы и многое другое.

Стена светится от счастья.

История[]

Pre-classic-версия Java Edition
Нотч предлагает добавить факелы, которые «осветят область размером 3×3».
Indev-версия Java Edition
0.31 20091223-2 Добавлены факелы.
Факелы могут быть размещены в воздухе без какого-либо поддерживающего их блока и не имели верхней текстуры.
Факелы теперь имеют другую иконку в инвентаре.
? Верхние красные пиксели факела были удалены. Тем не менее, факелы по-прежнему не имеют верхней текстуры.
Факелы теперь стали короче.
Факелы теперь немного тусклее.
20100125-1 Факелы теперь имеют эффекты частиц.
Факелы теперь могут быть сделаны в верстаке.
unknown В ранней версии игры при удалении блока факел перемещался в другой доступный блок.
unknown Факелы теперь имеют верхнюю текстуру.
Альфа-версия Java Edition
v1.1.0 Факелы больше нельзя размещать на листьях деревьев (только на причудливой графике).
v1.2.0 ? Факелы теперь используются для крафта светильника Джека.
Бета-версия Java Edition
1.2 Теперь факелы можно скрафтить из древесного угля.
1.6.6 Факелы теперь могут быть размещены на светокамне.
1.7 Факелы больше нельзя размещать на листьях, независимо от того, были ли они сгенерированы естественным образом на дереве или размещены после обрезки ножницами.
Факелы и красные факелы теперь можно размещать на заборах.
1.8 1.8 Pre-release Факелы теперь генерируются в заброшенных шахтах.
Официальный выпуск Java Edition
1.2.1 12w08a Теперь факелы можно размещать поверх блоков травы.
1.3.1 12w19a Факелы теперь появляются вокруг бонусных сундуков, если вокруг каждой стороны есть блок на одинаковой высоте.
12w25a Факелы теперь можно размещать поверх перевернутых плит и ступенек.
1.4.2 12w42b Падающий песок теперь правильно «всплывает» при падении на факелы.
1.8 14w07a Факелы, размещённые на стенах, теперь представляют собой просто повёрнутые версии вертикальных факелов, а не имеют собственную модель блока.
14w18a Факелы теперь можно размещать на витражах.
? Факелы, являющиеся частью портала выхода из Края, теперь генерируются некорректно и попадают в портал как предметы.
1.9 15w43a Факелы теперь могут генерироваться в подвалах иглу.
15w44a Факелы теперь можно найти внутри вагонеток с сундуком в заброшенных шахтах.
1.11 16w39a Факелы теперь генерируются в лесных особняках.
1.13 17w47a Состояния блока, повёрнутого не вверх для ID были отделены в .
До «Сглаживания» числовой ID этого блока был 50.
1.14 18w43a Текстура факелов была изменена.
18w46a Факелы теперь можно использовать для изготовления фонарей.
18w47a Факелы теперь генерируются в форпостах разбойников.
1.14.3 pre3 Факелы теперь могут быть размещены на железных прутьях и стеклянной панели.
1.16 20w06a Добавлены факелы душ.
20w15a Факелы душ теперь можно крафтить с помощью песка душ.
20w17a Факел огня душ был переименован в Факел душ.
Идентификаторы факелов души были изменены с на и на .
0.1.0 Добавлен факелы.
0.8.0 build 2 Факелы теперь используются для крафта светильников Джека.
0.9.0 build 1 Факелы теперь генерируются в деревнях, заброшенных шахтах и крепостях.
build 2 Факелы теперь могут размещаться на спаунерах.
build 5 Скорость размещения факелов была улучшена.
build 6 Освещение от факелов теперь стало ярче и ближе к тому, что есть в PC.
0.14.0 build 1 Факелы теперь можно найти внутри вагонеток с сундуком в заброшенных шахтах.
1.0.0 alpha 0.17.0.1 Факелы теперь генерируются в подвалах иглу.
Четыре факела теперь генерируются на портале выхода из Края после смерти дракона Края.
1.1.0 alpha 1.1.0.0 Факелы теперь генерируются в лесных особняках.
Официальный выпуск Bedrock Edition
1.2.0 beta 1.2.0.2 Четыре факела генерируются рядом с бонусным сундуком.
1.4.0 beta 1.2.20.1 Факелы теперь можно использовать для изготовления подводного факела и цветных факелов.
1.10.0 beta 1.10.0.3 Текстура факела была изменена.
Факелы теперь генерируются в форпостах разбойников.
Факелы теперь используются для крафта фонарей.
1.11.0 beta 1.11.0.1 Факелы теперь можно найти в селе биома саванны.
1.16.0 beta 1.16.0.51 Добавлены факелы душ.
beta 1.16.0.57 «Факел огня душ» теперь был переименован в «Факел душ».
Для крафта факелов душ используется песок душ.
Legacy Console Edition
Добавлены факелы.
Факелы теперь могут быть размещены на полной стороне ступенек.
Текстура факелов была изменена.
Факелы теперь используются для крафта фонарей.
Факелы теперь генерируются в форпостах разбойников.
New Nintendo 3DS Edition
0.1.0 Добавлены факелы.

III — Основы рендеринга

1 — Предварительно просчитанное освещение (Precomputed lighting)

Одна и та же сцена: без освещения (слева), только с прямым освещением (посередине) и с непрямым глобальным освещением (справа). Иллюстрации с Unity LearnАлгоритм применения карты теней. Иллюстрация с OpenGl-tutorial

2 — Рендеринг в режиме реального времени

Шейдинг Ламберта на примере сферы. Иллюстрация из материалов Петра Дьячихина

  • Base Color (базовый цвет) — фактическая текстура поверхности.
  • Roughness (шероховатость) — насколько поверхность неровная.
  • Metallic (металличность) — является ли поверхность металлом.
  • Specular (зеркальность) — объем бликов на поверхности.

Без PBR (слева), PBR (справа). Иллюстрации с Meta 3D studio

Опции компилирования

Движок Orange Box (Source 2007) добавил три новых опции, которые повышают реализм во время компиляции. Чтобы получить к ним доступ, в диалоговом окне Run Map выберите режим Expert, и затем «HDR Full compile -final (slow!)»; далее, в списке ниже, выберите строку «$light_exe». В поле Parameters введите необходимые параметры, описанные ниже.

ПРИМЕЧАНИЕ: Это значительно увеличит время компиляции, так что рекомендуется использовать на последних стадиях создания карты!

-staticproppolys

Как правило, VRAD создаёт тени под статичными пропами на основе сетки столкновений, потому что это проще, поскольку сетка столкновений близка к форме пропов. Обычно этого достаточно, но некоторые пропы могут иметь упрощенную сетку — или вообще её не иметь — вынуждая VRAD создавать неестественные тени. Данная опция позволяет обходить это для некоторых пропов, заставляя VRAD использовать полигональную сетку. Также, это необходимо, если вы используете -textureshadows (см. ниже).

Просто добавьте -staticproppolys в список параметров $light_exe (см. ниже).

-textureshadows

Не все пропы имеют геометрические «дырки». Сетчатые заборы, например, используют текстуры с альфа-каналами. Обычно они не распознаются VRAD, поэтому при их использовании отключите тени от них (что иногда приводит к приличным результатам), или добавьте эту опцию, которая заставит VRAD обрабатывать альфа-каналы также, как и браши.

Чтобы команда -textureshadows работала, вам нужно создать пользовательский файл RAD со списком пропов, к которым будет применяться данная опция. Извлеките из игры файл lights.rad с помощью GCFScape или Crafty, поместите его в папку с игрой и дайте ему новое имя. Затем, откройте его в любом текстовом редакторе, и добавьте строку forcetextureshadow , чтобы файл применился к каждой модели. Также необходимо активировать ‘staticproppolys’. Наконец, добавьте -lights -textureshadows в список Parameters $light_exe (см. ниже).

-staticproplighting

В отличие от двух других, этот параметр влияет на свет, отбрасываемый пропами. Пропы, как правило, отсвечивают в зависимости от места размещения (см. info_lighting выше), что приводит к неестественному освещению, когда свет падает только на одну сторону пропа, или проп находится наполовину в тени. Эта опция заставляет VRAD рассчитывать уровень света каждой вершины независимо. Из всех трёх опций, эта, пожалуй, сильнее всего влияет на время компиляции, но, как правило, является необходимым шагом в деле создания убедительно выглядящих моделей.

Просто добавьте -staticproplighting в список $light_exe Parameters (см. выше).

 Предупреждение: Параметр отключает энтити info_lighting в статических пропах, не использующих рельеф карты!

 Примечание: light_spot будет освещать вершины независимо от этого параметра.

 Примечание: Параметр подталкивает некоторые пропы (например сосны) отбрасывать тени на себя, создавая неестественный вид. Чтобы избежать этого, в свойствах пропов установите значение для Disable Self-Shadowing with vertex lighting на «Yes.»

 Примечание: Пропы, использующие карты рельефа или фонг-материалы, не будут отсвечивать вертексами.

Энтити света

light_dynamic

Невидимый источник света, который может постоянно меняться и перемещаться. Его местоположение может определяться скриптованными двигающимися объектами. Динамическое освещение существенно нагружает процессор, потому что рассчитывается в реальном времени, и при этом оно гораздо гибче статического освещения. Используйте данный тип освещения редко, потому что он сильно нагружает графический движок.

 Примечание: Фактически, эта сущность состоит из двух огней: светового конуса и пятна света. Некоторые их значения не всегда влияют друг на друга.

Светящиеся текстуры

Светящаяся текстура.

В определённых случаях можно создавать свои светящиеся или освещающие текстуры, но для этого нужно использовать файл .vmt или .rad, что выходит за рамки нашей статьи. Это поможет дизайнеру уровня сберечь усилия, когда он будет создавать световые эффекты для своей карты.

env_particlelight

Красный свет.

Обычный свет, который освещает только частицы из env_smokestack, и больше ничего. Полезно для улучшения освещения помещений с паром и подобных, но редко используется из-за своей специфики.

env_projectedtexture

Крошечная сцена, показывающая env_projectedtexture с «framebuffer fix», «Clipping fix» и «Grain fix». Разрешение текстуры составляет 4096 с зерном/фильтром 1. Создана с помощью Hammer и содержимого Half-life 2.

Аналогично light_dynamic — это невидимый прожектор, который может изменяться и двигаться. Он может менять свою позицию, поле зрения и диапазон, будучи привязан к двигающимся объектам. Env_projectedtextures уникальна тем, что отбрасывает динамические тени от любой геометрии (браша или модели) на все браши и модели (даже на себя), в отличие от теней RenderToTexture. Данная система используется для фонариков игроков в Half-life 2 и L4D.

Env_projectedtexture — самый тяжелый источник света, он не компилируется, и все расчёты происходят в реальном времени. Более одной или двух таких энтить резко снизят производительность на старых видеокартах

Также обратите внимание, что на Source2007 и более ранних версиях движка без исправлений тени будут сильно «зернистыми», иметь низкое разрешение и без родителя. Эти проблемы были исправлены в новых итерациях движка Source2009, тем не менее вы ограничены только одной текстурой-прожектором (ВКЛЮЧАЯ фонарики игроков).

 Примечание: Чем дальше отбрасываемая тень, тем меньше её детализация. Низкий FOV, высокий NearZ и приближение теней (поскольку они не визуализируют пространство) дают лучшие результаты. Когда тени начинают терять детализацию и очевидна утечка, то они будут «вытягиваться».

Что такое динамическое освещение в Roll20?

Динамическое освещение было частью Roll20 в течение долгого времени, но недавно подверглось серьезному обновлению. В результате на платформе Roll20 теперь есть две категории динамического освещения.

Устаревшее динамическое освещение — это старая система. Он содержит часто используемую функцию под названием Advanced Fog of War, но и Legacy Dynamic Lighting (LDL), и Advanced Fog of War (AFoG) исчезнут 14 мая 2021 года. Система будет заменена на обновленное динамическое освещение.

Обновленное динамическое освещение (UDL) в настоящее время доступно с мая 2020 года, но оно по-прежнему содержит несколько проблем, над которыми работают разработчики. Он состоит из трех основных элементов:

  1. Explorer Mode — это UDL-версия Advanced Fog of War. Карту нельзя увидеть, пока она не будет исследована, а ранее исследованные области неактивны.
  2. Инструмент «Тьма» используется как для отображения, так и для скрытия определенных областей карты. В настольных ролевых играх нередко определенные области блокируются «магической тьмой». С точки зрения игры это означает, что игроки не могут видеть эти области, если у них нет определенного предмета. Инструмент Darkness Tool — отличный способ добиться этого.
  3. Наконец, последний инструмент — Convert Lighting. Это одноразовый инструмент, который позволяет преобразовать динамическое освещение кампании с устаревшего на обновленное. Roll20 предлагает выполнить это на копии вашей кампании, поскольку ее нельзя отменить.

Есть и другие настройки, которые следует учитывать. Дневной режим используется, когда вы хотите осветить всю карту, например, хорошо освещенное место в солнечный день или просто большую комнату. Это также полезно, когда DM не хочет устанавливать факелы или другие источники света.

Карты освещения (Lightmaps)

Первый метод, о котором мы поговорим, — lightmapping. Техника эта использовалась еще в оригинальном Quake II 1997 года и используется до сих пор даже в самых современных тайтлах — но, конечно, в более продвинутом и детализированном виде. 

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

Впрочем, как и любая другая техника, она имеет ряд недостатков:

  • Карты освещения хороши только для статических объектов, иначе свет в сцене не будет выглядеть согласованным и реалистичным. Это накладывает сильные ограничения на геймдизайн и интерактивность и требует иных техник освещения для динамических объектов — одними картами освещения будет уже не обойтись.

  • Карты освещения из-за своей статичности могут отображать только рассеянное освещение и не подходят для имитации зеркальных поверхностей, поскольку они во многом зависят от положения камеры. Таким образом, они хорошо подойдут, например, для бетонных поверхностей, но не металлических.

  • Как и любые текстуры, карты освещения имеют конечное и, как правило, довольно низкое разрешение, из-за чего могут возникать артефакты на поверхностях, такие как рваные края и пикселизация. Во избежание этого, метод может потребовать довольно большого объема видеопамяти.

Техника все время улучшается и обрастает модернизациями, пытающимися решить перечисленные проблемы — но многое все равно упирается в необходимость освещения динамических объектов, и тогда на помощь приходят другие методы.

В Half-Life 2 Valve активно использовала световые карты (2011)

Как настроить динамическое освещение

Динамическое освещение настраивается картой в Roll20. Щелкните панель инструментов страницы в верхней части экрана, выделите карту, которую хотите отредактировать, а затем щелкните значок «Параметры».

Есть три вкладки: «Сведения о странице», «Динамическое освещение» и «Устаревшее освещение». Если вы еще не обновили свою игру до современного динамического освещения, вы будете использовать устаревшее освещение. В противном случае вам нужна средняя вкладка.

Если вы не изменили настройки где-либо еще, динамическое освещение будет отключено. Щелкните переключатель, чтобы включить его. Как только вы это сделаете, вы можете выбрать, активировать ли режим проводника, дневной режим и обновлять при сбросе токена.

Если у вас есть друзья, чьи компьютеры не могут справиться с освещением, активация обновления при сбрасывании жетонов позволяет Roll20 делать обновления только при перемещении жетонов, что уменьшает ресурсы, необходимые для динамического освещения.

Вы также можете изменить непрозрачность скрытых областей. Хотя это не повлияет на зрение игроков, мастеру игры будет легче увидеть, что происходит на карте.

Управление

По умолчанию, всё динамическое освещение мода включается и выключается кнопкой «L», но это можно изменить в настройках. Мод позволяет создавать неограниченное количество источников света, но учтите, что слишком их большое количество значительно снизить скорость FPS в игре, все зависит от мощности вашего компьютера. Для оптимизации работы мода очень рекомендуем установить OptiFine HD. Он полностью совместим и работает корректно. Также мод хорошо ведет себя и в сетевой игре со стороны клиента. Он никаким образом не нагружает сервер. Можете смело его устанавливать в мультиплеер игрищах.

Стоит ли использовать динамическое освещение?

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

С другой стороны, если все ваши игроки используют относительно современные компьютеры, динамическое освещение не должно вызывать никаких проблем. Если вы не уверены, нужно ли включать его, попробуйте запустить его. Если ваши игроки жалуются, вы можете отключить динамическое освещение в меню настроек.

Вы также должны иметь в виду, что динамическое освещение доступно только мастеру игры. Игроки не имеют индивидуального контроля над настройками. Грядущие обновления динамического освещения должны сделать его менее ресурсоемким.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector