Руководство по HINT брашам
Перед статьёй добавлю, очень хорошие пособие по снижению Р_спед (Dragor)
Перед тем, как начать разбирать, что же все таки это за таинственные хинт-браши, давай договоримся о том, что будем использовать Зонеровские утилиты компиляции aka ZHLT (думаю, раз ты дошел до такого уровня в картостроении, что начал читать эту статью, то ты, наверное, слышал о таких прогах J). С пакетом Зонеров предлагается графическая библиотека в формате *.wad. Имя ей ZHLT.wad. Подключи эту библиотеку к своему листу текстур в WC и получишь две текстуры: HINT и SKIP. Ну и конечно у тебя должна быть последняя версия WC (3.3). Итак, если все эти условия тебя устраивают, то продолжим. Да! И кто не знает, наберите в консоли: r_speeds 1, и developer 1, что бы узнать r_speeds на карте.

1. Теория. Как работает VIS?
VIS расшифровывается как Visibility Information Set. То есть в переводе с английского: стабилизатор видимого пространства. Это значит, комп будет обрабатывать то видимое пространство, которое с его точки зрения должен видеть человек. В конечном итоге движок Халфы будет рисовать на твоем мониторе то, что до этого скомпилила прога VIS. Но как ни странно мнение компа не всегда совпадает с мнением юзера, то есть vis может нарисовать очень много ненужного и привезти к повышению r_speeds. И вот тут на помощь приходят Хинт браши. Они помогут существенно снизить r_speeds. Кстати, как завещал великий и ужасный, на карте r_speeds не должен превышать 600 w_poly. С хинт брашами это условие становится более реальным и выполнимым. Итак, подытожим: Хинт браши служат, для того чтобы управлять прогой VIS самостоятельно. Уф! С первым пунктом разобрались. Едем дальше.

2. Что делают хинт браши?
Vis при компиляции делит всю видимую часть на треугольники (например квадрат на два треугольника) или так называемые VIS blocks - виз блоки (Далее вб.). Чем меньше виз блок, тем меньше будет обрабатываться видимое пространство. Соответственно чем больше вб. тем больше обрабатывается. Хинт браши делят эти вб. на более маленькие. Допустим, у нас есть главный коридор с перпендикулярными к нему ответвлениями, заканчиваемся комнатами. (Рис. 1):


А вот как расположит компьютер вб. после компиляции (рис. 2):

Каждый вб. имеет свои точки обзора. Когда игрок находится в определенном вб. движок воспроизводит все что видно с этого виз блока. Следовательно, r_speeds повышается. В нашем примере r_speeds будет больше всего в районе центрального коридора, в 2 самых больших виз блоках так как у них площадь больше остальных след. и видимость с них больше, но только по логике компа. В реальности мы ну ни как не можем с точки игрока увидеть виз блоки №№2,3 и тп. (рис. 3):

Но как это объяснить компу? Легко! Тут на помощь и приходят Хинт браши. С помощью них без проблем укорачиваются все большие виз блоки. (рис. 4):

В нашем примере следует поделить центральный коридор на два хинт браша (рис. 4), что бы поделить самые большие виз блоки на более мелкие. Теперь посмотри разницу. Как видно игрок уже стоит на более мелком виз блоке и след. движок уже обрабатывает намного меньше не нужных видимых поверхностей. (рис. 5):

Зеленым цветом помечены не обрабатываемые виз блоки. Есть разница? Есть. Итак: Vis создает виз блоки - зоны, с которых обрабатывается визуальная поверхность карты. В большинстве случаев vis создает очень большие виз блоки. Результат приводит к повышению r_speeds, так как движок обрабатывает все, что видно с данного виз блока, даже если игрок не видит этого на своем мониторе. Хинт браши "режут" виз блоки, что уменьшает визуализацию карты, и существенно уменьшая r_speeds. Идем дальше.

3. Каким образом делать хинт браши и размещать их на карте?
Вообще, термин "Хинт браш" немного не корректен. Надо сказать, что текстурой "хинт" закрашивается ТОЛЬКО одна сторона браша, остальное закрашивается текстурой "SKIP". Если ты используешь шестисторонний блок (Для хинт брашей рекомендую использовать именно кубо-образный блок), то надо закрасить 5 сторон текстурой "Скип", а последнюю сторону - текстурой "Хинт". Какую сторону покрасить текстурой "хинт"? Именно ту, которая будет резать виз блок на две части. Допустим, ты хочешь порезать виз блок, который находится на полу. Ставишь в коридоре блок с текстурами скип и с текстурой хинт. Т.е. хинт должна закрашивать сторону, соприкасающуюся с полом коридора. Боковые стороны хинт браша должны немного врезаться в стены коридора, то есть хинт браш должен быть немного шире, чем ширина коридора. Собственно осталось только скомпилировать.

4. Как узнать: работают или нет хинт браши? Во-первых: r_speeds должен значительно упасть, конечно, если вы использовали хинт браши должным образом. Злоупотребление хинт брашами может привести к существенному подъему r_speeds! Но об этом чуть позже. Во-вторых, нужно запомнить, где ты приблизительно расставил хинт браши. Переходя из одного виз блока в другой, r_speeds будет скакать. Если он скачет с максимума на минимум (на пример с 800 до 500) и ты помнишь, что здесь ставил хинт браш, то все работает.

