Витік - Valve Developer Community
Що таке виток (leak)?
Рівні, створені для Source Engine, мають бути повністю ізольованими. Це означає, що простір вашого рівня не повинен стикатися із зовнішнім світом, з "порожнечою", простіше кажучи, ваш рівень не повинен містити "дірок". Таким чином, небо повинне реалізовуватися за допомогою браша з нанесеною на нього tools/toolsskybox текстурою. Коли простір рівня "доторкається" до порожнечі, при компіляції карти vbsp генеруєтьсяleak. Коли відбувається витік, компілятор не знає, яка частина рівня знаходиться всередині, а яка зовні та vvis не може бути запущена. Якщо vvis не запускати, безліч ефектів може не працювати або працювати неправильно, включаючи воду і деякі поверхні будуть виглядати як клуби пилу.
Цей приклад показує карту з неправильно геометрією, що з'єднує простір рівня та порожнечу. При компіляції буде видано помилку витоку:

Коли карта компілюється з такою діркою, vbsp виводить повідомлення про помилку в лог компіляції:
Цим повідомленням про помилку, vbsp повідомляє Вам про присутність витоку на карті, а так само назва першої ентіті, що трапилася йому пов'язаної з порожнечею ( у нашому випадку, це світло ). 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)
Використання "Нетвердої" геометрії

Ще однією причиною витоків є спроба загортання "дірок" рівня з використанням так званої нетвердої геометрії, наприклад ландшафт, вода, або використання браша func_detail. Жоден з цих "нетвердих" типів браша не блокуватиме видимість на рівні. Спроба використовувати їх у такий спосіб створить витоку. Ви можете виправити цей тип витоку, додавши звичайний браш за ними, для загортання "дірки" на рівні.
Використовуйте браш для закладання "дірок" на рівні з матеріалом tools/toolsnodraw .
Неправильне розміщення допоміжних об'єктів (originhelpers)

Менш очевидні причини витоку можуть бути з будь-яким енті, які створені як func_door_rotating або func_rot_button і використовує допоміжні об'єкти (origin helpers) (наприклад, при створенні кнопки (func_rot_button) потрібно створювати вісь обертання, яка і є допоміжним об'єктом). З одного боку енти (наприклад сама кнопка) як така може розміщуватися всередині рівня, але сам допоміжний об'єкт (origin helper) зовні, або десь перетинає межу рівня, це призведе до витоку. Так якщо у Вас виникла помилка leak і vbsp зміг генерувати pointfile (ім'я_карти.lin), то на місці вказаному у файлі реально об'єкта може і не бути. І тут потрібно шукати сам допоміжний об'єкт (origin helper).
Один із способів дізнатися, чи є допоміжний об'єкт (origin) джерелом помилки:
- Завантажте пункт файлу (ім'я_картки.lin).
- Знайдіть кінцеві точки в пунктіфайлу (тобто слідуйте за червоною лінією до кінця, методика пошуку розписані вище).
- Виберіть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 інструментів робить пошук витоків більш простим, а ще простіше рішення і очевидне - це запобігання витоку. Насамперед переконайтеся, що браші прив'язані до сітки, тк. Виробництво геометрії рівня сітки виключить виникнення дірок при стиковці брашей. Також не забувайте, що при створенні рівня перш ніж ускладнювати його об'єктами і додатковою геометрією - перевірте його на витік, т.к. Потім шукати коли на карті буде купа будь-яких об'єктів вкрай важко.