Ru/Cubemaps: Difference between revisions
mNo edit summary |
mNo edit summary |
||
Line 2: | Line 2: | ||
|title=Карты-кубы | |title=Карты-кубы | ||
|en=Cubemaps | |en=Cubemaps | ||
|es=Cubemaps:es | |||
|fr=Cubemaps:fr | |||
}} | }} | ||
[[Image:Env_cubemap.png|left]][[Image:Specular.jpg|thumb|350px|right|Зеркальные отражения.]] | [[Image:Env_cubemap.png|left]][[Image:Specular.jpg|thumb|350px|right|Зеркальные отражения на пропах.]] | ||
Чтобы движок Source правильно показывал многочисленные отражающие [[material:ru|материалы]], они должны быть объединены с внешними данными. Эти данные хранятся в виде карты-куба (cubemap), то есть кубической текстуры, которая представляет собой | Чтобы движок Source правильно показывал многочисленные отражающие [[material:ru|материалы]], они должны быть объединены с внешними данными. Эти данные хранятся в виде карты-куба (cubemap), то есть кубической текстуры, которая представляет собой трёхмерное изображение определённой области. Для этого движок Source использует точечные сущности [[env_cubemap]] в качестве образцов, с помощью которых создаёт текстуры и сохраняет их в файл с расширением "<code>.bsp</code>". При обработке зеркальных и других окружающих материалов он использует кубы для получения более точного окружения. Другими словами, куб создаёт текстуры, которые будут моделировать отражающую поверхность. | ||
{{note:ru|Для создания карты-куба (cubemap) в [[Counter-Strike: Global Offensive]] в параметрах запуска игры необходимо добавлять -insecure. }} | {{note:ru|Для создания карты-куба (cubemap) в {{csgo}}[[Counter-Strike: Global Offensive]] в параметрах запуска игры необходимо добавлять -insecure. }} | ||
{{note:ru|[[Portal 2]] и [[Team Fortress 2]] имеют проблемы с построением кубов. Они описаны в конце статьи. }} | {{note:ru|{{portal2}}[[Portal 2]] и {{tf2}}[[Team Fortress 2]] имеют проблемы с построением кубов. Они описаны в конце статьи. }} | ||
==Размещение== | ==Размещение== | ||
Чтобы обозначить область, которую охватит куб, просто вставьте на карту сущность [[env_cubemap]]. Когда карта скомпилируется программой [[ | Чтобы обозначить область, которую охватит куб, просто вставьте на карту сущность [[env_cubemap:ru|env_cubemap]]. Когда карта скомпилируется программой [[VBSP:ru|VBSP]], поверхности геометрии мира автоматически свяжут себя с ближайшей [[env_cubemap:ru|env_cubemap]], и будут использовать рождённый ей куб. Поверхности связывают себя с ближайшей [[env_cubemap:ru|env_cubemap]] (однако, в свойствах куба можно задать любую привязываемую поверхность); движущиеся сущности будут автоматически выбирать нужный куб. Важно, чтобы положение [[env_cubemap:ru|env_cubemap]] было эстетичным и производительным. | ||
Карты-кубы используются для разных ситуаций, и должны располагаться соответствующе. Одни нужны для отображения статической геометрии мира. Другие - для отображения сущностей игроков, включая ботов ([[NPC]]). Третьи нужны для отображения всевозможных неигровых энтить. Каждой из этих целей соответствует оптимальное расположение [[env_cubemap]], дабы обеспечить максимальную отдачу. Вот несколько простых эвристических правил, которым необходимо следовать: | Карты-кубы используются для разных ситуаций, и должны располагаться соответствующе. Одни нужны для отображения статической геометрии мира. Другие - для отображения сущностей игроков, включая ботов ([[NPC:ru|NPC]]). Третьи нужны для отображения всевозможных неигровых энтить. Каждой из этих целей соответствует оптимальное расположение [[env_cubemap:ru|env_cubemap]], дабы обеспечить максимальную отдачу. Вот несколько простых эвристических правил, которым необходимо следовать: | ||
*Если куб предназначен для NPC или игрока, [[env_cubemap]] следует размещать на уровне головы (как правило, 64 | *Если куб предназначен для NPC или игрока, [[env_cubemap:ru|env_cubemap]] следует размещать на уровне головы (как правило, 64 юнита). Таким образом, она наиболее точно передаст мир с точки зрения стоящего. | ||
*Если куб предназначен для статичной геометрии мира, то справедливым, как правило, будет расстояние в 16 | *Если куб предназначен для статичной геометрии мира, то справедливым, как правило, будет расстояние в 16 юнитов от всех поверхностей. | ||
*В каждой зоне с визуальным контрастом должна быть своя карта-куб. Коридор с ярко- | *В каждой зоне с визуальным контрастом должна быть своя карта-куб. Коридор с ярко-жёлтым светом требует своей [[env_cubemap:ru|env_cubemap]], особенно, если она расположена рядом с комнатой, где горит тускло-голубой свет. Если в одном их этих мест не будет [[env_cubemap:ru|env_cubemap]], то отражения и блики на сущностях и геометрии будут моделироваться неправильно. | ||
==Построение кубов== | ==Построение кубов== | ||
Когда карта будет скомпилирована и освещена [[ | Когда карта будет скомпилирована и освещена [[VBSP:ru|VBSP]] и [[VRAD:ru|VRAD]] (соответственно), можно создавать кубы. После загрузки карты, введите в [[Developer_Console:ru|консоли]] команду <code>buildcubemaps</code>. Начнётся процесс построения, который займёт некоторое время, в течение которого вы сможете увидеть каждую из шести граней кубов. После завершения, карту или игру нужно перезагрузить, чтобы кубы правильно применились ко всем поверхностям. | ||
{{note|До запуска команды <code>buildcubemaps</code>, установите значение <code>mat_specular</code> в 0, иначе это приведёт к неправильным отражениям!}} | {{note:ru|До запуска команды <code>buildcubemaps</code>, установите значение <code>mat_specular</code> в 0, иначе это приведёт к неправильным отражениям!}} | ||
{{note|Созданные кубы сохраняются в файл | {{note:ru|Созданные кубы сохраняются в bsp файл, который помещается в папку игры, а не в то место, где вы скомпилировали карту.}} | ||
{{note|Если после создания кубов вы переименуете файл | {{note:ru|Если после создания кубов вы переименуете bsp файл, то их придётся строить заново.}} | ||
===HDR=== | ===HDR=== | ||
Если карта скомпилирована с включённой опцией [[HDR|HDR]] в программе [[ | Если карта скомпилирована с включённой опцией [[HDR:ru|HDR]] в программе [[VRAD:ru|VRAD]], кубы '''необходимо''' построить как в режиме HDR, '''так и''' LDR (не-HDR). Создание кубов только в одном из этих режимов будет означать, что кубы не представлены в другом режиме. Информацию о том, как строить кубы под HDR см. в [[HDR_Lighting_Basics:ru|Основах освещения HDR]]. | ||
Кубы должны быть построены для карт LDR и HDR. Предположим, вы уже находитесь в режиме HDR и загрузили свежескомпилированную карту (в программе VRAD должен быть | Кубы должны быть построены для карт LDR и HDR. Предположим, вы уже находитесь в режиме HDR и загрузили свежескомпилированную карту (в программе VRAD должен быть включён параметр '<code>-both</code>'). Перейдите в консоль и выполните следующие команды: | ||
buildcubemaps | buildcubemaps | ||
Line 40: | Line 42: | ||
restart ''(для перезагрузки карты)'' | restart ''(для перезагрузки карты)'' | ||
{{note|Это не относится к CS:GO, т.к. HDR не может быть | {{note:ru|Это не относится к CS:GO, т.к. HDR не может быть отключён.}} | ||
===Игры Team Fortress 2 / Source 2012+ === | ===Игры Team Fortress 2 / Source 2012+ === | ||
[[Team Fortress 2]] по-умолчанию не применяет кубы к отражающим поверхностям. (Аналогичные проблемы также имеются и в некоторых установках [[Portal 2]], когда кубы просто не появляются). Все текстуры светятся чёрно-розовыми шашечками. Если вы построите кубы, и один из них увидит большую сверкающую поверхность, то зафиксирует её в 6 изображениях. Это значит, что некоторые объекты будут бликовать так, будто рядом с ними находится розовая и чёрная сверкающая текстура. Для решения проблемы, кубы нужно строить с отключенной зеркальностью. Чтобы построить кубы для карты TF2, загрузите её через "Create Server". Затем, откройте консоль и выполните следующие команды: | {{tf2}}[[Team Fortress 2]] по-умолчанию не применяет кубы к отражающим поверхностям. (Аналогичные проблемы также имеются и в некоторых установках {{portal2}}[[Portal 2]], когда кубы просто не появляются). Все текстуры светятся чёрно-розовыми шашечками. Если вы построите кубы, и один из них увидит большую сверкающую поверхность, то зафиксирует её в 6 изображениях. Это значит, что некоторые объекты будут бликовать так, будто рядом с ними находится розовая и чёрная сверкающая текстура. Для решения проблемы, кубы нужно строить с отключенной зеркальностью. Чтобы построить кубы для карты TF2, загрузите её через "Create Server". Затем, откройте консоль и выполните следующие команды: | ||
Создание кубов только для LDR '''или''' HDR: | Создание кубов только для LDR '''или''' HDR: | ||
Line 56: | Line 58: | ||
При создании кубов для HDR требуется, чтобы вы повторили эти шаги после загрузки карты с включённым HDR. | При создании кубов для HDR требуется, чтобы вы повторили эти шаги после загрузки карты с включённым HDR. | ||
{{note|Если при постройке кубов игра вылетает, то скорее всего вы установили слишком низкое разрешение экрана. Убедитесь, что высота и ширина экрана игры более 512 пикселей. Это означает, что минимальное стандартное разрешение должно составлять 800X600. Разрешение можно поменять на | {{note:ru|Если при постройке кубов игра вылетает, то скорее всего вы установили слишком низкое разрешение экрана. Убедитесь, что высота и ширина экрана игры более 512 пикселей. Это означает, что минимальное стандартное разрешение должно составлять 800X600. Разрешение можно поменять на вкладке Видео в меню игры Параметры.}} | ||
{{note|Если после построения кубов вы переименуете файл .bsp, они перестанут работать и куб неба сбросится в стандартные настройки. Каждый раз после переименования карты кубы нужно создавать заново. Однако, в этом случае старые кубы не удаляются, что приводит к разрастанию размера файла. Если вы желаете избежать проблем с загрузкой вашей карты, не переименовывайте её после компиляции.}} | {{note:ru|Если после построения кубов вы переименуете файл .bsp, они перестанут работать и куб неба сбросится в стандартные настройки. Каждый раз после переименования карты кубы нужно создавать заново. Однако, в этом случае старые кубы не удаляются, что приводит к разрастанию размера файла. Если вы желаете избежать проблем с загрузкой вашей карты, не переименовывайте её после компиляции.}} | ||
{{note|В некоторых играх на многопользовательских картах перед запуском команды <code>buildcubemaps</code> потребуется включить читы (<code>sv_cheats 1</code>).}} | {{note:ru|В некоторых играх на многопользовательских картах перед запуском команды <code>buildcubemaps</code> потребуется включить читы (<code>sv_cheats 1</code>).}} | ||
===Кубы после обновления SteamPipe=== | ===Кубы после обновления SteamPipe=== | ||
Line 75: | Line 77: | ||
# Подождите, пока построятся кубы, и снова включите зеркальность с помощью "mat_specular 1", а затем перезагрузите ваши материалы командой "mat_reloadallmaterials". | # Подождите, пока построятся кубы, и снова включите зеркальность с помощью "mat_specular 1", а затем перезагрузите ваши материалы командой "mat_reloadallmaterials". | ||
{{note|Если вы хотите упаковать в карту пользовательский контент, сделайте это после создания кубов.}} | {{note:ru|Если вы хотите упаковать в карту пользовательский контент, сделайте это после создания кубов.}} | ||
</code> | </code> | ||
===Source Filmmaker=== | ===Source Filmmaker=== | ||
Сегодня создание кубов в Source Filmmaker не работает, и отрисовывает только одну поверхность с одним кубом. Чтобы правильно создавать кубы в Source Filmmaker, скопируйте файл карты вместе с принадлежностями (текстурами, моделями, и т.д.) в [[Alien Swarm]]. Движок не требует перекомпиляции карты, достаточно её перенести. Загрузите вашу карту в Alien Swarm и введите в консоль команду "buildcubemaps". После отрисовки поверхностей, ваша карта будет содержать кубы, которые можно скопировать обратно в Source Filmmaker. Это работает только с новыми версиями карт, при загрузке карт из [[TF2]] или [[Garry's Mod]] игра будет вылетать. | Сегодня создание кубов в Source Filmmaker не работает, и отрисовывает только одну поверхность с одним кубом. Чтобы правильно создавать кубы в Source Filmmaker, скопируйте файл карты вместе с принадлежностями (текстурами, моделями, и т.д.) в {{as}}[[Alien Swarm]]. Движок не требует перекомпиляции карты, достаточно её перенести. Загрузите вашу карту в Alien Swarm и введите в консоль команду "buildcubemaps". После отрисовки поверхностей, ваша карта будет содержать кубы, которые можно скопировать обратно в Source Filmmaker. Это работает только с новыми версиями карт, при загрузке карт из {{tf2}}[[TF2]] или [[Garry's Mod]] игра будет вылетать. | ||
Откройте 'не скопированную' версию в Хаммер и постройте её с помощью дополнительного режима поиска 'чужих' (относительных) путей содержимого sfm. todo: абсолютные пути. | Откройте 'не скопированную' версию в Хаммер и постройте её с помощью дополнительного режима поиска 'чужих' (относительных) путей содержимого sfm. todo: абсолютные пути. |
Revision as of 02:53, 27 April 2021
Чтобы движок Source правильно показывал многочисленные отражающие материалы, они должны быть объединены с внешними данными. Эти данные хранятся в виде карты-куба (cubemap), то есть кубической текстуры, которая представляет собой трёхмерное изображение определённой области. Для этого движок Source использует точечные сущности env_cubemap в качестве образцов, с помощью которых создаёт текстуры и сохраняет их в файл с расширением ".bsp
". При обработке зеркальных и других окружающих материалов он использует кубы для получения более точного окружения. Другими словами, куб создаёт текстуры, которые будут моделировать отражающую поверхность.
Template:Note:ru Template:Note:ru
Размещение
Чтобы обозначить область, которую охватит куб, просто вставьте на карту сущность env_cubemap. Когда карта скомпилируется программой VBSP, поверхности геометрии мира автоматически свяжут себя с ближайшей env_cubemap, и будут использовать рождённый ей куб. Поверхности связывают себя с ближайшей env_cubemap (однако, в свойствах куба можно задать любую привязываемую поверхность); движущиеся сущности будут автоматически выбирать нужный куб. Важно, чтобы положение env_cubemap было эстетичным и производительным.
Карты-кубы используются для разных ситуаций, и должны располагаться соответствующе. Одни нужны для отображения статической геометрии мира. Другие - для отображения сущностей игроков, включая ботов (NPC). Третьи нужны для отображения всевозможных неигровых энтить. Каждой из этих целей соответствует оптимальное расположение env_cubemap, дабы обеспечить максимальную отдачу. Вот несколько простых эвристических правил, которым необходимо следовать:
- Если куб предназначен для NPC или игрока, env_cubemap следует размещать на уровне головы (как правило, 64 юнита). Таким образом, она наиболее точно передаст мир с точки зрения стоящего.
- Если куб предназначен для статичной геометрии мира, то справедливым, как правило, будет расстояние в 16 юнитов от всех поверхностей.
- В каждой зоне с визуальным контрастом должна быть своя карта-куб. Коридор с ярко-жёлтым светом требует своей env_cubemap, особенно, если она расположена рядом с комнатой, где горит тускло-голубой свет. Если в одном их этих мест не будет env_cubemap, то отражения и блики на сущностях и геометрии будут моделироваться неправильно.
Построение кубов
Когда карта будет скомпилирована и освещена VBSP и VRAD (соответственно), можно создавать кубы. После загрузки карты, введите в консоли команду buildcubemaps
. Начнётся процесс построения, который займёт некоторое время, в течение которого вы сможете увидеть каждую из шести граней кубов. После завершения, карту или игру нужно перезагрузить, чтобы кубы правильно применились ко всем поверхностям.
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.
Кубы после обновления SteamPipe
В связи с обновлением SteamPipe, возникла проблема построения кубов без видимых результатов. Согласно ветке форума, проблему можно решить следующим образом:
Template:Bug:ru
- Поместите энтити 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" (или каталог карт вашего мода), перезагрузите её и создайте кубы снова. Это должно работать.
Тестирование
Лучше всего карты-кубы тестировать с помощью консольной команды impulse 81
. Введите её в консоль. Затем, впишите give
weapon_cubemap.

Это заменит текущую модель оружия с "cubemap weapon" на несколько сфер, каждая со своей отражающей поверхностью. Путешествуя по карте, вы увидите, где и как применяются кубы в пространстве, а также, на сколько верно куб описывает зону освещения и цвета.


Производительность
Сущность env_cubemap
позволяет задавать разрешение связываемой с ней текстуры. С одной стороны, чем больше разрешение, тем точнее и “резче” результат, но с другой – сильнее расход памяти. В основном, кубы должны иметь разрешение по умолчанию (32x32 пикселя для каждой поверхности). Обычно это дает удовлетворительный результат. Некоторые исключения возможны для областей с высокой отражающей способностью или, например, для детализации определенных частей действия.
Поскольку поверхности через кубы должны соответствовать своему окружению, использование чрезмерного числа кубов на небольшой площади может привести к заметным визуальным разрывам во время перемещения по карте. Для участков с высокой отражающей способностью правильнее будет разместить один куб по цетру, и не более. Это позволит избежать швов или растрескиваний во время движения картинки.
Чтобы определить вес кубов в той или иной зоне, загляните в категорию World Rendering с помощью консольной команды +showbudget
. Если категория регистрирует необычайно высокую загрузку, значит в зоне слишком много кубов. Простой сценарий решения проблемы – скрыть все кубы в программе Hammer, перекомпилировать и запустить карту. Если производительность стала заметно лучше, значит надо уменьшить плотность или разрешение кубов.
Наконец, проверить загрузку можно, отключая кубы командой mat_specular 0
, но это требует подтверждения.
Баги

