Ru/Leak: Difference between revisions
Thunder4ik (talk | contribs) m (Unicodifying, replaced: [[Image: → [[File: (8)) |
No edit summary |
||
Line 2: | Line 2: | ||
Карты [[BSP]] изнутри должны быть полностью герметичны. Ни одна деталь | Карты [[BSP]] изнутри должны быть полностью герметичны. Ни одна деталь интерьера карты не должна соприкасаться с внешним миром, с "[[Void|пустотой]]". Даже небо должно быть запечатано коробом из элементов с текстурой <code>tools/toolsskybox</code>. Если на карте появляется какая-либо щель в пустоту, то во время компиляции [[VBSP|VBSP]] немедленно генерируется '''leak''' . Когда происходит утечка, [[VBSP|VBSP]] не знает, какая часть уровня находится внутри, а какая снаружи, и не отработает должным образом. В этом случае не будут работать некоторые эффекты, например, воды. | ||
Пример ниже показывает карту с явной дырой в геометрии, ведущей в пустоту. При компиляции будет выдана ошибка утечки: | Пример ниже показывает карту с явной дырой в геометрии, ведущей в пустоту. При компиляции будет выдана ошибка утечки: | ||
Line 8: | Line 8: | ||
[[File:hammer_leaks1.jpg|frame|left|px=200|Дыра в геометрии, приводящая к утечке.]]{{clr}} | [[File:hammer_leaks1.jpg|frame|left|px=200|Дыра в геометрии, приводящая к утечке.]]{{clr}} | ||
Когда карта компилируется с такой дырой, [[VBSP | Когда карта компилируется с такой дырой, [[VBSP|VBSP]] выводит в журнал компиляции сообщение об ошибке : | ||
<pre> | <pre> | ||
Line 16: | Line 16: | ||
</pre> | </pre> | ||
Здесь VBSP сообщает | Здесь VBSP сообщает Вам об утечке и указывает название первой попавшегося ему объекта мира, связанного с пустотой (в нашем случае, это свет). Он также даёт местоположение этого объекта, выраженное в координатах мира X, Y и Z. | ||
{{Note|Зачастую, | {{Note|Зачастую, упомянутый объект не является причиной утечки, это всего лишь след. Его удаление не решит проблему, просто будет указан другой объект! Но существует ситуация, когда удаление объекта устраняет утечку: это когда он находится за границам игровой карты. Этот случай будет описан ниже.}} | ||
{{Note|Если ваша карта не содержит ни | {{Note|Если ваша карта не содержит ни одного объекта, [[VSBP|VBSP]] может сообщить об утечке, поскольку нет способа определить, какая часть является интерьером карты, а какая пустотой.}} | ||
{{Note|Карты [[Portal 2]] не будут компилироваться при возникновении утечки, кроме случаев просмотра карт в [[Portal 2 Puzzle Maker | {{Note|Карты [[Portal 2]] не будут компилироваться при возникновении утечки, кроме случаев просмотра карт в [[Portal 2 Puzzle Maker|puzzlemaker]].}} | ||
{{Note|В Portal 2, {{csgo | {{Note|В Portal 2, {{csgo}}[[Counter-Strike: Global Offensive|Counter-Strike: Global Offensive]] и {{Game link|Alien Swarm}}, если возникает утечка и не запускается [[VVIS|VVIS]], карта не сможет скомпилировать скайбокс.}} | ||
== Эффекты утечек == | == Эффекты утечек == | ||
Утечка на уровне имеет ряд негативных эффектов. Во первых, <code>vbsp</code> будет сообщать о наличии утечки, и не создаст ''portal'' файл (<code>''mapname''.prt</code>). ''portal'' файл используется <code>[[VVIS | Утечка на уровне имеет ряд негативных эффектов. Во первых, <code>vbsp</code> будет сообщать о наличии утечки, и не создаст ''portal'' файл (<code>''mapname''.prt</code>). ''portal'' файл используется <code>[[VVIS|vvis]]</code> для вычислений визуализации. Без ''portal'' файла <code>vvis</code> вообще не запустится. Соответственно <code>vvis</code> не создаст файлы необходимые для работы <code>[[VRAD|VRAD]]</code>, рассчитывающим сложное освещение. По этой причине <code>vrad</code> рассчитает только прямое освещение - никакой трассировки и сложных эффектов со светом. | ||
Наиболее частой проблемой на сегодняшний день является то, что <code>vvis</code> не запустится пока на карте есть утечка. Это в свою очередь, при запуске уровня, приведет к тому, что Source движок не будет знать как следует визуализировать уровень и какие ограничения накладывать на этот процесс, поэтому движок попытается отрисовать весь уровень. Это безусловно приведет к необходимости рендерить большое количество полигонов и неправильной или не полной отрисовки некоторых частей карты. | Наиболее частой проблемой на сегодняшний день является то, что <code>vvis</code> не запустится пока на карте есть утечка. Это в свою очередь, при запуске уровня, приведет к тому, что Source движок не будет знать как следует визуализировать уровень и какие ограничения накладывать на этот процесс, поэтому движок попытается отрисовать весь уровень. Это безусловно приведет к необходимости рендерить большое количество полигонов и неправильной или не полной отрисовки некоторых частей карты. | ||
Line 57: | Line 57: | ||
== Другие причины вызывающие утечку (leaks) == | == Другие причины вызывающие утечку (leaks) == | ||
Помимо ошибок связанных с геометрией уровня, могут возникать и другие причины утечки, которые генерирует [[VBSP | Помимо ошибок связанных с геометрией уровня, могут возникать и другие причины утечки, которые генерирует [[VBSP|VBSP]]. | ||
=== | === Объекты (Entities) размещённые за пределами карты === | ||
[[File:hammer_leaks2.jpg||thumb|300px|right|Размещение любого | [[File:hammer_leaks2.jpg||thumb|300px|right|Размещение любого объекта в пустоте [[Void]] приведёт к утечке (leak).]] | ||
Одна из распространённых ошибок является случайным размещением | Одна из распространённых ошибок является случайным размещением объекта за пределами карты. Допустим, в начале разработки карты Вы поместите для удобства несколько объектов за приделами карты, а после забудете удалить. | ||
Также распространённая ошибка, когда Вы с помощью | Также распространённая ошибка, когда Вы с помощью объекта (например <code>func_door</code>) "заделываете" границу карты, например это может быть дверь у кабинета и т.п. Любые объекты реально не блокируют видимости при компиляции vbsp, т.е. если за объектом "дырка" на уровне, то для vbsp это будет являться утечкой и вызовет ошибку Leak. | ||
Также не стоит забывать, что все | Также не стоит забывать, что все объекты должны быть внутри допустимой области памяти карты (от перв.: т.е. если размещённые объекты заходят одной частью за границу уровня, то это будет являться утечкой для vbsp), так как vbsp сравнивает границы уровня с координатами и размерами объектов.{{clr}} | ||
=== Неправильно построенный | === Неправильно построенный ареапортал(areaportal) === | ||
[[File:hammer_leaks3.jpg||thumb|300px|right|Areaportal'ы которые не прилегают в плотную к соответствующим | [[File:hammer_leaks3.jpg||thumb|300px|right|Areaportal'ы которые не прилегают в плотную к соответствующим элементам карты - вызовут утечку.]] | ||
Особенно часто неправильно размещают [[areaportal| | Особенно часто неправильно размещают [[areaportal|ареапортал(areaportal)]] при создание дверных проёмов с дверьми. Потому как, если в проёме встречаются не только [[brush|элементы карты]], а еще и объекты, то ареапортал надо продлить до настоящих элементов карты. Т.е. [[areaportal|ареапортал(areaportal)]] должен полностью собой перегородить все элементы карты соприкасающиеся с ним. | ||
Метод нахождения проблемного [[areaportal|ареапортала(areaportal)]] такой же как и при нахождение утечки на уровне который описан выше. | Метод нахождения проблемного [[areaportal|ареапортала(areaportal)]] такой же как и при нахождение утечки на уровне который описан выше. | ||
Более подробно этот вопрос рассмотрен в разделе про [[areaportal|ареапорталы(areaportal)]] {{clr}} | Более подробно этот вопрос рассмотрен в разделе про [[areaportal|ареапорталы(areaportal)]] {{clr}} | ||
Line 74: | Line 74: | ||
[[File:hammer_leaks4.jpg||thumb|300px|right|Заделывания "дырки" на уровне с помощью "нетвёрдой" геометрии вызовет утечку.]] | [[File:hammer_leaks4.jpg||thumb|300px|right|Заделывания "дырки" на уровне с помощью "нетвёрдой" геометрии вызовет утечку.]] | ||
Ещё одной причиной утечек является попытка заделывания "дырок" уровня с использованием так называемой нетвёрдой геометрии, например, ландшафт, вода, или использование | Ещё одной причиной утечек является попытка заделывания "дырок" уровня с использованием так называемой нетвёрдой геометрии, например, ландшафт, вода, или использование объекта [[func_detail]]. Ни один из этих "нетвёрдых" типов объектов не будет блокировать видимость на уровне. Попытка использовать их таким образом создаст утечки. Вы можете исправить этот тип утечки, добавив обычный элемент за ними, для заделывания "дырки" на уровне. | ||
Используйте | Используйте элемент для заделывания "дырок" на карте с материалом <code>tools/toolsnodraw</code>.{{clr}} | ||
=== Неправильное размещение | === Неправильное размещение центров объектов (origin helpers) === | ||
[[File:hammer_origin_leak.jpg|thumb|300px|right| | [[File:hammer_origin_leak.jpg|thumb|300px|right|Метка центра (origin helper), отделённая от родительского объекта за пределы карты, вызывает '''утечку''')]] | ||
Менее очевидные причины утечки могут быть с любым | Менее очевидные причины '''утечки''' могут быть с любым объектом, которые созданы как [[func_door_rotating]] или [[func_rot_button]] и используют метки центра (origin helpers) (так например, при создании кнопки (func_rot_button) нужно создавать ось вращения, которая является меткой центра). С одной стороны объект (например сама кнопка) сам по себе может размещаться внутри карты, но метка центра (origin helper) снаружи, либо где-то пересекает границу карты, то это приведёт к '''утечке'''. | ||
Так если у Вас возникла ошибка leak и vbsp смог генерировать pointfile (имя_карты.lin), то на месте указанном в файле реально объекта может и не быть. В этом случае необходимо искать | Так если у Вас возникла ошибка '''утечка'''(leak) и vbsp смог генерировать pointfile (имя_карты.lin), то на месте указанном в файле реально объекта может и не быть. В этом случае необходимо искать '''метку центра'''(origin helper). | ||
Один из способов узнать является ли | Один из способов узнать является ли '''метка центра''' (origin) источником ошибки: | ||
# Загрузите pointfile (имя_карты.lin). | # Загрузите pointfile (имя_карты.lin). | ||
# Найдите конечные точки в pointfile (т.е. следуйте за красной линией до конца, методика поиска расписаны выше). | # Найдите конечные точки в pointfile (т.е. следуйте за красной линией до конца, методика поиска расписаны выше). | ||
# Выберите '''Select All''' из меню '''Edit Menu'''. | # Выберите '''Select All''' из меню '''Edit Menu'''. | ||
# Убедитесь что в меню вида '''View Menu''' выбран пункт '''[[Hammer_View_Menu#Show Helpers|Show Helpers]]'''. | # Убедитесь что в меню вида '''View Menu''' выбран пункт '''[[Hammer_View_Menu#Show Helpers|Показать метки(Show Helpers)]]'''. | ||
# Если | # Если Вы увидели после этого объект типа '''метка центра'''(origin helper) при загруженном pointfile, то значит проблема именно в этом. | ||
Если у | Если у Вас утечку вызывает именно '''метка центра'''(origin helper), то вы можете выбрать этот объект и вручную переместить его внутрь карты, используйте для этого команду [[Hammer_Tools_Menu#Center_Origins|Center Origins]] из меню '''Tools Menu''', или щёлкните правой кнопкой мыши по '''метке центра'''(origin helper) и выберите '''Center on entity'''. | ||
Неправильное размещение | Неправильное размещение '''меток центра''' обычно происходят, когда объект (например [[func_rot_button]]) с одним из меткой центра (origin helper) перемещается в режиме [[Hammer_Selection_Modes_Toolbar|Тела(Solids)]]. Перемещение [[brush entity|объёмного элемента мира]] в режиме [[Hammer_Selection_Modes_Toolbar|Тела(Solids)]] не перемещает '''метки центра'''(origin helpers).{{clr}} | ||
=== Прозрачная геометрия === | === Прозрачная геометрия === | ||
Существует частный случай, когда ваша геометрия может полностью закрывать все "дырки" уровня и тем не менее утечка будет постоянно появляться, даже если у Вас нет абсолютно ни одного объекта вокруг места утечки. Если загрузка pointfile Вам не помогла, то скорее всего это именно тот случай. | Существует частный случай, когда ваша геометрия может полностью закрывать все "дырки" уровня и тем не менее утечка будет постоянно появляться, даже если у Вас нет абсолютно ни одного объекта вокруг места утечки. Если загрузка pointfile Вам не помогла, то скорее всего это именно тот случай. | ||
Загрузив pointfile | Загрузив pointfile Вы увидите что, красная линия будет проходить через некоторые элементы. Причина довольно проста - скорее всего у Вас одна из сторон элемента текстурирована полупрозрачным материалом. В такой ситуации этот элемент не будет закрывать эту часть карты, и следовательно это будет являться "дыркой". В большинстве случаев, это также вызовет проблемы с граничащими с этими элементами ареапорталами (areaportals), которые также вследствие этого не смогут изолировать карту от пустоты. | ||
Помните, что стороны | Помните, что стороны элемента с текстурами могут быть расположены где угодно, даже между другими элементами. | ||
== Заключение: Как говорится легче болезнь предупредить, чем её лечить! == | == Заключение: Как говорится легче болезнь предупредить, чем её лечить! == | ||
Использование pointfile инструментов делает поиск утечек более простым, а ещё более простое решение и очевидное - это предотвращение утечки. В первую очередь убедитесь, что | Использование pointfile инструментов делает поиск утечек более простым, а ещё более простое решение и очевидное - это предотвращение утечки. В первую очередь убедитесь, что элементы привязаны к сетке, т.к. создание геометрии уровня по сетке исключит возникновение дырок при стыковке элементов. Также не забывайте, что при создании уровня прежде чем его усложнять объектами и дополнительной геометрией - проверьте его на утечку, т.к. потом искать когда на карте будет куча всяких объектов крайне затруднительно. | ||
[[Category:Level Design | [[Category:Level Design]][[Category:Level Design FAQ]][[Category:Glossary]] |
Revision as of 19:30, 1 June 2024
Карты BSP изнутри должны быть полностью герметичны. Ни одна деталь интерьера карты не должна соприкасаться с внешним миром, с "пустотой". Даже небо должно быть запечатано коробом из элементов с текстурой tools/toolsskybox
. Если на карте появляется какая-либо щель в пустоту, то во время компиляции VBSP немедленно генерируется leak . Когда происходит утечка, VBSP не знает, какая часть уровня находится внутри, а какая снаружи, и не отработает должным образом. В этом случае не будут работать некоторые эффекты, например, воды.
Пример ниже показывает карту с явной дырой в геометрии, ведущей в пустоту. При компиляции будет выдана ошибка утечки:
Когда карта компилируется с такой дырой, VBSP выводит в журнал компиляции сообщение об ошибке :
ProcessBlock_Thread: 0...1...2...3...4...5...6...7...8...9...10 (0) **** leaked **** Entity light (-1607.69 -1094.12 -183.00) leaked!
Здесь VBSP сообщает Вам об утечке и указывает название первой попавшегося ему объекта мира, связанного с пустотой (в нашем случае, это свет). Он также даёт местоположение этого объекта, выраженное в координатах мира X, Y и Z.






Эффекты утечек
Утечка на уровне имеет ряд негативных эффектов. Во первых, vbsp
будет сообщать о наличии утечки, и не создаст portal файл (mapname.prt
). portal файл используется vvis
для вычислений визуализации. Без portal файла vvis
вообще не запустится. Соответственно vvis
не создаст файлы необходимые для работы VRAD
, рассчитывающим сложное освещение. По этой причине vrad
рассчитает только прямое освещение - никакой трассировки и сложных эффектов со светом.
Наиболее частой проблемой на сегодняшний день является то, что vvis
не запустится пока на карте есть утечка. Это в свою очередь, при запуске уровня, приведет к тому, что Source движок не будет знать как следует визуализировать уровень и какие ограничения накладывать на этот процесс, поэтому движок попытается отрисовать весь уровень. Это безусловно приведет к необходимости рендерить большое количество полигонов и неправильной или не полной отрисовки некоторых частей карты.
Быстрый способ проверки на утечку (leaked)
При компиляции карты зачастую будут возникать ошибки об утечки (leaked) (а если учесть то сколько времени Вы можете потратить на полную компиляцию карты, лишь для того чтобы узнать что ваша карта не работает (есть ошибка leaked)), поэтому перед полной компиляцией карты, всегда делайте быструю. Это позволит Вам быстро отловить ошибки на карте и в конечном итоге сэкономит время. Для этого: нажмите F9 (File->Run Map), в открывшемся диалоге установите для VIS и RAD свойство NO, а также отметьте пункт Don't run game after compiling (не запускать игру после компиляции) и Wait for keypress when done compiling (закрывать окно компиляции после нажатия клавиши):
Поиск утечки(leaks) на карте
Иногда утечка(leaked) не столь очевидна, как в примере выше. Она может составлять всего лишь одну единицу ширины и соответственно по-прежнему будет вызывать ошибку. Для этого необходимо использовать инструменты компиляции, в нашем случае это pointfile. Pointfile это файл, созданный vbsp
, типа имя карты.lin
. После возникновения ошибки об утечки, vbsp
сгенерирует файл имя карты.lin
, который будет создан в той же директории, где находится ваш .vmf файл.
Загрузка Pointfile (файл имя карты.lin
)
Это изображение показывает загруженный pointfile на вашей карте. Обратите внимание, что красная линия появляется в обоих 3D-и 2D-видах.
Таким образом, вы можете найти источник утечки(leaked), следуя за красной линией. Начинайте поиск с объекта, указанного в сообщение об ошибке vbsp
во время компиляции. Следуйте за красной линией пока не найдете разрыв в геометрии. Устраните разрыв и перекомпилируйте уровень, чтобы перейти к следующему объекту вызвавшего ошибку leaked.
Поиск источника утечки
Если у вас возникли проблемы с поиском объекта(источника), который вызвал ошибку, Вы можете использовать координаты объекта которые Вам указал компилятор, далее чтобы ввести эти координаты выберите в меню View->Go to Coordinates и введите координаты. При этом в 2D-и 3D видах будет показан заданный объект.
Другой метод нахождения источника утечки заключается в уменьшении масштаба в одном из 2D видах. После загрузки pointfile, уменьшите масштаб, пока не увидите красную линию. Следуйте за линией, пока не определите причину утечки. Затем выделите объект и в меню выберите View->Center 3D Views on Selection. Теперь Вы можете увидеть утечку в 3D виде.
Другие причины вызывающие утечку (leaks)
Помимо ошибок связанных с геометрией уровня, могут возникать и другие причины утечки, которые генерирует VBSP.
Объекты (Entities) размещённые за пределами карты

Одна из распространённых ошибок является случайным размещением объекта за пределами карты. Допустим, в начале разработки карты Вы поместите для удобства несколько объектов за приделами карты, а после забудете удалить.
Также распространённая ошибка, когда Вы с помощью объекта (например func_door
) "заделываете" границу карты, например это может быть дверь у кабинета и т.п. Любые объекты реально не блокируют видимости при компиляции vbsp, т.е. если за объектом "дырка" на уровне, то для vbsp это будет являться утечкой и вызовет ошибку Leak.
Также не стоит забывать, что все объекты должны быть внутри допустимой области памяти карты (от перв.: т.е. если размещённые объекты заходят одной частью за границу уровня, то это будет являться утечкой для vbsp), так как vbsp сравнивает границы уровня с координатами и размерами объектов.
Неправильно построенный ареапортал(areaportal)
Особенно часто неправильно размещают ареапортал(areaportal) при создание дверных проёмов с дверьми. Потому как, если в проёме встречаются не только элементы карты, а еще и объекты, то ареапортал надо продлить до настоящих элементов карты. Т.е. ареапортал(areaportal) должен полностью собой перегородить все элементы карты соприкасающиеся с ним. Метод нахождения проблемного ареапортала(areaportal) такой же как и при нахождение утечки на уровне который описан выше.
Более подробно этот вопрос рассмотрен в разделе про ареапорталы(areaportal)
Использование "Нетвёрдой" геометрии
Ещё одной причиной утечек является попытка заделывания "дырок" уровня с использованием так называемой нетвёрдой геометрии, например, ландшафт, вода, или использование объекта func_detail. Ни один из этих "нетвёрдых" типов объектов не будет блокировать видимость на уровне. Попытка использовать их таким образом создаст утечки. Вы можете исправить этот тип утечки, добавив обычный элемент за ними, для заделывания "дырки" на уровне.
Используйте элемент для заделывания "дырок" на карте с материалом tools/toolsnodraw
.
Неправильное размещение центров объектов (origin helpers)
Менее очевидные причины утечки могут быть с любым объектом, которые созданы как func_door_rotating или func_rot_button и используют метки центра (origin helpers) (так например, при создании кнопки (func_rot_button) нужно создавать ось вращения, которая является меткой центра). С одной стороны объект (например сама кнопка) сам по себе может размещаться внутри карты, но метка центра (origin helper) снаружи, либо где-то пересекает границу карты, то это приведёт к утечке. Так если у Вас возникла ошибка утечка(leak) и vbsp смог генерировать pointfile (имя_карты.lin), то на месте указанном в файле реально объекта может и не быть. В этом случае необходимо искать метку центра(origin helper).
Один из способов узнать является ли метка центра (origin) источником ошибки:
- Загрузите pointfile (имя_карты.lin).
- Найдите конечные точки в pointfile (т.е. следуйте за красной линией до конца, методика поиска расписаны выше).
- Выберите Select All из меню Edit Menu.
- Убедитесь что в меню вида View Menu выбран пункт Показать метки(Show Helpers).
- Если Вы увидели после этого объект типа метка центра(origin helper) при загруженном pointfile, то значит проблема именно в этом.
Если у Вас утечку вызывает именно метка центра(origin helper), то вы можете выбрать этот объект и вручную переместить его внутрь карты, используйте для этого команду Center Origins из меню Tools Menu, или щёлкните правой кнопкой мыши по метке центра(origin helper) и выберите Center on entity.
Неправильное размещение меток центра обычно происходят, когда объект (например func_rot_button) с одним из меткой центра (origin helper) перемещается в режиме Тела(Solids). Перемещение объёмного элемента мира в режиме Тела(Solids) не перемещает метки центра(origin helpers).
Прозрачная геометрия
Существует частный случай, когда ваша геометрия может полностью закрывать все "дырки" уровня и тем не менее утечка будет постоянно появляться, даже если у Вас нет абсолютно ни одного объекта вокруг места утечки. Если загрузка pointfile Вам не помогла, то скорее всего это именно тот случай. Загрузив pointfile Вы увидите что, красная линия будет проходить через некоторые элементы. Причина довольно проста - скорее всего у Вас одна из сторон элемента текстурирована полупрозрачным материалом. В такой ситуации этот элемент не будет закрывать эту часть карты, и следовательно это будет являться "дыркой". В большинстве случаев, это также вызовет проблемы с граничащими с этими элементами ареапорталами (areaportals), которые также вследствие этого не смогут изолировать карту от пустоты. Помните, что стороны элемента с текстурами могут быть расположены где угодно, даже между другими элементами.
Заключение: Как говорится легче болезнь предупредить, чем её лечить!
Использование pointfile инструментов делает поиск утечек более простым, а ещё более простое решение и очевидное - это предотвращение утечки. В первую очередь убедитесь, что элементы привязаны к сетке, т.к. создание геометрии уровня по сетке исключит возникновение дырок при стыковке элементов. Также не забывайте, что при создании уровня прежде чем его усложнять объектами и дополнительной геометрией - проверьте его на утечку, т.к. потом искать когда на карте будет куча всяких объектов крайне затруднительно.