Карты-кубы
Чтобы движок Source правильно показывал многочисленные отражающие материалы , они должны быть объединены с внешними данными. Эти данные хранятся в виде карты-куба (cubemap), то есть кубической текстуры, которая представляет собой трёхмерное изображение определённой области. Для этого движок Source использует точечные сущности env_cubemap в качестве образцов, с помощью которых создаёт текстуры и сохраняет их в файл с расширением ".bsp
". При обработке зеркальных и других окружающих материалов он использует кубы для получения более точного окружения. Другими словами, куб создаёт текстуры, которые будут моделировать отражающую поверхность.
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
![Counter-Strike: Global Offensive](/w/images/thumb/8/85/Csgo_icon.png/16px-Csgo_icon.png)
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
![Portal 2](/w/images/thumb/3/3c/Portal2_icon.png/16px-Portal2_icon.png)
![Team Fortress 2](/w/images/thumb/8/84/Tf2-16px.png/16px-Tf2-16px.png)
Contents
Размещение
Чтобы обозначить область, которую охватит куб, просто вставьте на карту сущность env_cubemap . Когда карта скомпилируется программой VBSP , поверхности геометрии мира автоматически свяжут себя с ближайшей env_cubemap , и будут использовать рождённый ей куб. Поверхности связывают себя с ближайшей env_cubemap (однако, в свойствах куба можно задать любую привязываемую поверхность); движущиеся сущности будут автоматически выбирать нужный куб. Важно, чтобы положение env_cubemap было эстетичным и производительным.
Карты-кубы используются для разных ситуаций, и должны располагаться соответствующе. Одни нужны для отображения статической геометрии мира. Другие - для отображения сущностей игроков, включая ботов (NPC ). Третьи нужны для отображения всевозможных неигровых энтить. Каждой из этих целей соответствует оптимальное расположение env_cubemap , дабы обеспечить максимальную отдачу. Вот несколько простых эвристических правил, которым необходимо следовать:
- Если куб предназначен для NPC или игрока, env_cubemap следует размещать на уровне головы (как правило, 64 юнита). Таким образом, она наиболее точно передаст мир с точки зрения стоящего.
- Если куб предназначен для статичной геометрии мира, то справедливым, как правило, будет расстояние в 16 юнитов от всех поверхностей.
- В каждой зоне с визуальным контрастом должна быть своя карта-куб. Коридор с ярко-жёлтым светом требует своей env_cubemap , особенно, если она расположена рядом с комнатой, где горит тускло-голубой свет. Если в одном их этих мест не будет env_cubemap , то отражения и блики на сущностях и геометрии будут моделироваться неправильно.
Построение кубов
Когда карта будет скомпилирована и освещена VBSP и VRAD (соответственно), можно создавать кубы. После загрузки карты, введите в консоли команду buildcubemaps
. Начнётся процесс построения, который займёт некоторое время, в течение которого вы сможете увидеть каждую из шести граней кубов. После завершения, карту или игру нужно перезагрузить, чтобы кубы правильно применились ко всем поверхностям.
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
buildcubemaps
, установите значение mat_specular
в 0, иначе это приведёт к неправильным отражениям!![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
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 (для перезагрузки карты)
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
Игры 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.
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
buildcubemaps
потребуется включить читы (sv_cheats 1
).Кубы после обновления SteamPipe
В связи с обновлением SteamPipe, возникла проблема построения кубов без видимых результатов. Согласно ветке форума, проблему можно решить следующим образом:
![Icon-Bug.png](/w/images/thumb/b/b4/Icon-Bug.png/10px-Icon-Bug.png)
- Поместите энтити 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.
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
Это заменит текущую модель оружия с "cubemap weapon " на несколько сфер, каждая со своей отражающей поверхностью. Путешествуя по карте, вы увидите, где и как применяются кубы в пространстве, а также, на сколько верно куб описывает зону освещения и цвета.
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
Производительность
Сущность env_cubemap
позволяет задавать разрешение связываемой с ней текстуры. С одной стороны, чем больше разрешение, тем точнее и “резче” результат, но с другой – сильнее расход памяти. В основном, кубы должны иметь разрешение по умолчанию (32x32 пикселя для каждой поверхности). Обычно это дает удовлетворительный результат. Некоторые исключения возможны для областей с высокой отражающей способностью или, например, для детализации определенных частей действия.
Поскольку поверхности через кубы должны соответствовать своему окружению, использование чрезмерного числа кубов на небольшой площади может привести к заметным визуальным разрывам во время перемещения по карте. Для участков с высокой отражающей способностью правильнее будет разместить один куб по цетру, и не более. Это позволит избежать швов или растрескиваний во время движения картинки.
Чтобы определить вес кубов в той или иной зоне, загляните в категорию World Rendering с помощью консольной команды +showbudget
. Если категория регистрирует необычайно высокую загрузку, значит в зоне слишком много кубов. Простой сценарий решения проблемы – скрыть все кубы в программе Hammer, перекомпилировать и запустить карту. Если производительность стала заметно лучше, значит надо уменьшить плотность или разрешение кубов.
Наконец, проверить загрузку можно, отключая кубы командой mat_specular 0
, но это требует подтверждения.
Баги
![Icon-Bug.png](/w/images/thumb/b/b4/Icon-Bug.png/10px-Icon-Bug.png)
![Icon-Bug.png](/w/images/thumb/b/b4/Icon-Bug.png/10px-Icon-Bug.png)