Загадка размера юнита, реалмаппинг

Материал из CSM Wiki
Перейти к навигации Перейти к поиску


Загадка размера юнита. Реалмаппинг

Небольшое такое исследование.

Введение. Зачем это нужно​

Каждый маппер Half-Life (ну или там Counter-Strike, не суть), хоть раз пытавшийся сделать реалистичную карту или воссоздать средствами маппинга какое-либо реальное место, будь то своя школа, универ или дом, сталкивался с вопросом размерности этого самого места в игре. Нигде ведь не указано, чему в «Халве» равна минимальная единица измерения расстояния - юнит. Как же делать правдивую карту, не зная, какого масштаба она должна рисоваться на клеточном поле Хаммера? Конечно, можно начать лепить её «на глаз», но что это за реалмаппинг, когда «замаппеные» помещения и парты любимой/нелюбимой школы такие большие, что начинаешь думать, что персонаж, которым ты играешь, до школы то ещё и не дорос? Или, когда дверные проёмы своей квартиры такие маленькие, что в них приходится протискиваться, будто ты играешь каким-то Ёкодзуна c монтировкой или АК в руке? Вся прелесть реалмаппинга состоит, как ни странно, именно в реализме: карта, имеющая, к примеру, правильное соотношение сторон, но неправильный масштаб не будет тру! Кто-то, отмахнувшись рукой, скажет, что всё это ерунда, реалмаппинг убивает геймплей, а Халва не правильно отражает масштабы, и продолжит клеить карту, запустив которую, задаёшься вопросом, "а не Ратс ли это, случаем?". Вообще говоря, геймплей убивает плохая фантазия автора. Но, в конце концов, выбор за тобой, дорогой читатель. Итак, чему же всё-таки равен юнит?)

Пример реалмаппинга комнаты

Обманчивый взгляд​

Для начала, нужно решить, от чего же мы отталкиваемся, когда говорим, что карта имеет неверный масштаб. Конечно же, от себя самих. Правда, вид камеры от первого лица слишком неоднозначен в вопросе оценивая размерности игрового мира (восприятие меняется в зависимости от соотношения сторон дисплея, его диагонали, да и редактирование значения fov никто не отменял), поэтому мир следует оценивать по размеру NPC или мультиплеерных игроков/ботов относительно его самого. Ну это, в принципе, и ежу понятно)

Логика отцов​

Учитывая, что юниты впервые применились в игре Quake от ID Software, и играем мы в ней от лица человека, то посмотрим, чему же там равен рост этого самого человека. Открываем раритетный Worldcraft 1.6, скаченный с какого-то забугорного квейковского фан-сайта, настраиваем на Quake, добавляем info_player_start, и, оп, 56h. Можно предположить что, учитывая, что разработчики живут в США, то и размер юнита должен, скорее всего, приравниваться к какой-нибудь стандартной единице измерения в этой стране. Возьмём дюйм (2.54 см), как объективно самый близкий. 56 ю х 2,54 см = 142,24 см, н-да... низковат солдат, особенно для мужественного героя-пехотинца. Где же логика? К слову, высота энтити врагов-солдат равна 64 юнитам, но в игре они имеют тот же рост, что и главный герой - 56 юнитов, да и выглядят также. И тут мне стало интересно, чему же равен рост игрока в другом проекте «Айди», созданным до Quake - Doom. Казалось бы, движок Дума даже не до конца 3D, что здесь может быть общего? Но смотрим Doom_engine … и, бац, 56 текселей, авезоме! Для справки, «думовский» тексель равен одному пикселю спрайта персонажа. Кстати, высота человека в Quake 2 тоже равна 56 (юнитам), т.е. «Айдишники», по крайней мере, изначально, придерживались общих стандартов при смене движка, что, конечно, логично, ведь так привычнее и удобнее, да и смысла менять размеры не было, ведь игры того времени были достаточно схематичны.

Рост игрока в исходниках Wolfenstein 3D

