Метод борьбы с ошибкой утечки пространства на BSP-карте игры
Метод борьбы с ошибкой утечки
Метод борьбы с ошибкой утечки пространства на BSP-карте игры
Author/s of tutorial : ObaGlaza Views : 2162 ( +1 ) Downloads : 0 Uploader : SlaY_61 Created : 10/17/2011 7:31:47 PM Rating : ( 5 ) Share :
Following translations are available : |
russian |
Допустим компиляция в hlbsp прошла плохо и вместо BSP generation successful выдала ошибку вроде такой:
Warning: === LEAK in hull 0 ===
Entity light_spot @ (2520,-1533, 13)
Error:
A LEAK is a hole in the map
Проблема в деталях
В движках игр, родственных Quake (в т.ч. Half-Life), предварительно просчитывается невидимая непроходимая и непростреливаемая структура стен, короче говоря — каркас границ столкновений (clip hull). Этих каркасов в Half-Life создаётся по четыре (в Quake по 3) для просчёта
столкновений с точечным объектом
нулевой размер
"hull 0"
столкновений с игроком в полный рост
размер цилиндра 32x32x72
"hull 1"
столкновений с крупным объектом
размер цилиндра 64x64x72
"hull 2"
столкновений с игроком на корточках
размер цилиндра 32x32x36
"hull 3"
Ошибка "LEAK in hull 0" означает утечку пространства в каркасе границ столкновений для точечных объектов (в игре есть малосущественное исключение: когда задаёшь "размер точки" объекту типа func_pushable, то вместо точечного там обсчитывается минимальный объём 16x16x16). Очевидно, что самым подробным будет каркас для просчёта реакции на точечные объекты, а чем крупнее объект берётся, тем более грубой будет объёмная структура и сильнее будут срезаться некоторые углы, потому что, например, не везде, где пролезет точечный объект, пройдёт и игрок на корточках. Иначе говоря, в место утечки может завалиться точечный объект, а возможно даже более крупный. И тогда при просчёте падения или движения свободного полёта он улетит опасно далеко для работы игрового движка — для того это и отслеживается при компиляции карты.
Способ исправления:
Смотришь на виде сверху — в плоскости осей X0Y — положение обозначенного в ошибке объекта (в нашем примере с x =2520, y =-1533), до которого добежала утечка. Одну половину уровня временно закрываешь огромным брашевым параллелепипедом. И компилируешь только первыми двумя компиляторами hlcsg и hlbsp. Т.к. их работа проходит быстро, то секунд через 5, на крайний случай минуты через полторы уже решаешь по принципу "недолёт-перелёт" что делать дальше: если нет утечки, уменьшаешь параллелепипед, если есть — увеличиваешь. И продолжая так сканировать гранями временного блока, не проходит и пятнадцати минут, как ты уже смотришь на источник заморочек и обрадованно думаешь: "Попался, который скрывался!"
Ещё как вариант можете попробовать программку LeakMarker, которая рисует красный блок в месте утечки. Хотя она тоже не панацея.
Дописывая статью, узнал, что метод перекрытия параллелограммами маппер Skaarj тоже давно использует и всем рекомендует.
Similar 1. Стекло - Что такое стекло? Стекло это энтити. Стёкла бывают: 1-разбиваемые, 2-неразбиваемые, 3-разбиваемые от тригера... 2. Ночь на карте. - Многие задают вопрос 3. Видео камеры. - наверняка вы сами не раз пользовались камерами, когда играли в Контр-Страйк . Так вот, в этом небольшом уроке я и попытаюсь объяснить как их делать. 4. Озвучивание текстур - Как вы наверное уже знаете, для того чтобы текстура зазвучала, её имя должно быть прописано в файле materials.txt... 5. Движущаяся камера - Хотите узнать как сделать движущуюся камеру чтоб когда вы её активировали видимое изображение 6. Создание сценария - Урок по созданию сценария для начинающих 7. Загадка размера юнита. Реалмаппинг - Небольшое такое исследование 8. Двигающиеся NPC - Сегодня мы с Вами заставим NPC ходить, бегать, проигрывать анимацию 9. Говорящие NPC - Сегодня мы с Вами заставим NPC говорить, они же не все немые как Гордон
You cannot comment, because you are not logged-in.