Оптимизация небосвода

From Valve Developer Community
< Ru
Jump to navigation Jump to search
English (en)Português do Brasil (pt-br)Русский (ru)Translate (Translate)
Вернуться к: Небосвод, основы(en)
Пример небольшой карты, которая рассматривается в этой статье.

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

Эта статья актуальна для GoldSrc GoldSrc и Source Source, карты которых должны быть герметичны и для просмотра небосвода необходимы элементы покрытые текстурой неба. Начиная с Source 2 Source 2, эти требования больше не актуальны, но по-прежнему считаются лучшей практикой, так как компиляция карт с утечками занимает значительно больше времени и неправильно рассчитывается видимость.

Обзор

Метод Описание Преимущества Недостатки
Коробочный метод Improperskyboxexample.gif Создаётся один большой короб неба, охватывающий всё содержимое карты
  • Прост в создании
  • Излишнее время компиляции, неестественно низкая производительность
  • Увеличенное расходование лимитов
  • Персонаж игрока может свободно выходить за пределы карты
  • Использование кордона(en) даёт аналогичный результат
Облегающий небосвод Properskyboxexample.gif Создаются стены и потолки короба неба для каждой области, не оставляя доступных игроку областей
  • Разумное время компиляции и производительность
    • Время компиляции VVIS может быть дополнительно сокращено применением func_viscluster(en).
  • Создание потребует усердия, вероятно появятся утечки(en)
  • Высокие сооружения в других частях карты могут пропасть из вида, хотя геометрически должны быть видимы
Опоясывающий метод Towerop1.jpg Похож на Облегающий небосвод, но не настолько детально, оставляя разные части карты соединенными над игровой областью
  • Разумное время компиляции и производительность
    • Время компиляции VVIS может быть дополнительно сокращено применением func_viscluster(en).
  • Можно размещать высокие сооружения, так как они будут всегда видны с разных частей карты
  • Лучшая реалистичность: пули, гранаты и физические объекты реквизита не будут сталкиваться со коробом неба, как со стеной
  • Создание потребует усердия, вероятно появятся утечки

Дополнительными преимуществами оптимизации небосвода карты являются:

Tip.pngСовет: Высокие сооружения, которые должны оставаться видимыми на разных частях карты (например, кран), можно переместить в область объёмного неба(en). При необходимости сооружение можно продублировать таким образом, чтобы оно присутствовало как на карте, так и в области объёмного неба.
Note.pngПримечание: In Counter-StrikeCounter-Strike: Condition ZeroCounter-Strike: SourceCounter-Strike: Global Offensive, you may want arbitrarily thrown grenades to never touch invisible walls like the skybox. To accomplish this, the level must contain all the space that grenades could be thrown to: The ceiling of the skybox should be at least 1500 units higher than the highest place that a player can throw grenades from and the (vertical) skybox walls must be far enough away from the level's walls; If done so, the result will probably not be a Tight Skybox but instead look similar to the example shown for the Box Method.

Коробочный метод

Каждый картодел создаёт неправильные небосводы просто делая полую коробку вокруг карты, или делая отдельные браши, ставя их вместе в форме коробки.

В другом случае этот "Коробочный метод" в корне не тот метод, который вы должны использовать в качестве создания небосвода, так как карты, которые могут иметь такой тип небосвода, малы до такой степени, чтобы вы могли видеть её всю. Не беря в счёт эти карты, небосвод необходимо делать правильно.

Теперь, чтобы показать вам, почему "Коробочный метод" плохой, я покажу вам карту справа и я буду использовать два способа создания небосвода на ней. Это простенькая карта: несколько путей с тремя большими комнатами и стенами, отделяющие их.

Note.pngПримечание: Это простые примеры, которые могут/должны быть улучшены.

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

"Коробочный метод" выглядит именно так, как на картинке ниже.

Improperskyboxexample.gif

Сам пол карты исчезает неспроста, он заостряет внимание на том, что пол не именно там в простом понимании. Смещения не блокируют видимость, и VVIS(en) не просчитает visleafs, который останавливает поверхности от смещения, visleafs проигнорирует их. Если вы бы сделали стену, состоящую только из смещений, то ваш компьютер прорисовывал бы постоянно все модели, игроков и геометрию позади их. Только геометрия карты - в этом случае стены - будут блокировать видимость и создавать visleafs, контролирующий предметы от их прорисовки.

Tip.pngСовет: When your map's outer borders are still in development, it is more beneficial to use the cordon tools until you've reached a stage of map development where you want to start setting up your final skybox and optimizing your map. Cordons function the same way as the box method, but are cleaner to use.

Правильно сделанный короб неба с продвинутым картостроением даёт большой прирост производительности на сложной карте. Это не очень умная идея создавать коробочный небосвод, когда вы начинаете делать уровень. Лучше используйте инструмент кордона(en), пока вы не достигнете стадии разработки карты, в которой вы не будете работать над финальной версией короба неба.

Note.pngПримечание: You may notice that the origin of the map lies inside the level.
In Source, this is a bad practice, as VVIS will automatically cut visleafs along the axis of the origin. Instead, this should be moved into one of the 4 quadrants of the x/y axis.
In GoldSrc, however, this advice can and should be ignored, as the map canvas is significantly smaller, and brushes placed too close to the edge of the map often will compile incorrectly, especially if small.

Облегающий небосвод

Теперь давайте взглянем на более лучший метод создания короба неба, взгляните на картинку ниже:

Properskyboxexample.gif

Короб неба теперь огибает весь уровень, и nodraw текстуры будут использованы под всеми стенами и полом, вместо служебной текстуры неба tools/toolsskybox. Это уменьшает количества расчётов (КОЛОССАЛЬНО уменьшая время компиляции), потому что небосвод не содержит в себе пустое пространство для генерации. Nodraw текстуры будут использованы, потому что нам не надо освещать поверхности за картой, и мы не хотим увидеть ошибки в прорисовке, которые появятся при освещении смещений снизу.

Все эти методы колоссально влияют на компиляцию:

Vviscompare.gif

Portal Clusters: 73 »» 16

Numportals: 201 »» 19

Total Clusters Visible: 3981 »» 134

Average Clusters Visible: 54 »» 8

Average Clusters Audible: 73 »» 13

VisDataSize: 2048 »» 196

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

Когда не надо делить на части

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

Towerk.jpg

Я поставил высокие элементы в середине карты, картинка справа это показывает. Однако, если короб неба будет там присутствовать, то башня будет то появляться, то исчезать время от времени из-за работы небосвода. Обрезка небосвода в требующих местах неоходима, чтобы другие части карты были видны от всех углов камеры игрока.

Убирая и обрезая стены короба неба мы можем увидеть эту башню от всех углов карты и используя nodraw текстуры внизу карты мы не позволим свету выглядывать. Результат выглядит таковым:

Towerop1.jpg

Также вы можете попробовать ограничить зону прорисовки башни. Просто вытяните несколько стен, так чтобы вблизи этих стен вы не заметили бы башню:

Towerop2.jpg

Смотреть также