19 июня 2021 19.06.21 25 20K

Ищем высоту цитадели альянса из Half-Life 2

+81
Лучший блог недели
1000 ₽

Примечание

Да-да-да. Это узконаправленный фанатский контент. И он преисполнен просто нечеловеческого уровня духотой. Я решил поразмышлять над лором вселенной Half-Life и исправить пару косяков, которые грызут меня уже 9 лет. Нас ждёт немного аналитической работы и погружения в историю игры. Данный блог — это текстовая адаптация видео, которое будет прикреплено ниже. Если вашему глазу милее текст, то вы его можете увидеть чуть ниже видео, но я рекомендую именно видеоформат.

 

Видео версия блога

Часть 1. История поисков.

Half-Life 2 — легендарная игра, которая в своё время определила вектор развития шутеров от первого лица, собрала все мыслимые и немыслимые награды, взбудоражила всю индустрию и заставила собой восхищаться. Инновационный на тот момент физический движок Source считай впервые дал нам почувствовать себя в настоящем живом мире, где любой предмет можно поднять гравипушкой и уничтожить всё что не прибито к полу. Запретный плод любви Оруэллского «1984» и «Войны миров» Уэллса влюбил нас в себя и заставляет любить до сих пор. Есть много причин этому. Перечислять всё можно было бы несколько часов, от родной русскому человеку эстетики социалистического блока до ярких и узнаваемых персонажей. Цепляющих фишек было бесконечное множество, но одна особенно возвышалась над остальными. Монструозная, не поддающаяся осмыслению, исполинская Цитадель Альянса.

Главный сценарист серии игр Half-Life — Марк Лэйдлоу
Главный сценарист серии игр Half-Life — Марк Лэйдлоу

Сообщество Half-Life огромное. Оно по сей день генерирует гигантское количество контента (всем привет от автора). Начиная с шуточных машиним на основе движка SourceРазум Фримена» / «Гражданская оборона»), заканчивая фанфиками с фантазиями на событий, которые остались за бортом работ главного сценариста игры Марка Лэйдлоу. И в отдельных моментах из жизни сообщества, на бесчисленных форумах фанатов переодически задавался один и тот же вопрос, который касался одной из самых ярких деталей мира игры. «Цитадель — а насколько она высокая?» Естественно сперва ответа на этот вопрос не было. Некоторые особенно смелые и назойливые фанаты даже писали письма самому Лейдлоу, задавая этот вопрос. Но в итоге все транслировали один и тот же усреднённый ответ:

Оригинальный текст одного из очень старых форумных сообщений.
Citadel has no real height actually. It’s ~1900 from the skybox models but from the inside the top is 400m above the ground. Many asked Mark Laidlaw what’s the deal with it and he answered that the Citadel doesn’t have any real height. They put Good Looks in priority instead.
Перевод (Критику перевода можете в комменты)
Цитадель не имеет реальный высоты, на самом деле. Она примерно милю в высоту как скайбокс модель, но внутри скайбокса она 400 метров над землёй. Многие спрашивали Марка Лэйдлоу как правильно это понять, но он отвечал, что цитадель не имеет реальной высоты. В первую очередь им была важна красивая картинка.

Не очень понятный ответ, не правда ли? То, что модель примерно 1,9 мили (~3 км), выяснили в дальнейшем и фанаты игры. Но в своих ответах сценарист делает важное уточнение, что из-за особенностей проектирования уровней у цитадели нет и не может быть точно измеренной высоты. Чуть далее по тексту, когда мы будем смотреть на мой метод измерения высоты цитадели я особо заострю внимание на том, как цитадель меняет свой размер в зависимости от локации игры. Ну, а пока вернёмся к фанатам, которые продолжали закидывать почту создателей игры. Видимо, в какой-то момент этот вопрос осточертел Марку Лэйдлоу, и на очередное письмо сценарист отвечает:

Это уже оригинальный текст Лэйдлоу (2009г)
I asked one of the old HL2 artists and he says: «Not off the top of my head, at least a mile I thought. If you can find someone with a HL2 tree, they could load it up in model viewer and multiply the size by 16 (because this is a skybox version) you’ll get an exact height.» I think the Garry’s mod folks have access to those models and Worldcraft, so can probably derive this info using this method.
Перевод
Я спросил одного из старых художников HL2 и он ответил: «Навскидку примерно миля, я думаю. Вы можете найти кого-то с веткой HL2, они могут загрузить модель в утилу для просмотра, увеличить размер в 16 раз (потому-что это версия для скайбокса) и вы получите точную высоту». Я думаю пацаны из Garry’s Mod имеют доступ к моделям и инструментам, так что вы можете попросить их использовать этот метод.