Не останавливаясь, копнём ещё глубже, и вспомним, что в продолжении Doom - Doom 2: Hell on Earth, есть секретные уровни из ещё более ранней игры ID - Wolfenstein 3D (Е1М1 и Е1М9). На этих картах используются и оригинальные NPC из "Волфенштейна" - офицеры СС, и в игре они имеют тот же рост, что и враги-солдаты в Думе, т.е. масштаб в играх, в общем-то, одинаковый. Заглянув в историю, можно заметить, что в Фашистской Германии для офицеров был обязателен высокий рост, простые же солдаты обычно были поменьше ростом. В оригинальном Wolfenstein 3D есть эти самые простые солдаты и их рост как раз заведомо ниже, и составляет он 48 текселей. Но почему же такие нелогичные числа, спросите вы, ведь куда логичнее было бы использовать, например 64 или, допустим, 32? Так и есть, размер спрайтов в "Вольфе" и равен 64 х 64 пикселя, в независимости от того, какого размера изображён персонаж и как много использовано маски альфа-канала прозрачности. В Doom же просто перенесли те же масштабы персонажей, и получилось, что рост людей там равен 56. Всё просто. Но вернёмся к немцам, чему же равен рост солдат в игре в пересчёте на реальные, неигровые единицы измерения? Не факт, конечно, что ID, рисуя малопиксельных офицера и солдата, приравнивали их к каким-то определённым пропорциям людей. Но если оставить эту мысль, то можно вдруг обнаружить интересную вещь - если предположить, что 56 пиксельный офицер имеет рост 70 дюймов, а 48 пиксельный солдат, соответственно, 60 дюймов, обнаруживаем, что в 1 пикселе 1,25 дюйма (70:56 = 1,25; 60:48 = 1,25), т.е. 3,175 см! Везде числа ровные и удобные для подсчёта, да и с ростом всё неплохо сходится: 152,4 см для солдата (не стоит забывать, что они специально сделаны низкого, неказистого роста, да и некая мультяшность и стереотипность даёт о себе знать), и 177,8 см для офицера (рост Гиммлера был 174 см, Геринга 180 см). Совпадение ли? Да и 70 дюймов довольно подходящий рост для коренастого Doomguy'а.

Думгай, главный герой Doom

Поворот вентиля​

С играми от ID разобрались, но что же с Вэлв? Каждый уважающий себя маппер "под халву" знает, что рост игрока в ней составляет 72 юнита. И эта разница начисто убивает «айдишное» понятие юнита. Значение юнита в 1,25 дюйма для Valve, в отличие от ID, было чуждым, да и бессмысленным, поэтому для удобства при разработке Half-Life «Вентили» могли повернуть его в сторону уменьшения, т.е. прировнять 1 юнит к 1 дюйму (правда, уменьшив при этом обзор). Что, скорее всего и сделали. Здесь я согласен с автором статьи «Размеренные размеры», Yarko. К тому же, если посмотреть на пропорции человека в Квейке, то можно заметить, что он слегка приплюснут, в Халве же Фримен наоборот изображён довольно рослым человеком, поэтому отказ от «кваковских» пропорций не случаен.


Рост человека в разных играх

Но возникает вопрос, почему именно 72, а не, например, 70? Да потому что 72 дюйма это ровно 6 футов, то есть, также как и в случае с «Вольфенштейном», рост человека сделали ровным в футах. Итак, получается, что рост Фримена - чуть меньше 182,9 см (отсюда нужно вычесть высоту подошвы обуви), если посмотреть на официальные пикчи, всё, в общем-то, сходится.

Применение​

Хотим мы, сделать, допустим, карту своей квартиры, напичкав её кровожадными хедкрабами и зомби. Берём, не ленимся и измеряем стены комнаты, получаем, к примеру, что длина стены равна 2,5 м, т.е. 250 см. 250 : 2,54 = 98 юнитов (хоть в первой, хоть во второй «халве», размерность в них одинаковая). Делаем браш с соответствующей длиной и т.д. Всё это, в общем-то, вам подскажет всемогущий Кэп, да вы и сами всё знаете. Далее, таким образом делаем-делаем, компилируем, и внезапно обнаруживаем, что игрок с трудом перемещается по пространству, не вмещается в дверной проём и т.п. Не стоит отчаиваться, потому то тут нам на помощь приходит один полезный параметр компиляции «hullfile» (поддерживается в компиляторах ZHLT и производных от них, таких как, например, VHLT), который позволяет изменить физические пропорции игрока. Мерили, значит, считали и строили под размер модели игрока, а теперь ещё зачем-то меняем его пропорции, где логика? – Спросите вы. А логика тут проста: в Half-Life бокс игрока имеет следующие размеры: 16 х 16 х 72 (ширина х длина х высота, в юнитах), и при такой его высоте, показатели длины и ширины, всё-таки немного завышены при маппинге узких помещений. Как пользоваться командой «Хуллфайл»: 1) Создаём текстовый документ, для примера назовём его hulls.txt 2) Состоять он должен из трёх строк вида «ширина от центра игрока, длина от центра игрока, высота игрока» (без кавычек), первая строка – размер игрока в положении стоя; вторая – размер большого хитбокса (для монстров, пушаблей); третья – размер игрока в положении сидя. Параметры по умолчанию:

16 16 72
64 64 64
16 16 36

По ним видно, что ширина и длина игрока равна 32 (16 + 16), нам же нужно, чтобы было, к примеру, 28, поэтому во всех строчках все числа 16 меняем на 14.

Пример изменения размера hull игрока

3) Прописываем в параметрах hlcsg «-hullfile hulls.txt». Компилируем и наслаждаемся.

Послесловие

В случае если изображение в игре вам кажется мелковатым, можно поиграться с консольной переменной default_fov. По умолчанию она равна 90, попробуйте приблизить взгляд, сделав, её равной, например, 80 или 85. И да, если вы делаете свой собственный супер-мод, то можно чуть поэкспериментировать и прировнять рост игрока к другим показателям, например, к своему собственному росту, тем самым получив новый размер юнита и не только… Но об этом позже)