Hint-площині використовуються для того, щоб розрізати листя в процесі компіляції, і є засобом оптимізації на стадії Vis -компілірованія карти.
Зазвичай, вони згадуються як звичайні хинт-браши. оскільки поміщаються в світ карти як звичайні браши. Хінт-площині визначаються стороною Браша, покритої текстурою tools / toolshint. Кілька хинт-поверхонь визначаються декількома пофарбованими сторонами одного або декількох Брашей. Решта боку Браша можуть бути покриті текстурою tools / toolsskip; ці межі будуть проігноровані компілятором.
Хинти автоматично прив'язуються до своєї вис-групі. так що ви легко можете приховати їх.
Навіщо і коли розрізати листя
Примітка: Вивчення роботи листя допоможе в розумінні даної статті.
Іноді, деякі форми листя найкращим за всі інші просто тому, що вони менше їх. Кожен раз, коли лист не видно, його вміст не промальовується, прискорюючи графіком.
Наступні ілюстрації показують важливість нарізки листя, і, в той же час, пропонують приклади того, де хинти корисні.
Перший приклад майже такий же, як і на карті SDK. Це кімната з гравцями і трубами, розділена стіною:
Приклад карти sdk_hints.vmf, яка б показала гравців зліва і моделі справа, розділені стіною.
Коли гравець знаходиться в одному з двох player_starts, движок повинен вирішити, які браши (труби) праворуч від стіни необхідно промальовувати. Це відбувається тому, що vbsp.exe не може ефективно розділити вашу карту на листя:
Без хинтов, vbsp створює листя аж до стелі.
Оскільки листя дуже високі і тягнуться до стелі, лист зліва (з гравцями) безпосередньо "бачить" лист з трубами справа. Таким чином, лист і вміст (труби) будуть промальовані. Це прикро, оскільки гравець не бачить труби безпосередньо (вони знаходяться за стіною в центрі). Ми використовуємо хинти, щоб показати процес створення листя.
Один горизонтальний хинт створює кілька листів, і два листа по обидва боки стіни не будуть бачити один одного.
Біла лінія - це сторона Браша з текстурою tools / toolshint. Він змушує vbsp розділити нашу карту на три листа. Тепер немає прямої лінії між листям з гравцями і трубами. Ось у чому суть хінтованія.
Скайбокси іноді завищені, щоб гравець міг бачити все будівлі в місті, що знаходиться на одному аркуші (як в нашому прикладі). Це теж хороша ситуація, коли можна використовувати хинти для обмеження видимості.
кутові хинти
Без хинтов, в цьому приміщенні буде рендери будь-який кут, коли стоїте в протилежному кутку.
Це вид зверху типового кута. Тут два гравця в різних кінцях (зелені квадрати) і циліндри, що представляють собою багато матеріалу для промальовування. В даному випадку мета хінтованія - уникнути відтворення непотрібних об'єктів, тобто коли гравець знаходиться за рогом щодо об'єктів.
Можна подумати, що vbsp переконаний, що гравці не бачать об'єкти, що належать іншому гравцеві. Це не так. Він розділить цей простір на два листа, або обріже листя уздовж коричневої або рожевою ліній (в залежності від сторони Браша).
У будь-якому випадку, обидва кутових листа безпосередньо бачать один одного, так що вміст кожного кута буде отрісовиваться під час знаходження в іншому кутку.
Додавання кутового хинт-Браша створить на аркушах кут, так що вони не будуть бачити один одного.
Цю ситуацію можна значно поліпшити, і розділити наш рівень на три листа, помістивши хинт в кут, (створивши в цілому три листа замість двох), але лише переконавшись, що об'єкти одного гравця не будуть видимі іншим.
Тут немає прямої видимості між червоним і коричневим листами, уникаючи непотрібної відтворення. Однак, якщо один гравець перейде на зелений лист, він буде бачити їх обидва - і свої і чужі об'єкти. Ви не зможете припинити це за допомогою хинтов. Це можна зробити або перекроювання макета рівня, або за допомогою таких методів, які описані, наприклад, в Управління видимістю геометрії і часом компіляції.
ще приклади
Різні способи використання хинтов. Works - працює, does not work - не працює, no hints needed - хинти не потрібні.
Ось кілька прикладів того, де і як використовувати хинти. У всіх випадках мета - приховати зелених гравців один від одного. Верхні три працюють як треба. Ліва ілюстрація показує, що поки кут хинт-Браша> 180 °, гравці не будуть "бачити" листя сусіда, тому як немає прямої видимості між їх листям. Нижній зліва приклад показує, що відбувається, якщо кут менше 180 °. Можна легко провести пряму лінію від листа до листа, що приводить до неробочим хинти.
Коли кут в коридорі 180 °, як на верхній середній зображенні, двох хинтов буде досить. Фактично, вони можуть бути навіть ближче до гравців, але це знизило б їх ефективність ( "за рогом" буде отрисовать більше матеріалу). В середньому нижньому прикладі, хинти були намальовані нижче і vbsp змушений обрізати вис-лист до верху, тому що вис-листи не можуть бути увігнутими. Не залежно від того, як vbsp ріже цей кут, хинти завжди будуть працювати менш ефективно і створювати зайві листи (більше роботи для vvis). Наприклад, лівий гравець може бачити листи 1 та 2 (ті ж поверхні, що і вище), але правий гравець побачить все три пронумерованих листа (більше, ніж у верхньому прикладі).
Дві правих картинки показують спрощені речі. Кращим є наявність одного хинта, як у верхньому прикладі. І, очевидно, хинти не повинні використовуватися, коли вони не потрібні, як на нижній картинці. Як показано, vbsp не може створювати листя, які дозволяють обом гравцям бачити один одного, тому немає необхідності використовувати для цього хинти (звичайно, хинти можна використовувати, щоб приховати частини коридорів). У цьому ж прикладі середня стіна ні в якому разі не повинна бути браш-деталлю. Геометричні деталі не створюють вис-листів і ігноруються vvis. Він буде думати, що гравці бачать один одного, а це не те, що нам потрібно. vbsp навіть може зробити так, що обидва гравці опиняться на одному аркуші.
В цілому, оскільки хинти не роблять прямого впливу на отрисовку під час гри, при грамотному використанні вони є основним способом прискорення вашої карти і управління видимістю.
Хинти для спрощення
Нарешті, хинти можна використовувати для спрощення карти. Іноді vbsp нарізає листя більше, ніж необхідно. Це збільшує час компіляції. Хинти можуть використовуватися для протидії цьому. Наприклад, хинти можуть бути поміщені в дверні прорізи, щоб запобігти розрізання кімнат, які вони з'єднують. Або, наприклад, якщо ви отримуєте повідомлення про помилку, що якийсь вис-лист утворює дуже багато інших вис-листів, хинти можу використовуватися для скорочення кількості кутів.
Примітка: Віс-листи завжди розрізаються кожні 1 024 одиниці (червоні і сині лінії в вікнах 2D-виду).
- sourcesdk_content \ hl2 \ mapsrc \ sdk_hints.vmf - приклад карти, включеної в Source SDK.