Мол, просто найдите человека с репозиторием, заберите оригинальную модель, и в инструментах разработчика замерьте её высоту. Ведь всё логично и просто. Я, Марк Лэйдлоу, благословляю вас на поиски ответа, и официально от лица создателей говорю вам — «высота цитадели — равна высоте её модели в файлах игры». Я скажу всё что угодно, чтобы вы прекратили писать мне.

Тот самый пост со знаменитой инфографикой.
Тот самый пост со знаменитой инфографикой.

В промежутке между 2009 и 2012 годами есть много форумных обсуждений на эту тему, например, как правильно считать единицы измерения в инструментах разработчиков, а именно в Hammer’е (утилита для проектирования локаций на движке Source). Кто-то писал про то, что цитадель высотой 1,9 мили, кто-то допускал ошибки при конвертации величин из имперской системы в метрическую и писал, что высотой она 200 метров. Продолжались эти разговоры до 6 марта 2012 года, когда пользователь Reddit под ником Ness4114 написал пост о том, что он посчитал реальную высоту цитадели из игры Half-Life 2. В посте он подробно описал метод измерения, и чтобы в нём разобраться поговорим про то, как построены локации в игре.

Часть 2. Техническая сторона вопроса.

Примерная схема
Примерная схема

В играх на движке Source локации строится следующим образом.

Есть основная локация, та в которой мы перемещаемся. В ней расставляются все объекты: стены, скрипты и npc. Чтобы сохранять пропорции объектов, в основной локации система измерений движка Source примерна равна имперской системе измерений из реального мира.

Пример проектирования уровня
Пример проектирования уровня

Чтобы отрисовать небо используется 2D Skybox. Он представляет собой большую текстуру, натянутую на задний фон локации. Он всегда статичен и не находится в пространстве физически. Как бы вы не передвигались по локации, этот скайбокс находится от вас на одном и том же удалении.

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

Третья, и самая важная для нас часть — это 3D Skybox. Он состоит из моделей, которые находятся за пределами основной локации, и должны создавать глубину перспективы, чтобы открытые пространства в игре имели глубину. Чтобы вы могли видеть здания на удалении. Хитрость тут заключается в том, что в 2004 году на персональных компьютерах не было такого количества памяти, чтобы можно было спокойно взять да и прогрузить хоть и пустое, но поле, которое имело бы в поперечнике несколько километров. Даже в 2021 году это нам не всегда доступно. Локации любой игры поделены сегменты, которые прогружаются по мере того, как игрок к ним приближается.

Пример моделей 3D Скайбокса. Здания находятся за пределами локаций и подлететь вплотную к ним нельзя. По сути там прогружаются низкополигональные лоды. Взято на уровне d1_trainstation_2.
Пример моделей 3D Скайбокса. Здания находятся за пределами локаций и подлететь вплотную к ним нельзя. По сути там прогружаются низкополигональные лоды. Взято на уровне d1_trainstation_2.

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

Хитрость с объектами в Half-Life 2 заключается в том, что мы не знаем реальный размер загруженной модели на скайбоксе, и уменьшая размер самой модельки и равно пропорционально пододвигая её ближе к игроку можно незаметно создать перспективу чего-то очень большого, что на самом деле не такое огромное и находится рядом. Этот эффект называется «Параллаксом», и лучше всего показан в игре Superliminal. Всем настоятельно рекомендую, она просто ломает мозг.

 

Оффтоп: Superliminal была в одном из Рефандов, и Фен воткнул ей РЕФАНД!!!! Я РАНЕН В САМОЕ СЕРДЦЕ!!! ФЕН!!! ТЫ СДЕЛАЛ МНЕ БОЛЬНО!!!

Так вот, любое пространство нужно как-то высчитывать. Для движка Source такие измерения производятся в так называемых Hammer Unit (далее просто Unit) — это минимальная единица пространства для игры. В ней рассчитывается как расстояния и размеры, так и скорость.

Например, тот счётчик который вы можете видеть в интерфейсе спидраннерских сборок и на серваках с рампами в CSGO показывают скорость в UPS (Units per second).
Например, тот счётчик который вы можете видеть в интерфейсе спидраннерских сборок и на серваках с рампами в CSGO показывают скорость в UPS (Units per second).

Пространство имеет разный масштаб для игрового поля и для 3D-скайбокса. Минимальное расстояние в игровом поле — 1 unit, а так как для удобства работы разработчики отталкивались от родной им имперской системы — то они привязали этот юнит к футам. 1 фут они привязали к 16 юнитам.

