Env terrainmorph

Материал из CSM Wiki
Версия от 05:20, 22 сентября 2009; Kogemyaka (обсуждение | вклад) (→‎Смотрите также)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Оригинал Env_terrainmorph

Описание

Объект env_terrainmorph используется для модификации геометрии поверхностей DISPLACEMENT. При модификации поверхности DISPLACEMENT изменяется только её внешний вид, а модель столкновений остаётся прежней. Поэтому при использовании env_terrainmorph нельзя сделать так, чтобы перед игроком вздыбилась земля и игрок не смог бы пройти через образовавшуюся преграду. Если возникнут трудности с пониманием принципа работы объекта – посмотрите пункт "Как работает объект env_terrainmorph".

Особенности использования

  • Этот объект обновляется в каждом раунде. Это означает что любые изменения объекта НЕ будут наследоваться в последующих раундах.
  • Объект должен быть установлен там, где будет использоваться.
  • На карте может быть установлено множество этих объектов
  • Объект НЕ изменяет модель столкновений (collisions) для DISPLACEMENT-поверхностей.
  • Изменённая DISPLACEMENT-поверхность сохраняет свои изменения на протяжении всей карты. То есть, после модификации DISPLACEMENT-поверхности при помощи объекта env_terrainmorph, такая поверхность сохранит свои изменения на все последующие раунды.
  • Этот объект изменяет DISPLACEMENT-поверхности с частотой равной 20 раз в секунду.
  • После своего использования объект env_terrainmorph автоматически удаляется до начала следующего раунда.

Ошибки

Не обнаружены.

Как работает объект env_terrainmorph

Принцип действия объекта env_terrainmorph достаточно сложен, однако для успешного применения этого объекта на ваших картах знать его всё же придётся.

Первое что нужно усвоить - это то, что объект env_terrainmorph всего лишь передвигает точки поверхностей, которые находятся в радиусе его действия. В каком направлении будут перемещены точки указывает свойство "angles", который нужно добавить вручную, если у вас его нет (см. пункт "Ошибки").

Второе что нужно знать - это то, что объект env_terrainmorph действует только на те точки DISPLACEMENT-поверхностей в радиусе своего действия, которые находятся "перед" ним. Это указывается при помощи всё того же свойства "angles". Например: нам нужно, чтобы объект env_terrainmorph поднял все точки в радиусе своего действия на какую-нибудь высоту. Для этого:

  • устанавливаем свойство "angles" = "-90 0 0", что соответствует направлению вверх;
  • ставим "Displacement Fraction" = 10;
  • объект env_terrainmorph устанавливаем в редакторе на той высоте, на которой хотим чтобы оказались все точки поверхностей;
  • выбираем подходящий радиус действия "Start Radius" и делаем его одинаковым с "Goal Radius";
  • выполняем функцию "BeginMorph".

Если посмотреть на результат, то по окончании модификации все точки окажутся на той высоте, на которой был поставлен объект env_terrainmorph. Почему точки НЕ оказались выше, ведь выбрано высокое значение свойства "Displacement Fraction"? Это как раз и есть то самое "перед", о котором говорилось чуть раньше. То есть, наш env_terrainmorph смотрит вверх ("angles" = "-90 0 0"). При этом он образует невидимую плоскость во все стороны от себя, пересекать которую модифицированные точки не могут. Как повёрнута эта плоскость зависит только от свойства "angles".


Третье что нужно знать – это то, как изменяется модификация с течением времени "Duration". В начале модификации вокруг объекта env_terrainmorph находятся все точки для всех DISPLACEMENT-поверхностей, которые находятся в радиусе действия "Start Radius". Так же в начале модификации рассчитывается на какое расстояние будут перемещена "первая партия" точек. Для каждой точки это расстояние разное и зависть от времени "Duration", масштаба "Displacement Fraction", и расстояния от точки до объекта env_terrainmorph. "Первая партия" точек передвигается на новое место. Если "Goal Radius" не равен "Start Radius", то на этом этапе радиус охвата точек так же изменяется и операция повторяется до тех пор пока не будет достигнуто нужное количество шагов операции.

