Карты-кубы
Чтобы движок Source правильно показывал многочисленные отражающие материалы , они должны быть объединены с внешними данными. Эти данные хранятся в виде карты-куба (cubemap), то есть кубической текстуры, которая представляет собой трёхмерное изображение определённой области. Для этого движок Source использует точечные сущности env_cubemap в качестве образцов, с помощью которых создаёт текстуры и сохраняет их в файл с расширением ".bsp
". При обработке зеркальных и других окружающих материалов он использует кубы для получения более точного окружения. Другими словами, куб создаёт текстуры, которые будут моделировать отражающую поверхность.
Размещение
Чтобы обозначить область, которую охватит куб, просто вставьте на карту сущность env_cubemap . Когда карта скомпилируется программой VBSP , поверхности геометрии мира автоматически свяжут себя с ближайшей env_cubemap , и будут использовать рождённый ей куб. Поверхности связывают себя с ближайшей env_cubemap (однако, в свойствах куба можно задать любую привязываемую поверхность); движущиеся сущности будут автоматически выбирать нужный куб. Важно, чтобы положение env_cubemap было эстетичным и производительным.
Карты-кубы используются для разных ситуаций, и должны располагаться соответствующе. Одни нужны для отображения статической геометрии мира. Другие - для отображения сущностей игроков, включая ботов (NPC ). Третьи нужны для отображения всевозможных неигровых энтить. Каждой из этих целей соответствует оптимальное расположение env_cubemap , дабы обеспечить максимальную отдачу. Вот несколько простых эвристических правил, которым необходимо следовать:
- Если куб предназначен для NPC или игрока, env_cubemap следует размещать на уровне головы (как правило, 64 юнита). Таким образом, она наиболее точно передаст мир с точки зрения стоящего.
- Если куб предназначен для статичной геометрии мира, то справедливым, как правило, будет расстояние в 16 юнитов от всех поверхностей.
- В каждой зоне с визуальным контрастом должна быть своя карта-куб. Коридор с ярко-жёлтым светом требует своей env_cubemap , особенно, если она расположена рядом с комнатой, где горит тускло-голубой свет. Если в одном их этих мест не будет env_cubemap , то отражения и блики на сущностях и геометрии будут моделироваться неправильно.
Построение кубов
Когда карта будет скомпилирована и освещена VBSP и VRAD (соответственно), можно создавать кубы. После загрузки карты, введите в консоли команду buildcubemaps
. Начнётся процесс построения, который займёт некоторое время, в течение которого вы сможете увидеть каждую из шести граней кубов. После завершения, карту или игру нужно перезагрузить, чтобы кубы правильно применились ко всем поверхностям.
buildcubemaps
, установите значение mat_specular
в 0, иначе это приведёт к неправильным отражениям!HDR
Если карта скомпилирована с включённой опцией HDR в программе VRAD , кубы необходимо построить как в режиме HDR, так и LDR (не-HDR). Создание кубов только в одном из этих режимов будет означать, что кубы не представлены в другом режиме. Информацию о том, как строить кубы под HDR см. в Основах освещения HDR .
Кубы должны быть построены для карт LDR и HDR. Предположим, вы уже находитесь в режиме HDR и загрузили свежескомпилированную карту (в программе VRAD должен быть включён параметр '-both
'). Перейдите в консоль и выполните следующие команды:
buildcubemaps mat_hdr_level 0 (для перехода в LDR) restart (для перезагрузки карты) buildcubemaps mat_hdr_level 2 (для перехода обратно в HDR) restart (для перезагрузки карты)
Игры Team Fortress 2 / Source 2012+
Team Fortress 2 по-умолчанию не применяет кубы к отражающим поверхностям. (Аналогичные проблемы также имеются и в некоторых установках Portal 2 , когда кубы просто не появляются). Все текстуры светятся чёрно-розовыми шашечками. Если вы построите кубы, и один из них увидит большую сверкающую поверхность, то зафиксирует её в 6 изображениях. Это значит, что некоторые объекты будут бликовать так, будто рядом с ними находится розовая и чёрная сверкающая текстура. Для решения проблемы, кубы нужно строить с отключенной зеркальностью. Чтобы построить кубы для карты TF2, загрузите её через "Create Server". Затем, откройте консоль и выполните следующие команды:
Создание кубов только для LDR или HDR:
mat_specular 0 buildcubemaps mat_specular 1 disconnect sv_cheats 1 mat_reloadallmaterials sv_cheats 0
При создании кубов для HDR требуется, чтобы вы повторили эти шаги после загрузки карты с включённым HDR.
buildcubemaps
потребуется включить читы (sv_cheats 1
).Кубы после обновления SteamPipe
В связи с обновлением SteamPipe, возникла проблема построения кубов без видимых результатов. Согласно ветке форума, проблему можно решить следующим образом:
- Поместите энтити env_cubemap в доступных местах вашей карты, и скомпилируйте её. Важно: Название карты должно быть не длиннее 30 символов, (включая расширение .bsp), иначе .bsp не запишется! Также, не меняйте название карты после создания кубов, иначе они не будут работать!
- Возьмите ваш любимый редактор файлов .bsp (Например, VIDE или Pakrat. Работа с этими инструментами не входит в данную статью.), и загрузите ваш .bsp.
- Удалите все файлы "Texture" или "Texture (HDR) ". (Не файлы "Material", только .vtf!)
- Сохраните отредактированный .bsp.
- Скопируйте эту карту назад в каталог карт вашей игры.
- Откройте консоль и введите: "map -название карты-". (В моём случае, "ttt_mars_colony_cubemap".)
- В игре, снова откройте консоль и введите это: "mat_specular 0" и "buildcubemaps".
- Подождите, пока построятся кубы, и снова включите зеркальность с помощью "mat_specular 1", а затем перезагрузите ваши материалы командой "mat_reloadallmaterials".
Примечание:Если вы хотите упаковать в карту пользовательский контент, сделайте это после создания кубов.
Source Filmmaker
Сегодня создание кубов в Source Filmmaker не работает, и отрисовывает только одну поверхность с одним кубом. Чтобы правильно создавать кубы в Source Filmmaker, скопируйте файл карты вместе с принадлежностями (текстурами, моделями, и т.д.) в Alien Swarm . Движок не требует перекомпиляции карты, достаточно её перенести. Загрузите вашу карту в Alien Swarm и введите в консоль команду "buildcubemaps". После отрисовки поверхностей, ваша карта будет содержать кубы, которые можно скопировать обратно в Source Filmmaker. Это работает только с новыми версиями карт, при загрузке карт из TF2 или Garry's Mod игра будет вылетать.
Откройте 'не скопированную' версию в Хаммер и постройте её с помощью дополнительного режима поиска 'чужих' (относительных) путей содержимого sfm. todo: абсолютные пути.
Пример для 'общего' расположения:
"SearchPaths" { "Game" "|gameinfo_path|." "Game" "swarm" "Game" ".\..\SourceFilmmaker\game\tf_movies" "Game" ".\..\SourceFilmmaker\game\tf" "Game" ".\..\SourceFilmmaker\game\usermod" "Game" ".\..\SourceFilmmaker\game\hl2" "Game" "swarm_base" "Game" "platform" }
Portal 2
Если вы хотите создавать кубы для карт, расположенных в "Portal 2/portal2/maps" (Hammer копирует карты туда по-умолчанию), Portal 2 вылетит, потому что ищет карты в разделе "portal2_dlc2/maps". Так что, если вы хотите избежать сбоя, скопируйте вашу карту в "Portal 2/portal2_dlc2/maps" (или каталог карт вашего мода), перезагрузите её и создайте кубы снова. Это должно работать.
Black Mesa
Перед тем как строить кубмапы в Black Mesa , запустите игру с такими параметрами bms.exe -oldgameui -dev -console +r_4way_use_fast_normals 0 +mat_specular 0
Далее запустите карту и введите в консоли buildcubemaps
Тестирование
Лучше всего карты-кубы тестировать с помощью консольной команды impulse 81
. Введите её в консоль. Затем, впишите give
weapon_cubemap.
Это заменит текущую модель оружия с "cubemap weapon " на несколько сфер, каждая со своей отражающей поверхностью. Путешествуя по карте, вы увидите, где и как применяются кубы в пространстве, а также, на сколько верно куб описывает зону освещения и цвета.
Производительность
Сущность env_cubemap
позволяет задавать разрешение связываемой с ней текстуры. С одной стороны, чем больше разрешение, тем точнее и “резче” результат, но с другой – сильнее расход памяти. В основном, кубы должны иметь разрешение по умолчанию (32x32 пикселя для каждой поверхности). Обычно это дает удовлетворительный результат. Некоторые исключения возможны для областей с высокой отражающей способностью или, например, для детализации определенных частей действия.
Поскольку поверхности через кубы должны соответствовать своему окружению, использование чрезмерного числа кубов на небольшой площади может привести к заметным визуальным разрывам во время перемещения по карте. Для участков с высокой отражающей способностью правильнее будет разместить один куб по цетру, и не более. Это позволит избежать швов или растрескиваний во время движения картинки.
Чтобы определить вес кубов в той или иной зоне, загляните в категорию World Rendering с помощью консольной команды +showbudget
. Если категория регистрирует необычайно высокую загрузку, значит в зоне слишком много кубов. Простой сценарий решения проблемы – скрыть все кубы в программе Hammer, перекомпилировать и запустить карту. Если производительность стала заметно лучше, значит надо уменьшить плотность или разрешение кубов.
Наконец, проверить загрузку можно, отключая кубы командой mat_specular 0
, но это требует подтверждения.