Q2PRO-XНа сайт Q2PRO-XСодержаниеRUEN
II. Развитие клиента

Дождь на старой карте

29 апреля — 17 мая 2026 · Q2PRO-X 1.3

Дождь появился в первых сборках линии Q2PRO-X 1.3, начатой 29 апреля. Новую систему назвали Advanced Visual Effects — AVFX. Карты для неё никто не перестраивал: снег и вода попадали в те же дворы, коридоры и шахты, по которым годами бегали игроки. Оставалось разобраться, где у этих мест небо, куда долетит капля и что окажется под ней. Иначе дождь шёл бы сквозь потолок, а снег одинаково белил бы открытую лестницу и комнату в глубине уровня.

Дождь и мокрые поверхности на карте Quake II. Иллюстрация из позднего руководства показывает развитие системы, начатой в Q2PRO-X 1.3.
Дождь и мокрые поверхности на карте Quake II. Иллюстрация из позднего руководства показывает развитие системы, начатой в Q2PRO-X 1.3.

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

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

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

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

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

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

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

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

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

Разгадку дал выстрел в поверхность, на которой уже успел накопиться снег. Появлялись след и частицы — и мир оживал. Их отрисовка возвращала OpenGL в состояние, которого ждал движок. Новый снежный проход менял графические настройки напрямую, минуя внутренний учёт; следующий кадр начинался с ложного предположения, что всё уже выставлено как надо. Выстрел случайно исправлял это расхождение. После снежного прохода стали восстанавливать настройки и согласовывать с ними учёт движка. 17 мая повторные проверки на ztn2dm3 и q2dm8 подтвердили исправление.

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

17 мая версию Q2PRO-X 1.3 опубликовали. На старых картах теперь накапливались осадки, вода стекала между площадками, снег сохранял следы. В лужах отражалось небо — пока ещё не такое подробное, каким его хотелось видеть. Следующие недели ушли на то, чтобы над мокрыми дворами появились узнаваемая Луна, звёзды и меняющийся свет.

Дождь, гроза и освещённое небо в Q2PRO-X. Следующий этап работы с погодой был связан уже со светом над картой.
Дождь, гроза и освещённое небо в Q2PRO-X. Следующий этап работы с погодой был связан уже со светом над картой.

Скачать книгу в PDF