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

Земля, чёрная дыра и обитатели карты

Июль — август 2026 · Q2PRO-X 1.5

В начале июля рядом с Луной появилась Земля. Для неё приготовили текстуры 4K, 8K и 16K: разница почти незаметна на далёком диске, но при увеличении на поверхности проступают подробности материков. Планета вращалась и оставалась самостоятельным объектом. Её можно было видеть одновременно с Луной и Солнцем, поэтому прежний способ просто заменить одну небесную картинку другой здесь уже не подходил.

Проверки быстро вышли за пределы самой планеты. Если Земля перекрывает Солнце, его диск не должен оставаться поверх неё. То же относится к bloom, объёмному свету и заключительным экранным лучам. У каждого из этих слоёв был свой путь через рендер, поэтому исправная тень в одном месте не гарантировала правильного кадра целиком. Слишком широкая маска убирала полезный свет вместе с лишним; слишком узкая оставляла свечение на поверхности планеты. Несколько переделок ушло на согласование видимого края и мягкого рисунка лучей вокруг него.

Свет у чёрной дыры

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

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

Космическое оформление стало местом встречи реальных астрономических данных и игровых графических приближений. Чёрная дыра должна была работать вместе с небом, картой и отражениями.
Космическое оформление стало местом встречи реальных астрономических данных и игровых графических приближений. Чёрная дыра должна была работать вместе с небом, картой и отражениями.

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

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

Материалы и растительность

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

Знакомая архитектура Quake II с новым окружением. Геометрия карты остаётся основой, а дополнительные материалы и растительность должны с ней согласоваться.
Знакомая архитектура Quake II с новым окружением. Геометрия карты остаётся основой, а дополнительные материалы и растительность должны с ней согласоваться.

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

Живность и змеи

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

Free World позволял задержаться в карте без необходимости немедленно искать соперника. Можно было менять окружение, наблюдать за обитателями, исследовать геометрию; рядом развивались тренировки с монстрами на DM-уровнях. Для сетевой дуэли насыщенность убирали настройками. Движение на краю экрана любопытно во время прогулки, но в матче его легко принять за противника.

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

Локальные режимы позволяли иначе использовать старые карты и монстров. Их игровые правила отделялись от клиентских эффектов сетевого матча.
Локальные режимы позволяли иначе использовать старые карты и монстров. Их игровые правила отделялись от клиентских эффектов сетевого матча.

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

Почему загрузка занимала минуты

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

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

25 августа вышел публичный комплект Q2PRO-X 1.5 — с 22 русскими и 22 английскими руководствами. Его проверяли в чистой папке. Рабочая установка скрывала недостающий ресурс, случайно сохранённую настройку или неполный пресет; у нового пользователя этих запасов не было. Даже каталог сотен переменных мог молча обрезаться. После проверки комплекта и публикации работа перешла к Q2PRO-X 1.6.

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