Деформированные поверхности c имитацией травы
В этой статье, без подробностей о деформированных поверхностях, рассматриваются основы создания травы в случайных местах поверхности на простом примере, с использованием 3-х элементов карты, показывающем возможности бесшовных текстур. В этой статье приведены примеры для Half-Life 2, Half-Life 2: Deathmatch и Counter-Strike: Source. Примеры карт можно скачать внизу страницы.
Создание деформированной поверхности
Чтобы создать траву, сначала нужно создать поверхность. В этом примере будут использованы поверхности с дробностью 2 и 3. Поверхность с дробностью 4 не особо нужна для вещей вроде таких, она нужна только если вы собираетесь сделать что-то очень мягкое и округлое.
Для создания травы сначала необходимо создать деформированную поверхность. В этом примере будут использованы поверхности со степенью дробности 2 и 3. Деформированные поверхности со степенью дробности 4 излишни для подобных задач, если не нужно создать что-то предельно гладкое и округлое.
Необходимо помнить важные особенности - деформированные поверхности не закрывают утечки и не блокируют видимость.
В диалоге редактирования поверхностей откройте вкладку Displacement (Смещение) (показана ниже), затем выберите элемент карты, на котором нужно создать деформированную поверхность, и нажмите кнопку Create (Создать).
Чтобы получить бесшовную траву, достаточно задать деформированной поверхности степень дробности 2, скомпилировать карту, и спрайты травы будут добавлены автоматически. В редакторе Hammer они не показываются, но они появятся во время игры.
Для элемент карты слева будет применена степень дробности 3, а после создания деформированной поверхности будут добавлены неровности.
Нажмите кнопку Noise (Шум) и установите значения Min 0,5 и Max 3,0, затем примените настройки и посмотрите на деформированную поверхность. Теперь на ней появились случайные неровности. После использования Noise (Шума), возможно, придётся использовать инструмент Sew (Сшить).
Объяснение функции Noise (Шум) от Valve:
- Добавление случайного шума к выбранной деформированной поверхности. Значение Min задаёт наибольшее расстояние в единицах, на которое точка поверхности может быть смещена вниз по нормали к грани. Значение Max задаёт наибольшее расстояние вверх по нормали к грани. Нажатие кнопки OK приведёт к произвольному смещению положений точек деформированной поверхности между этими двумя значениями.
Для элемента карты слева использована ещё одна функция - "Paint Alpha (альфа-канал) ".
С помощью этого инструмента можно указать лысую зону без растительности, в них не будет отображаться текстура травы и не появятся спрайты травы. Можно экспериментировать с настройками этого инструмента и размерами элемента. В этом примере используются только параметры Raise/Lower (Вверх/Вниз) с размером 1 или 2 и радиусами 25,0 и 117,0.
Текстурирование
Текстуры, использованные в данном примере:
- HL2 -
nature/blendgrassgravel001b - CS:S -
nature/blendgrassgravel003a
Для поиска бесшовных текстур используйте фильтр по слову blend, имеются бесшовные текстуры для травы, песка и гравия. Можете экспериментировать с ними.
В этих примерах текстуры применены ко всем граням элементов деформированной поверхности, но только 2 грани исходного элемента карты останутся, когда запустится игра. Это сделано специально, чтобы показать, что на обычном элементе карты не появятся спрайты травы, хотя они будут иметь ту же текстуру травы, что и другие поверхности. Одна грань, обращённая к соседнему элементу деформированной поверхности, текстурирована, чтобы устранить мерцание краёв элементов карты.
Всегда текстурируйте все грани элемента деформированной поверхности, таким образом устраняется ошибка nodraw on displacement surface. Компилятор все равно удалит эти грани, будут созданы только грани с деформированной поверхностью.
Так как деформированные поверхности не герметизируют карту, под ними всегда должен находиться другой элемент карты. В этом примере нижний элемент карты полностью покрыт текстурой nodraw. Таким образом, обычный элемент карты, покрытый текстурой nodraw, герметизирует карту под смещениями.
Дорабатываем окружающий мир
В примерах карт добавлен несколько объектов статичного реквизита, чтобы показать, как создавать что-то наподобие зарослей. Существует множество моделей SDK, которые можно использовать в своих картах.
Использованные модели:
models/props_foliage/cattails.mdlmodels/props_foliage/Shrub_01a.mdl
- Collisions: Not Solid (столкновения: нематериальный)
- Disable Shadows: Yes (отключить тени: да)
Обратите внимание, что тени отключены. Размещение подобных объектов реквизита на деформированных поверхностях приводит к появлению странных эффектов, поэтому лучше отключать тени для реквизита растительности.
Небольшая возвышенность была создана с помощью инструмента Noise (Шум), но с более высоким значением Max 7.0 и прежним значением Min 0.5 для создания возвышенности (это было сделано только в примере для HL2, но для CS:S используется тот же метод). Это может быть очень полезно, когда нужно скрыть выступающие края или что-то лишнее, к тому же подобные выступы всегда хорошо выглядят на открытом пространстве карты, поэтому они вряд ли будут выглядеть неуместно.