Для 3D скайбоксов масштабировали размеры и создали из них блоки в соотношении 1/16, или 1 фут к 1 юниту. То есть для того, чтобы рассчитать размер объекта в скайбоксе нужно просто открыть модельку в редакторе, и полученная цифра и будет высотой.

Такой вот математикой пользовался Ness4114 высчитывая высоту цитадели. Пост породил большую дискуссию, которую заметил авторитетный портал Kotaku, который уже на следующий день после поста сделал свою публикацию о том, что пользователь Reddit вычислил реальный размер цитадели альянса из Half-Life 2, и распространили уже знакомую всем вам инфографику, в которой цитадель сравнивается с реальными небоскрёбами, а так как Kotaku является одним из самых читаемых изданий во всей видеоигровой журналистике, то после публикации уже на всех фанатских вики-страницах по Half-Life начали появляться ссылки на этот пост с точным измерением высоты цитадели до метра. И она оказалась:

8431 фут
8431 фут

Но погодите. Вам не кажется, что это немного не вяжется с логикой?

Видите ли, проблема тут лишь в том, что если сравнить соотношение сторон модели цитадели относительно вычисленной высоте, то получится что цитадель в ширину всего 250 метров. Это никак не вяжется с размерами локаций, которые мы наблюдаем, пока проходим уровни в самой цитадели в Half-Life 2 и Half-Life 2 Episode 1.

Оттуда же вылетают сотни и тысячи ганшипов альянса. Толпами маршируют страйдеры. Да сама локация в ядре реактора цитадели получается шире чем актуальная высота цитадели. Да и посмотрите на это с точки зрения логики лора игры. Есть инопланетная раса, которая летает от мира к миру, захватывая ресурсы и порабощая и модернизируя всю окружающую флору и фауну. И их главная база и по совместительству завод по производству боевых единиц будут такими не впечатляющими? Даже на момент создания игры существовали реальные проекты зданий, которые бы могли превзойти цитадель по всем характеристикам. Например, проект токийской высотки X-Seed 4000. Небоскрёб насчитывал насчитывал в себе 800 этажей и был рассчитан на высоту в 4 км. Это почти в 2 раза меньше того, что было описано в статье Kotaku.

X-SEED 4000. Проект уже в 2006 году даже был готов к реализации. Людей тогда остановила лишь стоимость проекта в триллион долларов, и сейсмически нестабильная территория в предполагаемой зоне строительства высотки.
X-SEED 4000. Проект уже в 2006 году даже был готов к реализации. Людей тогда остановила лишь стоимость проекта в триллион долларов, и сейсмически нестабильная территория в предполагаемой зоне строительства высотки.

Даже в самой игре, на карте d3_citadel_2 есть сегмент, где мы около 5 минут катаемся по монорельсу в коконе сталкера. Там локации имеют куда более внушительные размеры.

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

Часть 3. КАКАЯ ВЫСОТА ЦИТАДЕЛИ С ТОЧКИ ЗРЕНИЯ ЛОГИКИ?

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

  1. Установленная игра
  2. SDK Source с требуемой версией игры.

Скачав SDK со Steam я понял, что для его запуска нужно начинать танцы с бубнами и прописывать с нуля весь конфиг, по-этому я поступил проще и нашёл модерскую сборку Ultimate Source SDK 2013. На её основе пилят моды для Half-Life, фанатские карты и серверы для CSGO и многое другое. В такой сборке есть все нужные нам инструменты, например, распаковщик для контента игры, сам Hammer Tool, и утилита для просмотра и конвертации моделей.

Открываем запакованный архив и начинаем искать модели. Для цитадели есть не так много моделей. Их точно меньше того, сколько раз мы встречали её в игре. Возможно размер модели масштабировали ещё и относительно локации, уменьшая модельку от уровня к уровню по мере удаления нас от Сити-17. Это значит, что в основном использовалась какая-то одна конкретная.

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

Выгружаем файлы модели, и открываем её в утиле для просмотра. Тут я вспомнил, что Blender, как и Hammer Tool, использует имперскую систему для замера размеров, и на борту имеет линейку, чтобы можно было бы нарисовать линию и увидеть длину. Экспортируем модельку как obj файл, чтобы затем его открыть в Blender’е.

В Blender'е отчищаем сцену, в настройках проекта выставляем имперскую систему. Напомню, что юнит скайбокса — это 16 юнитов обычных, а для для Hammer Tool 16 юнитов равны 1 футу. То есть всё должно сойтись. Импортируем модель и… об этом чуточку позже.

