Sidebar

С чем едят Areaportal'ы

  • Рекомендуется задавать вопросы только относительно темы с уроком. Для остальных вопросов существует раздел [url=/forums/pomosch.12/]«Помощь»[/url].

    Темы с просьбами помощи будут удаляться без предупреждения и без объяснения причины.

    Запрещается поднятие старой темы оффтопом. Ваше сообщение будет удалено, а в профиль будет выписано замечание.

haos9cr

Member
06.12.2009
247
0
16
С чем едят Areaportal'ы

С чем едят Areaportal'ы​
Источник

Введение

Когда мы закрываем непрозрачную дверь, мы не видим что находится по ту сторону. А движок видит. И мало того, тратит на это свои ресурсы. Убедиться в этом можно набрав в консоли mat_wireframe 1.
Когда мы издалека видим только окно в комнату, движок отрисовывает всю комнату. Кому? Очевидно воронам на проводах.
Конечно это не справедливо. Но у нас есть средство борьбы с несправедливостью - ареапорталы.

Включенный ареапортал жестоко отрезает от взора движка (ну и конечно от нашего взора) все что находится по другую его сторону. Для этого он должен перегораживать собой весь проем. И чтобы никаких там func_detail или func_brush. Они не остановят движок. Если в проеме встречаются не только браши, а еще и энтити, то ареапортал надо продлить до настоящих брашей. Проще понять на примере.

Часть первая - Исключаем прорисовку карты за закрытой дверью

Создадим пару небольших комнаток с дверью между ними. Двери даем какое-нибудь имя, оно нам пригодится. Если вы читаете такой муторный тутор, то это вы уже уметь должны. В противном случае бросайте читать :).
Я сразу усложнил себе задачу сделав раму двери func_detail.
За дверью накидаю ящиков чтобы было на что смотреть сквозь двери. Получилось примерно так:
Потом закрываем это добро потолком, компилируем, запускаем, пишем в консоли mat_wireframe 1 и наслаждаемся контурами ящиков сквозь закрытую дверь.
Полное безобразие.
Где же наш спаситель, где рыцарь на белом коне... Ну в смысле по размеру дверного проема создаем новый браш (это удобно делать в виде сверху, предварительно выделив дверь и раму), покрываем его текстурой tools/toolsareaportal, и тут же конвертим его (Ctrl+T) в func_areaportal.
Заходим в его свойства, и делаем две вещи: Initial state - ставим Closed (чтобы он был включен вместе с закрытой дверью), и указываем в Name of Linked door - нашу дверь. Не зря же мы ей имя дали.
Очень аккуратно помещаем его внутрь созданной ранее двери так, чтобы его не было видно, и так чтобы он прилегал вплотную к стенам. Вот кое-как сделал скрин, надеюсь понятно что я это в упор смотрю сквозь дверь чтобы увидеть наш ареапортал. А вообще его не должно быть видно ни с какой стороны!
Ну вот... А что вот? Компилируем, и наслаждаемся чудом!
Чудо - чудом, но возле дверей бывают окна. И одно паршивое окошечко, сведет на нет все наши труды по оптимизации.
Часть вторая - Борьба с окнами
Сделаем рядом с распрекраснейшей дверью, отвратительное окно. Непременным условием такового, является прозрачность. Примерно так.
Как я и предупреждал, все труды пошли на смарку. Мы опять за закрытой дверью видим и ящики и стены, причем как бы мы далеко не отошли. Но зато мы знаем что дверь в этом не виновата! А значит беремся за окно.
Твердой рукой внутри поганого стекла создаем браш покрытый текстурой ареапортала но конвертим его уже в другую брашевую энтитю - func_areaportalwindow. И работать она будет по другому. На определенном расстоянии она избавит стекло от прозрачности. Повторяю, ареапортал должен быть совсем внутри, его края не должны не то что выступать из стекла, но даже и быть наравне. Как и в случае с дверью. Иначе ждут самые странные глюки.
Рекомендую сделать его самым тоненьким, и в самом центре.
Сделаем еще один браш для наших нужд. Он будет плавно прекрывать прозрачность оконного проема в зависимости от приказа func_areaportalwindow. Этот браш может быть чем угодно, лишь бы у него было имя, и правильная текстура. Для проемов в которые можно пролезть делают func_illusonary, но у нас окно небьющееся, и поэтому сделаем func_brush. Сразу обзовем его понятным именем, и покрасим в текстуру dev/dev_windowportal. В принципе подходят разные текстуры. Но эта как нельзя лучше отражает окружающее пространство.
В свойствах func_areaportalwindow сделаем не много, но со вкусом.
В поле Rendered Window укажем наш свежесозданный браш с хитрой текстурой (для этого ему имя и было дано), Fade start distance я сделал 64, Fade end distance - 128. Последние два параметра, чтобы далеко от окна не бегать. Комнатка у меня маленькая и ножки устали. Они, как можно догадаться, отвечают за расстояния начала и конца превращения прозрачного стекла в непрозрачное. Можно ввести свои значения, какие вам нужны.