Советы

Несколько примеров применения объекта env_terrainmorph с небольшими пояснениями:

  • Воротить горы в начале каждого раунда, создавая неповторимый горный рельеф. Горы удобнее всего запихать в 3D Skybox.
  • Возводить стены из под земли. В начале карты лучше всего сбрасывать все изменения при помощи какого-то одного объекта env_terrainmorph, приводящего DISPLACEMENT-поверхность в идеальную горизонтальную поверхность. Добавить соответствующее звуковое сопровождение и тряску земли при помощи объекта env_shake, чтобы отвлечь игрока от нюансов возведения стены. Для того, чтобы игрок не мог пройти через такие стены можно ставить на карте невидимые объекты func_wall_toggle.
  • Создание воронок от взрыва, на примере того, как это сделано на карте-примере csssdk_env_terrainmorph.vmf.

Параметры

  • Pitch Yaw Roll (Y Z X) – ориентация объекта на карте (направление распространения); направление модификации DISPLACEMENT-поверхностей;
  • Start Radius – радиус вокруг объекта env_terrainmorph, внутри которого любая поверхность DISPLACEMENT будет претерпевать изменения при старте модификации;
  • Goal Radius – радиус вокруг объекта env_terrainmorph, внутри которого любая поверхность DISPLACEMENT будет претерпевать изменения в конце модификации; не используется, если установлен флажок "Instant";
  • Duration – время, в течение которого проходит модификация поверхностей (секунды); не используется, если установлен флажок "Instant";
  • Displacement Fraction – на сколько хорошо будут поддаваться модификации различные поверхности DISPLACEMENT;
    • 0 – объект env_terrainmorph не изменяет поверхности;
    • 0.5 – изменения проходят в пол силы; 1 – нормальный тип изменения;
    • 2 – выбирается мнимая точка в 2 раза дальше объекта env_terrainmorph и все изменяемые точки поверхностей стремятся к ней, однако точки не будут перемещены дальше чем сам объект env_terrainmorph, что приведёт к "отсечению" их координат и размещению в плоскости объекта env_terrainmorph и т.д.

Флаги

  • Instant – выполнить модификацию поверхности моментально; если этот флажок установлен, то свойства "Duration" и "Goal Radius" игнорируется.

Inputs

  • BeginMorph – начать модификацию поверхностей.

Карта

csssdk_env_terrainmorph.vmf

Используются объекты

  • env_terrainmorph
  • trigger_once
  • env_explosion
  • DISPLACEMENT

Описание карты

В центре карты есть небольшая "зелёная зона". Когда игрок подходит к этой зоне происходит взрыв и на месте взрыва образуется воронка. В следующем раунде или после рестарта карты (например: консольной командой "mp_restartmap 1") воронка от взрыва останется на том же месте, а дополнительная модификация поверхности может только углубить её. Обратите внимание, где в редакторе находится объект env_terrainmorph. Он помещён ниже изменяемой поверхности, а не выше её. Посмотрите пункт "Как работает объект env_terrainmorph" чтобы попробовать получше разобраться в принципе работы объекта env_terrainmorph.

Кстати, обратите внимание на то, что при загрузке карты в консоли игры CS:S красным цветом выводится большое предупреждающее сообщение:

Warning: using WorldTwoTextureBlend on a non-displacement surface. Support for this will go away soon. - Material : nature/blendcliffgrass001a - Surface center : -296 -544 -16 Warning: using WorldTwoTextureBlend on a non-displacement surface (material: nature/blendcliffgrass001a). Support for this will go away soon.

Это сообщение говорит о том, что не стоит применять материал с шейдером WorldTwoTextureBlend на обычных НЕ-DISPLACEMENT-поверхностях, и то что эта функция пока что работает, но вскоре будет отключена.