Areaportal: различия между версиями

Материал из CSM Wiki
Перейти к навигации Перейти к поиску
Строка 1: Строка 1:
 
[[Категория:Маппинг_Source]]
 
[[Категория:Маппинг_Source]]
 
<div class="thumb right">
 
<div class="thumb right">
'''Areaportal''' это брашевая энтити [[Func_areaportal]], она используется для разделения [[Leafs|листьев]] и контроля визуализации. Портал как дверь может находится в двух состояниях открытом либо закрытом. Когда портал закрыт, он блокирует все визуальные объекты в листьях. Когда открыт — визуализация не блокируется. В процессе игры состояние портала может изменяться как правило брашевыми [http://developer.valvesoftware.com/wiki/Trigger_multiple триггерами], кнопками, системой [http://developer.valvesoftware.com/wiki/Inputs_and_Outputs I/O] или [http://developer.valvesoftware.com/wiki/Doors дверью].
+
'''Areaportal''' это брашевая энтити [[Func_areaportal]], она используется для изолирования [[Leafs|листьев]] и контроля видимости. Портал как дверь может находится в двух состояниях открытом либо закрытом. Когда портал закрыт, он блокирует видимость геометрии и других объектов в зоне, находящейся за ним. Когда открыт — визуализация не блокируется. В процессе игры состояние портала может изменяться как правило брашевыми [http://developer.valvesoftware.com/wiki/Trigger_multiple триггерами], кнопками, системой [http://developer.valvesoftware.com/wiki/Inputs_and_Outputs I/O] или [http://developer.valvesoftware.com/wiki/Doors дверью].
 
<div class="thumb tright"><div class="thumbinner" style="width:202px;">[http://developer.valvesoftware.com/w/images/d/d3/Areaportal_simple_open.jpg http://developer.valvesoftware.com/w/images/thumb/d/d3/Areaportal_simple_open.jpg/200px-Areaportal_simple_open.jpg]<div class="thumbcaption"><div class="magnify"></div>Открытый портал выделен зелёными контурами, красные - листья.</div></div></div><div class="thumb tright"><div class="thumbinner" style="width:202px;">[http://developer.valvesoftware.com/w/images/5/5f/Areaportal_simple_closed.jpg http://developer.valvesoftware.com/w/images/thumb/5/5f/Areaportal_simple_closed.jpg/200px-Areaportal_simple_closed.jpg]<div class="thumbcaption"><div class="magnify"></div>Закрытый портал.</div></div></div></div>
 
<div class="thumb tright"><div class="thumbinner" style="width:202px;">[http://developer.valvesoftware.com/w/images/d/d3/Areaportal_simple_open.jpg http://developer.valvesoftware.com/w/images/thumb/d/d3/Areaportal_simple_open.jpg/200px-Areaportal_simple_open.jpg]<div class="thumbcaption"><div class="magnify"></div>Открытый портал выделен зелёными контурами, красные - листья.</div></div></div><div class="thumb tright"><div class="thumbinner" style="width:202px;">[http://developer.valvesoftware.com/w/images/5/5f/Areaportal_simple_closed.jpg http://developer.valvesoftware.com/w/images/thumb/5/5f/Areaportal_simple_closed.jpg/200px-Areaportal_simple_closed.jpg]<div class="thumbcaption"><div class="magnify"></div>Закрытый портал.</div></div></div></div>
 
== Свойства  ==
 
== Свойства  ==
Строка 8: Строка 8:
 
*создаётся с помощью [[Func_areaportal]].  
 
*создаётся с помощью [[Func_areaportal]].  
 
*должен быть построен из одного браша, в противном случае это будет вызывать ошибку при компиляции [http://developer.valvesoftware.com/wiki/Vbsp vbsp].  
 
*должен быть построен из одного браша, в противном случае это будет вызывать ошибку при компиляции [http://developer.valvesoftware.com/wiki/Vbsp vbsp].  
*обычно покрыт tools/toolsareaportal, но неабязательно.
+
*обычно покрывается со всех сторон текстурой tools/toolsareaportal (для удобства), но необязательно.
 
*не должен содержать [http://developer.valvesoftware.com/wiki/Displacement дисплейсмента], иначе это вызовет ошибку vbsp.  
 
*не должен содержать [http://developer.valvesoftware.com/wiki/Displacement дисплейсмента], иначе это вызовет ошибку vbsp.  
*должен полностью отделять зону, которую нужно отображать от зоны, которую нужно "выключить", иначе это может вызвать [http://developer.valvesoftware.com/wiki/Leak leak] ошибку.
+
*должен использоваться для изоляции зон, которых он касается, во избежание [http://developer.valvesoftware.com/wiki/Leak leak] ошибки (утечки между зонами).
*не может состоять из одной полоскости. Хотя areaportal может быть любого размера, как правило, они изготовлены из тонкого браша под размер зоны которой они разделяют.  
+
*не может состоять из одной полоскости. Хотя areaportal'ы могут быть любого размера, как правило, они создаются из тонкого браша под размер дверного проёма, где две зоны граничат друг с другом.  
*создаёт новый [[Leafs|лист]], равный размеру портала.  
+
*создаёт новый [[Leafs|лист]] в месте где находится портал, и равный ему по размеру.  
*может быть открыт или закрыт [http://developer.valvesoftware.com/wiki/Inputs_and_Outputs логической системой] энтити или активирован [http://developer.valvesoftware.com/wiki/Doors door entity].
+
*может открываться или закрываться через систему [http://developer.valvesoftware.com/wiki/Inputs_and_Outputs I/O], либо быть связан с [http://developer.valvesoftware.com/wiki/Doors door entity], в этом случае портал будет открываться и закрываться вместе с дверью.
 
== areaportal_window  ==
 
== areaportal_window  ==
[[Func_areaportalwindow]] — это стандартный areaportal с добавлением опций исчезновения и закрытия портала при удалении игрока на определённую дистанцию от него.  
+
[[Func_areaportalwindow]] — это стандартный areaportal с добавленной опцией постепенного исчезновения и закрытия портала при удалении игрока на определённую дистанцию от него.  
 
== Конструирование  ==
 
== Конструирование  ==
 
<div class="thumb tright"><div class="thumbinner" style="width:202px;">[http://developer.valvesoftware.com/w/images/e/ef/Areaportal_simple_ex1.jpg http://developer.valvesoftware.com/w/images/thumb/e/ef/Areaportal_simple_ex1.jpg/200px-Areaportal_simple_ex1.jpg]<div class="thumbcaption"><div class="magnify"></div>Конструкция стандартного эреапортала.</div></div></div>
 
<div class="thumb tright"><div class="thumbinner" style="width:202px;">[http://developer.valvesoftware.com/w/images/e/ef/Areaportal_simple_ex1.jpg http://developer.valvesoftware.com/w/images/thumb/e/ef/Areaportal_simple_ex1.jpg/200px-Areaportal_simple_ex1.jpg]<div class="thumbcaption"><div class="magnify"></div>Конструкция стандартного эреапортала.</div></div></div>
#Создайте areaportal из одного браша, чтобы <u>полностью</u> изолировать две зоны друг от друга, визуализацию которых вы хотите контролировать. (Можно использовать несколько порталов стоящих вплотную сторона-к-стороне, но не больше чем 6 сторон на одну плоскость браша.)  
+
#Создайте areaportal из одного браша, чтобы <u>полностью</u> изолировать две зоны друг от друга, визуализацию которых вы хотите контролировать. (Можно использовать несколько порталов стоящих вплотную бок о бок. Один Areaportal должен иметь не больше шести сторон)  
#Если две зоны соединены дверным проёмом, сделайте браш портала по размеру этого проёма. Если зоны являются открытыми местностями, толщина портала может быть любой (обычно по размеру сетки 8,16,32 и т.д).  
+
#Если две зоны соединены дверным проёмом, сделайте браш портала по размеру этого проёма. Если зоны представляют собой открытое пространство, толщина портала может быть любой (обычно по размеру сетки 8,16,32 и т.д).  
#Нанесите tools/toolsareaportal материал со всех сторон.  
+
#Нанесите tools/toolsareaportal материал на все стороны портала.  
#[http://developer.valvesoftware.com/wiki/Entity_Creation Примените] к брашу [[Func_areaportal]].  
+
#[http://developer.valvesoftware.com/wiki/Entity_Creation Примените к брашу] [[Func_areaportal]].  
#Установите параметр ''Initial State'' (исходное значение) closed - блокировать или open - отображать визуализацию. Если вы хотите привязать состояние портала к положению какой-либо двери, укажите её имя в параметре ''Name of linked door'' и задайте начальное положение. Теперь во время игры визуализация комнаты будет просчитываться, только если дверь откроет игрок.
+
#Установите параметр ''Initial State'' (начальное состояние) open (открыт) или closed - если необходимо блокировать видимость. Если вы хотите связать портал с определённой дверью, то установите Initial State у портала такое же значение как у двери, и введите имя двери в параметре портала ''Name of linked door''. Если в начальном состоянии дверь закрыта, то портал в начальном состоянии должен быть тоже закрыт, и наоборот. Теперь во время игры визуализация комнаты будет просчитываться, только если дверь откроет игрок.
== Применение ==
+
 
 +
Подсказка: если портал связан с дверью, убедитесь что толщина портала меньше толщины модели двери. В противном случае когда портал закроется, дверь станет невидимой
 +
 
 +
== Работа портала ==
 
<div class="thumb center"><div class="thumbinner" style="width:733px;">[http://developer.valvesoftware.com/w/images/b/b8/Areaportal_culling_engine1.jpg http://developer.valvesoftware.com/w/images/thumb/b/b8/Areaportal_culling_engine1.jpg/350px-Areaportal_culling_engine1.jpg] [http://developer.valvesoftware.com/w/images/f/f7/Areaportal_culling_engine2.jpg http://developer.valvesoftware.com/w/images/thumb/f/f7/Areaportal_culling_engine2.jpg/350px-Areaportal_culling_engine2.jpg]<div class="thumbcaption"></div></div></div>
 
<div class="thumb center"><div class="thumbinner" style="width:733px;">[http://developer.valvesoftware.com/w/images/b/b8/Areaportal_culling_engine1.jpg http://developer.valvesoftware.com/w/images/thumb/b/b8/Areaportal_culling_engine1.jpg/350px-Areaportal_culling_engine1.jpg] [http://developer.valvesoftware.com/w/images/f/f7/Areaportal_culling_engine2.jpg http://developer.valvesoftware.com/w/images/thumb/f/f7/Areaportal_culling_engine2.jpg/350px-Areaportal_culling_engine2.jpg]<div class="thumbcaption"></div></div></div>
При применении порталов в режиме wireframe на первом снимке заметно, что он работает как фильтр и отсекает листья, не входящие в зону обзора. На втором снимке без применения портала видно, как движок игры просчитывает всю визуализацию соседней комнаты даже ту, которую из данного положения увидеть нельзя. Он работает как окно в доме, визуализируестя только то, что видно, то есть листья, через которые проходит луч обзора игрока при пересечении его с порталом.
+
Открытые areaportal'ы имеют особенность отсекать видимость геометрии, которая не входит в рамки портала. То есть движок обрабатывает только те [[Leafs|листья]], которые видны непосредственно через портал. Таким образом, геометрия в следующей зоне грубо отбирается по размерам портала, уменьшается общее число обрабатываемой движком геометрии и увеличивается производительность. Модельная геометрия обрабатывается движком только в том случае, если хотя бы часть модели непосредственно касается угла обзора игрока, смотрящего через портал. Это делает открытые ареапорталы очень полезными для контроля видимости модельной геометрии.
<div class="thumb tright"><div class="thumbinner" style="width:182px;">[http://developer.valvesoftware.com/w/images/4/46/Areaportal_culling_top.jpg http://developer.valvesoftware.com/w/images/thumb/4/46/Areaportal_culling_top.jpg/180px-Areaportal_culling_top.jpg]<div class="thumbcaption"><div class="magnify"></div>Вид сверху. Обзор игрока проходит через портал.</div></div></div>
+
 
В связи с этим так же используются порталы в состоянии "всегда открыт". Это обычный [[Func_areaportal]] с начальным значением - открыт, но не управляемый системой I/O. Они используются на границе участков с большим количеством геометрии и листьев. Например разумно было бы разместить такой эреапортал на выходе из длинного коридора в комнату. Когда игрок находится внутри коридора визуализируется только то, что находится перед коридором и можно увидеть из него.
+
В связи с этим, ареапорталы часто используются в состоянии "всегда открыт". Это обычный [[Func_areaportal]] с параметром "Initial State" установленным в "open". Они используются на выходе в обширное пространство, содержащее большое количество [[Leafs|листьев]] и геометрии. Например разумно было бы разместить такой эреапортал на выходе из длинного коридора в комнату. Когда игрок находится внутри коридора движок обрабатывает только то, что непосредственно попадает в угол обзора через портал
 +
<div class="thumb tright"><div class="thumbinner" style="width:182px;">[http://developer.valvesoftware.com/w/images/4/46/Areaportal_culling_top.jpg http://developer.valvesoftware.com/w/images/thumb/4/46/Areaportal_culling_top.jpg/180px-Areaportal_culling_top.jpg]<div class="thumbcaption"><div class="magnify"></div>Вид сверху. Обзор игрока проходит через портал.</div></div></div>  
 
=== Примечание  ===
 
=== Примечание  ===
Не ставьте слишком много эреапорталов в одной зоне, так как это может повысить нагрузку на процессор. Бывают моменты, когда просчёт (отсечение видимых областей и т.д.) эреапорталами занимает больше ресурсов чем если бы они не применялись вовсе.  
+
Следует быть осторожным, чтобы избежать слишком большого числа порталов, видимых одновременно, так как это может повысить нагрузку на процессор. Если много порталов будут просчитываться одновременно, настанет момент, когда просчёт (отсечение видимых областей и т.д.) эреапорталами займет больше ресурсов чем если бы они не применялись вовсе.  
Также эреапорталы не входят в общий лимит брашей.
+
 
 +
Следует учесть, что эреапорталы не входят в общий лимит брашей.
 
== Компиляция  ==
 
== Компиляция  ==
 
<div class="thumb tright"><div class="thumbinner" style="width:302px;">[http://developer.valvesoftware.com/w/images/4/46/Areaportal_culling_top.jpg http://developer.valvesoftware.com/w/images/thumb/5/59/AreaPortalLeakFig.jpg/300px-AreaPortalLeakFig.jpg]<div class="thumbcaption"><div class="magnify"></div>Вид сверху: слева показана leak ошибка, справа полностью изолированая зона.</div></div></div>
 
<div class="thumb tright"><div class="thumbinner" style="width:302px;">[http://developer.valvesoftware.com/w/images/4/46/Areaportal_culling_top.jpg http://developer.valvesoftware.com/w/images/thumb/5/59/AreaPortalLeakFig.jpg/300px-AreaPortalLeakFig.jpg]<div class="thumbcaption"><div class="magnify"></div>Вид сверху: слева показана leak ошибка, справа полностью изолированая зона.</div></div></div>

Версия 16:34, 28 мая 2009

Areaportal это брашевая энтити Func_areaportal, она используется для изолирования листьев и контроля видимости. Портал как дверь может находится в двух состояниях открытом либо закрытом. Когда портал закрыт, он блокирует видимость геометрии и других объектов в зоне, находящейся за ним. Когда открыт — визуализация не блокируется. В процессе игры состояние портала может изменяться как правило брашевыми триггерами, кнопками, системой I/O или дверью.

http://developer.valvesoftware.com/w/images/thumb/d/d3/Areaportal_simple_open.jpg/200px-Areaportal_simple_open.jpg
Открытый портал выделен зелёными контурами, красные - листья.

Свойства

http://developer.valvesoftware.com/w/images/thumb/5/57/Areaportal_trainstation04.jpg/200px-Areaportal_trainstation04.jpg
Trigger_multiples может быть использован для управления порталом.

Стандартный эреапортал:

  • создаётся с помощью Func_areaportal.
  • должен быть построен из одного браша, в противном случае это будет вызывать ошибку при компиляции vbsp.
  • обычно покрывается со всех сторон текстурой tools/toolsareaportal (для удобства), но необязательно.
  • не должен содержать дисплейсмента, иначе это вызовет ошибку vbsp.
  • должен использоваться для изоляции зон, которых он касается, во избежание leak ошибки (утечки между зонами).
  • не может состоять из одной полоскости. Хотя areaportal'ы могут быть любого размера, как правило, они создаются из тонкого браша под размер дверного проёма, где две зоны граничат друг с другом.
  • создаёт новый лист в месте где находится портал, и равный ему по размеру.
  • может открываться или закрываться через систему I/O, либо быть связан с door entity, в этом случае портал будет открываться и закрываться вместе с дверью.

areaportal_window

Func_areaportalwindow — это стандартный areaportal с добавленной опцией постепенного исчезновения и закрытия портала при удалении игрока на определённую дистанцию от него.

Конструирование

  1. Создайте areaportal из одного браша, чтобы полностью изолировать две зоны друг от друга, визуализацию которых вы хотите контролировать. (Можно использовать несколько порталов стоящих вплотную бок о бок. Один Areaportal должен иметь не больше шести сторон)
  2. Если две зоны соединены дверным проёмом, сделайте браш портала по размеру этого проёма. Если зоны представляют собой открытое пространство, толщина портала может быть любой (обычно по размеру сетки 8,16,32 и т.д).
  3. Нанесите tools/toolsareaportal материал на все стороны портала.
  4. Примените к брашу Func_areaportal.
  5. Установите параметр Initial State (начальное состояние) open (открыт) или closed - если необходимо блокировать видимость. Если вы хотите связать портал с определённой дверью, то установите Initial State у портала такое же значение как у двери, и введите имя двери в параметре портала Name of linked door. Если в начальном состоянии дверь закрыта, то портал в начальном состоянии должен быть тоже закрыт, и наоборот. Теперь во время игры визуализация комнаты будет просчитываться, только если дверь откроет игрок.

Подсказка: если портал связан с дверью, убедитесь что толщина портала меньше толщины модели двери. В противном случае когда портал закроется, дверь станет невидимой

Работа портала

Открытые areaportal'ы имеют особенность отсекать видимость геометрии, которая не входит в рамки портала. То есть движок обрабатывает только те листья, которые видны непосредственно через портал. Таким образом, геометрия в следующей зоне грубо отбирается по размерам портала, уменьшается общее число обрабатываемой движком геометрии и увеличивается производительность. Модельная геометрия обрабатывается движком только в том случае, если хотя бы часть модели непосредственно касается угла обзора игрока, смотрящего через портал. Это делает открытые ареапорталы очень полезными для контроля видимости модельной геометрии.

В связи с этим, ареапорталы часто используются в состоянии "всегда открыт". Это обычный Func_areaportal с параметром "Initial State" установленным в "open". Они используются на выходе в обширное пространство, содержащее большое количество листьев и геометрии. Например разумно было бы разместить такой эреапортал на выходе из длинного коридора в комнату. Когда игрок находится внутри коридора движок обрабатывает только то, что непосредственно попадает в угол обзора через портал

http://developer.valvesoftware.com/w/images/thumb/4/46/Areaportal_culling_top.jpg/180px-Areaportal_culling_top.jpg
Вид сверху. Обзор игрока проходит через портал.

Примечание

Следует быть осторожным, чтобы избежать слишком большого числа порталов, видимых одновременно, так как это может повысить нагрузку на процессор. Если много порталов будут просчитываться одновременно, настанет момент, когда просчёт (отсечение видимых областей и т.д.) эреапорталами займет больше ресурсов чем если бы они не применялись вовсе.

Следует учесть, что эреапорталы не входят в общий лимит брашей.

Компиляция

http://developer.valvesoftware.com/w/images/thumb/5/59/AreaPortalLeakFig.jpg/300px-AreaPortalLeakFig.jpg
Вид сверху: слева показана leak ошибка, справа полностью изолированая зона.

При разделении зон эреапорталом очень важно, чтобы они были полностью изолированы друг от друга, как на снимке справа, и не образовывали "утечек" leak ошибок. Зона считается изолированной, если она полностью окружена world-брашами, а соединения (проходы) к другим пространствам закрыты эреапорталами. Если зоны соединяются несколькими проходами, они тоже должны быть закрыты эреапорталами. Это можно прдеставить себе как отверстие в аквариуме с рыбой. Каждое отверстие в world-браше, соединяющее одну зону с другой, должно быть закрыто эреапорталом, иначе возникнет leak ошибка при компиляции vbsp. Detail-браши и дисплейсмент не может служить границей зоны для их изолирования. Если компилятор сможет найти путь соединяющий две основные поверхности эрепортала то, возникнет leak ошибка.

Ошибки компиляции

При компиляции эреапортала ошибки выводятся VBSP. Если на карте возникла leak тучка вы увидите:

Brush <brush number>: areaportal brush doesn't touch two areas
done

Эту ошибку иногда трудно заметить по сравнению с обычной leak утечкой, но когда это происходит, vbsp генерирует pointfile, чтобы помочь вам.

Bug.png Баг: Если ваша карта не содержит энтити (info_player_start к примеру), портал создаст нестандартную LEAK ошибку. Чтобы этого не было, карта должна содержать минимум одну энтити.

Areaportal и вода

Важный аспект в работе с эреапорталами: не допустимо пересечение браша эреапортала с водой. Чтобы избежать пересечения портала с водой, разделите его на 2 части и разместите их на разных концах браша воды.

Слияние

Для улучшения оптимизации, порталы, расположенные в одной плоскости и направленные в одну сторну, автоматически сливаются в один игровым движком. Если это не нужно, просто переместите браш эрепортала в другую плоскость, направьте в другую сторону или просто измените размер. Смещение портала на один юнит, достаточно чтобы слияния не произошло.

Обзор через зоны

http://developer.valvesoftware.com/w/images/7/71/Areaportal-areas.png
Визуализация в зонах 1 и 2 не изменяется. Красным выделены листья, чёрные - world-браши.

Эреапорталы отсекают только ту часть, которую они изолируют. Рассмотрим изображение справа: визуализация лситьев 1 и 2 никак не будет зависеть от расположенных эреапорталов так как они связаны друг с другом через другие зоны. Вы могли бы расположить еще 2 портала в зонах слева и справа, но только, если оно того стоит.

Консольные команды

Вы можете отлаживать и тестировать эреапорталы в игре через консоль:

  • r_DrawPortals 0/1
Этот параметр, установленный на 1, выделяет зелёными контурами эреапортал, если он открыт, а также показывает проекцию (отсекающая листья) обзора игрока при просмотре через него.
  • mat_wireframe 0/1/2/3
В wireframe режиме можно легко увидеть, как работает эреопортал, как ведут себя листья в данный момент при значении параметра 1 и 2. Значение 3 выделяет листья, отображаемые в данный момент.
  • r_portalscloseall 0/1
Значение 1 закроет все изначально открытые (только если они не были открыты r_portalsopenall 1) порталы и укажет работающие неправильно.
  • r_portalsopenall 0/1
Значение 1 откроет все изначально закрытые (только если они не были закрыты r_portalscloseall 1) порталы.

Мультиплеер

Эреапорталы очень полезны в сетевой игре. Создаются они также как и в одиночной игре, но их функции и применение немного отличаются. Состояние эреапортала в многопользовательской игре контролировать сложнее, поэтому карта должна быть оптимизирована для наихудшего сценария, когда все эреапорталы открыты. Самый часто используемый вариант - это "всегда открытый" эреапортал, за ним идёт активируемый дверью; худший вариант в мультиплеере, эреапортал управляемый триггером. В худшем варианте с использованием триггеров, правильно поставленый "всегда открытый" портал, повысит производительность по сравнению с управляемым порталом. Также в мультиплеере могут быть использованы areaportalwindow, но они менее полезны, так как вносят дисбаланс в геймплей многопользовательской карты. Игрок внутри зоны рядом с порталом может увидеть любого игрока снаружи, но игрок снаружи, находящийся на расстоянии от портала, не сможет увидеть игрока внутри.

Общее с occluders

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

  • Окклюдеры скрывают все prop объекты. Эреапортал блокирует всю визуализацию.
  • Две разделяемые зоны должны быть полностью изолированы эреапорталами, окклюдер может быть установлен в любом месте карты.
  • Окклюдер затрачивает больше ресурсов чем открытый эреапортал.
  • Окклюдерами можно контролировать размер скрываемой зоны.

Смотрите также:

Статья взята с ValveDev