Аккуратно водружаем слоеный пирог в оконный проем:
В самом центре и самый тонкий - func_areaportalwindow, Его окружает с обоих сторон func_brush с текстурой dev/dev_windowportal, и самый большой браш - это обычный браш с текстурой стекла.
По такой схеме получилось красивей всего.
Как это выглядело в Хаммере:
Но что же нас ждет теперь в игре?
В упор мы видим сквозь стекло ящики, и понятное дело они отрисовываются движком.
Но стоит отойти на указанное в настройках func_areaportalwindow расстояние, как стекло "тухнет", но и это еще не все, объекты за окном больше не отрисовываются движком! Ура, товарищи!
 

karsar

Guest
K
Хороший тутор! Давно не понимал, зачем они, всё хинты да хинты... Спс что раздуплил!
 

Psycho-A

 
Команда форума
Модератор
29.08.2009
4 020
37
76
48
  • Золотая медаль 225
Читал где-то уже очень похожий тутор, но здесь, вроде, более понятно расписано, со скринами и примерами, для новичков как раз сойдет.
Хотя, признаюсь честно, для небольших карт никогда не пользовался ни хинтами, ни ареапорталами (а большие я и не создавал).
 

Allien

Guest
A
haos9cr4 сказал(а):
Очень аккуратно помещаем его внутрь созданной ранее двери так, чтобы его не было видно, и так чтобы он прилегал вплотную к стенам. Вот кое-как сделал скрин, надеюсь понятно что я это в упор смотрю сквозь дверь чтобы увидеть наш ареапортал. А вообще его не должно быть видно ни с какой стороны!

А если я использую модельный 2х дюймовые двери?
 

Allien

Guest
A
Всё я уже сообразил как сделать меньше одного дюйма ^_^

П.С. Кроме стандартных покрываний NoDraw невидимых поверхностей и Areaportal. Есть ещё какие то способы оптимизации?
 

3y6acTuK

New member
17.03.2007
1 055
1
0
  • Золотая медаль 231
2 xallienx:
Много способов, например дальность отображения моделей и тому подобные.
 

DaGgeR

Win7+SourceSDK=@%$!!
03.05.2009
223
33
0
16
Отличный тутор! +
З.Ы Всё! Решено! Перехожу на Source!
 

XaeroX

Crystice Softworks
VIP
05.09.2008
9 215
38
  • Бронзовая медаль 212
  • Золотая медаль 325
  • Золотая медаль 214
  • Золотая медаль 233
  • Золотая медаль 221
Можно было написать тутор короче, одним предложением:
"Ареапорталы в сорсе работают и ставятся так же, как в ку3".
Ну по крайней мере первую часть. =)
 

Psycho-A

 
Команда форума
Модератор
29.08.2009
4 020
37
76
48
  • Золотая медаль 225
2 XaeroX:
А зачем начинающему мапперу под Сорс читать учебники по Ку3?
 

SiavA

New member
13.07.2009
8
0
0
Снк за тутор, скажите, а что деалть, если моя карта - это улица где есть здания и все здания построены не из брашей а из функ_детаил, как тогдо с аирпорталами? Растягивать аж до скайбокса?
 

Game Server

Доноры Красавчики

Пользователи онлайн