Как "пробилдить" cubemaps для карты под SFM

Введение

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


Для примера вот модель одного dev_елоперсокого оружия "weapon_cubemap", в SFM его нет, но модель существует. Именно с помощью неё можно продетектить, что на карте не пробилдены отражения или на ней вообще не присутствуют env_cubemap энтити.
Моделька проживает по адресу
models/shadertest/envballs.mdl

Пункт №1. Декомпиляция карты

Опишу декомпиляцию карты. Если у вас уже есть VMF исходник, переходим к пункту №2.

Для начала вам понадобится декомпилятор, чтобы получить из BSP - VMF файл, который смоджет открыть редактор Hammer Editor. Прога называется BSPSource и её можно скачать по следующей ссылке - https://github.com/ata4/bspsrc/releases
Для работы программы, у вас должна быть установлена последняя версия Java !
В проге всё просто: перетаскиваете нужный BSP в окошко и жмёте кнопочку Decompile.
Рядом с BSP файлом появится нужный VMF с припиской _d, по желанию можно убрать.

Пункт №2. Hammer Editor

Запускаем Hammer. Для этого запускаем в стиме SFM и выбираем Launch SDK место SFM. Открывается лаунчер, в котором жмём ссылку Hammer Editor.

Открываем полученный в пункте №1 VMF файл и натыкиваем, желательно по больше энтий env_cubemap. Чем их больше, тем больше вариаций отражений окружающией среды вы получите, но так-же из-за каждого env_cubemap карта будет толстеть, а билд отражений затянется на неприличное время.


Я расставил несколько env_cubemap примерно следующим образом. Замечу, что кубемапы стоит ставить примерно на высоте зрения игрока, ориентируйтесь по фигурке зелёного фримана =).


Я не буду рассказывать как ставятся энтити, как компилируется карта и всё остальное, это вы должны знать из других источников ! Лишь скажу, что у env_cubemap есть параметр размера кубемапа, если выставить Default то кубемапы билдятся по умолчанию 32х32, если хочется вы*бнуться, то можно поставить и 256х256, но карта разжиреет просто не прилично, а сам билд будет длится наверно минут 15.

Пункт №3. Подключение контента

Сам SFM не умеет билдить кубемапы вообще ! Для этого будем использовать бесплатную игру Alien Swarm Это самый близкий по версии движок. Некоторые до сих пор уверены, что для этого можно воспользоваться Portal 2, но это платная игра, весит она много и совершенно не дружит со сторонним контентом, по этому эти утверждения полная чушь !

Для подключения контента, нам надо пошаманить с GameInfo.txt у сварма. Для этого топаем в
...SteamSteamAppsCommonAlien Swarmswarmи находим там выше указанный файл. В разделе "SearchPaths" добавляем новую строчку, например
"Game" "d:GamesSteamSteamAppsCommonSourceFilmmakergameworkshop"Да, можно указать прямой путь до папки, ничего не копируя лишний раз.

Далее кидаем свежеиспечённый BSP из хаммера в папку
..SteamSteamAppsCommonAlien Swarmswarmmapsтолько туда и никуда больше ! Т.к. движок при билде работает только с корневой папкой maps.

Пункт №4. Запуск карты и билд

Запускаем Alien Swarm, открываем консольку и пишем map название_карты.
Например
map sfm_mirror_day
Ждём загрузки карты, после чего на экране выбора перса вбиваем в консоль следующие команды по порядку:
sv_cheats 1 building_cubemaps 1 buildcubemaps После чего наблюдаем быстрое мелькание различных ракурсов карты, это билдятся отражения. Ни в коем случае ничего не трогаем, не сварачиваем игру итд.

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

Если на карте присутствует текстура, которая имитирует зеркало, такую текстуру нужно временно переписать в VMT на обычный "LightmappedGeneric" шейдер, например
materials/dev/reflectivity_80b.vmtт.к. по ходу Alien Swarm не дружит с таким шейдером, после билда можно вернуть содержимое VMT на место.

Финальный результат

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