d3_breen_1
d3_breen_1

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

Смотрите, это же текстура ночного города, которую натянули на дно локации. И выглядит она как ровный спутниковый снимок. Моя гипотеза строится на том, что эта текстура создавалась из реальных спутниковых снимков. Не думаю что её рисовали художники, тк это долго. Также я не думаю что это фотографировали сами разработчики с самолёта, так как она выглядит достаточно ровно. Это определённо спутниковый снимок, который засунули в игру.

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

Первые 4 картинки для уровня d3_citadel_2, а остальные для d3_breen_1
Первые 4 картинки для уровня d3_citadel_2, а остальные для d3_breen_1

Она состоит из 4х картинок, с максимальным для движка разрешением в 512 пикселей на сторону для каждой картинки. У нас получается квадрат 1024 на 1024. Соберём его в фотошопе в одну картинку.

Теперь нас ждёт работа настоящего журналиста расследователя. Я как эдакий Христо Грозев буду сопоставлять изображение которое мы собрали из файлов игры, с городами в Google Earth.

После очень долгого изучения очертаний текстуры и снимков в Google Earth я нашёл требуемый город. Им оказался Нью-Йорк.

А тут у нас написана высота положения камеры для данной панорамы. 8773 км. Очень похоже на то, что мы видели до этого. 27 тысяч футов, или 8км. И это также сопоставляется с идеей, что ширина цитадели в 10 раз меньше высоты, и в ширину она 860м, куда точно поместятся и сотни страйдеров и производственные линии, и даже термоядерный реактор.

Сейчас я хочу вернуться чуть назад. Сейчас на дворе 2021 год, уже вышла новая не номерная часть Half-Life, CSGO всё пытаются перенести на Source 2, у Blender’а новая версия, и возможно из-за изменения интерпретации информации при конвертировании моделей из игры действительно получается другая информация. Когда я загрузил модель из скайбокса в blender, то на самом деле высота Цитадели из Half-Life 2 оказалась 27580 футов или 8406 м. 860 м в ширину и уходит под землю на 230 метров.

Сравнение
Сравнение

Моя калькуляция подтверждается косвенными факторами и логичными заключениями, а значит я могу поспорить с комьюнити фанатов Half-Life на тему того, может ли это стать каноном.

Или нет?

Всё дело в том, что у движка Source огромная куча разных версий. На ресурсах для разработчиков я нашёл информацию, что для последних версий движка начали использовать масштаб 1/12 для юнита скайбокса. А в некоторые моменты 1 юнит равен не 1 дюйму, в 2/3 дюйма. Да и сам блендер в зависимости от версий 2.79 и 2.8+ немного менял механизм конвертации размеров моделей относительно загружаемых моделей. И тут в моей голове опять вспоминается фраза:

Citadel doesn’t have any real height. They put Good Looks in priority instead.

В заключении хочу сказать, что я сперва действительно просто открыл модельку в Blender’е. Перечитал в процессе все форумы разрабов, оригинальный пост на рэддите и попытался найти у себя хоть какую-то ошибку. И естественно, я не могу утверждать, что это какая-то истина. Это был просто поток моих умозаключений, которые можно обсудить в комментах ниже. Или в комментах под видео на YouTube. В любом случае я надеюсь вы потратили своё время не зря, и я дал вам шанс помечтать о том какая же она… Цитадель.


Лучшие комментарии

Возможно, что Доктор Кто на самом деле комбайн.

Охренеть. 

Нет, ну такое точно заслуживает косаря. 

Надеюсь такое заслуживает хотя бы быть услышанным комьюнити)

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

Очень круто и интересно, продолжай в том же духе!

Я уже пишу новый сценарий для блога и видео. Но сперва я этот блог переведу на. английский для рэддита.

Да там список уже из десятка изданий перепечатал.

Ну там скорее всего нарисована только лицевая часть (возможно уменьшенная, чтобы большая часть её деталей помещались в границы экрана при взгляде на неё). Такая же фигня на уровне d3_citadel_1 в оригинальной игре. Ради интереса сделаю замер. и вкину в ответ комментом сюда, если там будет что-то интересное.

Занимательный текст и проработанная тема)

Спасибо за интересный блог!

Спасибо, я сижу тут охреневаю тихо.

Совпадение с высотой со спутника реально впечатляет, отличная работа

Думаю нужно было сразу ковырять с эпизодами. Хотя опять же измерения меняются по ходу доработки движка. Возможно в «Алекс» есть еще данные, но с VR я мало знаком.
Тем не менее  спасибо за контент!

Читай также