5. Где надо размещать хинт браши?
Вернемся к предыдущему примеру с коридором. Самое разумное - разместить хинт браши так (рис. 6):

Такой способ расположения хинт брашей уменьшает r_speeds, но увеличивает время компиляции. Вот собственно, какие виз блоки будет видно (рис. 7):

Однако, если игрок переместится на несколько сантиметров вправо, в соседний правый треугольник, выгода от хинт-брашей существенно падает. Аналогично произойдет если игрок передвинется вверх на пару метров, в треугольник по выше (рис. 8):

Сравните рис. 8 с первым случаем расположения хинт брашей (рис. 9):

Как можно заметить, сравнив эти два случая, второй подход выигрывает в том случае, если игрок находится в начале коридора (рис. 7) (т.к. r_speeds меньше из-за того, что невидимых виз блоков больше). Но когда игрок появляется в середине коридора, первый случай превосходит второй по r_speeds(рис.8 и рис.9). Вообще r_speeds всегда будет больше в середине, чем в конце. Можно совместить эти два случая (рис. 10):

Но это приведет к потере времени при компиляции (приемлемо для мощных компьютеров). На рис. 10 мы почти добились того, что бы комнаты не были видны. В принципе, местоположение хинт брашей зависит от логики и от геймплея карты. Например, в нашем коридоре если бы главной точкой карты было бы начало коридора, то сюда подходит больше способ №2 (рис. 7), а если бы был центр коридора, то соответственно первый способ (рис. 9).

Внимание: В тех местах, где хинт браши соприкасаются с другими блоками (брашами) будет добавляться по 1 w_poly, а возможно и больше. Но, учитывая какую пользу они приносят, я думаю пережить это можно.

6. Где надо размещать хинт браши? (Способ №2) К сожалению хинт браши никак не влияют на браши-ентити (func_walls func_door func_water и т.д.). Рассмотрим такой случай (рис. 11)(розовые квадраты обозначают, к примеру, func_wall стулья):

Вот как расположил комп виз блоки (рис. 12):

Даже если игрок будет стоять здесь и не видеть ни одного стула, комп все равно будет уверен, что игрок их видит, и будет тратить в пустую свои ресурсы на прорисовку этих самых стульев (рис. 13):

Большинство проблем решается, если хинт браши расположить таким образом (рис. 14):

Результат: стульев обрабатывается меньше след. r_speeds меньше. (рис. 15):

В следующем случае хинт браши не нужны т.к. компьютер сам правильно расположил виз блоки (рис. 16):

Итак, подытожим: например в первой точке r_speeds больше чем в точке которая находится через пару метров от первой. Ставим хинт браши. R_speeds падает в первой, но может повысится во второй. Здесь уже надо смотреть, насколько важна вторая точка и первая. Нужно подстраиваться под архитектуру карты. Итак, надеюсь, что все понятно? Если да, то едем дальше.

7. Vis, хинт браши и трехмерность. Отличительной чертой хороших карт является трехмерность передвижения. То есть ты можешь двигаться и по оси x и по оси y и по оси z или по горизонтали, вертикали и диагонали. Вообще, виз блоки трехмерны. До этого мы рассматривали виз блоки только в 2D изображении. Теперь рассмотрим случаи в 3D. Виз блоки могут быть вертикальны, горизонтальны и диагональные. По этому если у вас на карте есть браши (забор, стены и т.д.), не достигающие неба, то компьютер будет думать, что вы видите и за этими
стенами, чего, конечно, в реальности не наблюдается. (рис. 17):

Вот как приблизительно выглядят виз блоки (рис. 18):

Помните, что виз блоки не лежат на земле, а находятся примерно на уровне глаз игрока. Вот пример применения Хинт брашей для горизонтальных поверхностей (рис. 19)

Игрок стоит на тумбочке и видит всего первую комнату с компьютером и стулом. Остальные две ему недосягаемы. Стоит ему подпрыгнуть и ему становится видно все три комнаты. А вот диаграмма с виз блоками (рис. 20):

До использования хинт брашей, игрок видел в обычном положении то же самое, что и при прыжке, по логике компьютера. Но на самом деле, когда он стоял в реальности ничего не видел. А разницы между прыжком и стоячим положением никакой. Следовательно, r_speeds такой же большой в стоячем положении, как и в прыжке. Наша задача снизить r_speeds, когда игрок стоит. Делим виз блоки с помощью хинт брашей (рис. 21):

Заметь, что проекция расположения виз блоков другая, нежели в примере с коридором, но суть одна и та же. Вообще, удается в некоторых случаях снизить r_speeds на 400-600 w_poly, а это уже результат.

8. Заключение
Итак, используй хинт браши с умом и очень осторожно. В хинт брашах нет ничего сложного. Сложно все это понять. Самое главное понять основу и теорию, а дальше важна логика. Мысленно представляй себе виз блоки дели их и ДУМАЙ. Это самое главное. Удачи в продвинутом карто-строении.


Источники:
http://www.gamedesign.net/?file=rust/content/quake2/tutorials/hint
http://countermap.counter-strike.net/Tutorials/tutorial.php?id=2

Автор: LipuringA

CMT (CS Mapping Tutorials) - © 2006-2011+. Created by VM
[ Script Execution time: 0.0043 ]