This page has been translated automatically.
Видеоуроки
Интерфейс
Основы
Продвинутый уровень
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Профессиональный уровень (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Физика
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Контроль версий
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Player-ноды
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Материалы и шейдеры
Rebuilding the Engine Tools
Интерфейс пользователя (GUI)
Двойная точность координат
API
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Сэмплы материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Учебные материалы
Внимание! Эта версия документация УСТАРЕЛА, поскольку относится к более ранней версии SDK! Пожалуйста, переключитесь на самую актуальную документацию для последней версии SDK.
Внимание! Эта версия документации описывает устаревшую версию SDK, которая больше не поддерживается! Пожалуйста, обновитесь до последней версии SDK.

Добавление травы в сцену

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

Необходимые текстуры#

Текстуры, необходимые для настройки grass (в рамках этого руководства), следующие:

Примечание
Текстуры, используемые в этом руководстве, взяты из пакета Art Samples. Демо проекты могут быть добавлены через UNIGINE SDK Browser. Однако вы можете использовать свои собственные текстуры, если таковые имеются.
  • Диффузные текстуры. В этом уроке мы будем использовать 2 диффузные текстуры: одну для обычной травы и одну для травы различных типов. Первая текстура имеет слоты 1 x 4, а вторая текстура — слоты 4 x 4. Поскольку мы собираемся использовать маску изображения для задания распределения плотности травы, диффузная текстура может содержать менее 4 столбцов.

    Диффузная текстура для обычной травы
    Диффузная текстура для травы различных типов
  • Текстура пространственного шума (RGB). Он будет охватывать всю местность и позволит вам по-разному окрашивать траву во всех местах.

    Примечание

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

    • Размеры текстуры должны быть равны некоторой степени двойки (например, 1024 × 1024, 2048 × 2048 и так далее).
    • Размеры текстуры должны быть пропорциональны размеру местности. Например, если у вас есть рельеф 4096 × 4096, текстура не должна быть 256 × 512.
    • Размеры текстуры должны быть выбраны таким образом, чтобы получить результат соответствующего качества после сопоставления пикселей с рельефом местности. Например, если у вас есть рельеф 4096 × 4096 и текстура 1024 × 1024, 1 пиксель этой текстуры будет отображен так, чтобы покрыть 4 единицы рельефа. Если такого качества достаточно, вы можете использовать эту текстуру. В противном случае вам следует создать новый файл соответствующего размера.

    В этом руководстве для рельефа 4097 × 4097 будет использоваться текстура 2048 × 2048 (1 пиксель будет нанесен на карту, чтобы покрыть 2 единицы).

  • Маска изображения, определяющая распределение травы по местности. Каждый канал маски (R, G, B и A) определяет, отображается ли трава из 1-го, 2-го, 3-го и 4-го столбцов (соответственно) или нет. Трава будет расти только на участках со значением цвета канала.

    В этом уроке мы будем использовать 2 маски изображений, взятые из демо-версии Art Samples:

    • текстура R8 для обычной травы, так как ее диффузная текстура содержит только вертикальный столбец 1. Обычная трава будет отображаться там, где находится красный цвет.
    • текстура RGBA8 для травы различных типов, так как ее диффузная текстура содержит столбцы 4. Трава различных типов будет отображаться там, где есть белый цвет.
    Маска изображения для обычной травы
    Маска изображения для травы различных типов
  • Полупрозрачная текстура, которая хранит информацию о прозрачности травяного материала. Он представлен атласом текстур R8, а количество строк и столбцов определяется количеством фрагментов травы в диффузной текстуре. В этом уроке мы будем использовать полупрозрачную текстуру для обычной травы, поэтому она будет содержать вертикальные прорези 4. Эту текстуру можно использовать вместо настройки параметра Translucent материала: текстура определяет области травинок, через которые проходит свет, и параметр позволяет масштабировать такой эффект прозрачности.

Шаг 1. Подготовьте сцену#

Перед добавлением и установкой травы вы должны подготовить почву. Если у вас есть настроенный мир с ландшафтом, солнцем и атмосферой, вы можете его использовать. Если у вас его нет, вы можете немного изменить vegetation/forest.world в демо-версии Art Samples (можно добавить через UNIGINE SDK Browser): удалите все дочерние ноды Landscape в World Hierarchy.

В этом руководстве будет использоваться измененный forest.world.

Шаг 2. Добавьте траву#

В этом уроке мы собираемся добавить 2 типа травы: обычную траву и траву различных типов.

  1. В строке меню выберите Create -> Grass -> Base и поместите траву где-нибудь в мире.

    Объект травы добавлен в мир
  2. В окне World Hierarchy клонируйте добавленный объект Grass. Переименуйте объекты следующим образом:

  3. Выберите добавленные объекты Grass в окне World Hierarchy. На вкладке Node окна Parameters перейдите в раздел Surfaces и определите область видимости для будущего травяного поля. Все травинки не могут быть отображены сразу, особенно, если поле огромное. Вместо этого они будут отображаться в небольшой области вокруг камеры.

    • Установите расстояние Maximum Visible равным единицам измерения 4. На этом расстоянии от камеры видны все травинки.
    • Установите расстояние Maximum Fade равным единицам измерения 90. На этом расстоянии трава будет постепенно исчезать в соответствии со значением альфа-канала ее диффузной текстуры.

    В результате вы увидите, что многоугольники травы появляются и исчезают в пределах заданного расстояния (94 единицы).

  4. В разделе Grass вкладки Node установите реальный размер поля травы: выберите оба объекта травы и установите Size X (вдоль оси X) и Size Y (вдоль оси Y), чтобы повторить размер ландшафта 4097 × 4097.

  5. Добавьте объекты травы в качестве дочерних нод к Landscape, чтобы трава могла расти на местности, повторяя ее рельеф: выберите ноды травы и перетащите на в ноду Landscape с зажатой левой кнопкой мыши.

  6. Включите параметр Intersection, чтобы разрешить пересечение с родительской нодой.

    Теперь трава растет на местности (повторяет ее рельеф), но поле по-прежнему расположено неправильно:

  7. На вкладке Node окна Parameters сбросьте положение объектов grass на 0 относительно их родительского элемента в разделе Common.

    Положение объекта травы синхронизируется с рельефом местности:

  8. В настоящее время координаты травяных квадратов обоих объектов совпадают. Чтобы избежать мерцания квадратиков травы, расположите квадратики травы объекта grass_regular по-другому: щелкните Randomize (вкладка Node → раздел Grass), чтобы сгенерировать случайное начальное значение.

Шаг 3. Настройте материал травы#

Теперь вы должны создать материалы для объектов grass, прежде чем изменять их распространение дальше.

  1. В окне World Hierarchy выберите ноды regular_grass и variation_grass и перейдите на вкладку Node окна Parameters.
  2. Перейдите в раздел Material на вкладке Node: в настоящее время нодам травы назначен базовый материал grass_base. Нажмите Create Child или , чтобы создать новый дочерний материал. Новый материал будет автоматически назначен обеим нодам Grass.

  3. Переименуйте новый материал grass_regular в поле Name.

  4. В окне World Hierarchy выберите ноду variation_grass и перейдите на вкладку Node окна Parameters. В разделе Material щелкните , чтобы наследовать новый материал.

    Примечание
    В этом случае новый материал унаследует все настройки материала grass_regular (например, наклон, шум стержня и так далее). В любом случае, вы все равно можете наследовать материал для 2-го объекта grass из базового материала grass_base и установить для него определенные настройки.

    Материал будет автоматически назначен выбранной ноде variation_grass. Переименуйте новый материал grass_variation в поле Name.

  5. Настройте материалы объектов grass: для каждого материала перейдите на вкладку Textures и перетащите диффузную текстуру в соответствующее поле.

    Примечание
    Возможно, вам захочется вручную отредактировать альфа-канал mip-карт, потому что на автоматически сгенерированных mip-картах тонкие полосы могут исчезать неправильно или неприятно.
    Диффузная текстура для regular_grass
    Диффузная текстура для variation_grass
  6. Перейдите в раздел Grass на вкладке Node. Для обоих объектов Grass задайте нужное количество горизонтальных строк в диффузных текстурах в поле Num Textures. Например, у нас есть строки 4 для обоих объектов grass, поэтому для Num Textures должно быть установлено значение 4.

    Примечание
    Как вы можете видеть, нода regular_grass не отображается должным образом, потому что нет image mask. Диффузная текстура обычной травы содержит только столбец 1, поэтому следует установить 1-канальную маску изображения (R8).
  7. Перетащите правильную маску изображения R8 из Asset Browser в соответствующее поле в разделе Grass вкладки Node, чтобы исправить рендеринг ноды regular_grass. Мы настроим все соответствующие параметры позже.

  8. Перейдите на вкладку States раздела Material (вкладка Node, окно Parameters). Установите флажок Noise для материала grass_regular. Это позволит вам по-разному окрашивать травинки обычной травы по всему полю. Параметр Noise также будет установлен для материала grass_variation.

  9. Для материала grass_variation перейдите на вкладку States раздела Material и снимите флажок с параметра Noise. Это позволит траве различных типов отличаться от обычной травы.
  10. Для материала grass_regular перейдите на вкладку Textures и перетащите текстуру пространственного шума из обозревателя ресурсов в поле Noise.

  11. Перейдите на вкладку Parameters материала grass_regular. Справа от поля Noise Transform щелкните , чтобы отредактировать значения (или изменить выражение прямо в этом поле).

  12. Установите масштаб координат текстуры по осям X и Y равным 1: в этом случае текстура пространственного шума будет покрывать всю местность.

    Вы можете увидеть участки светло-зеленой и желтой травы:

  13. Цвета слишком яркие, чтобы соответствовать цветам местности. Уменьшите значение Scale до 0.38, чтобы уменьшить цвет шума.

  14. Травинки довольно тонкие, поэтому сделайте их немного более прозрачными для света, когда он светит сзади: увеличьте параметр Translucent до 0.7 для материала grass_regular. Для материала grass_variation он будет применен автоматически.

    Трава станет более прозрачной и светлой:

  15. Перейдите на вкладку States и включите опцию Translucent для обычной травы. Это активирует параметр Translucent Map на вкладке Textures, который позволяет указать полупрозрачные области травинок.

  16. На вкладке Textures перетащите текстуру полупрозрачности из Asset Browser в поле Translucent Map.

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

  17. Отключите параметр Translucent для материала grass_variation.
  18. Увеличьте значение Alpha Intensity до 1.5, чтобы масштабировать альфа-канал диффузной текстуры обычной травы. В результате травяное поле будет выглядеть более плотным.

  19. На данный момент значения прозрачности и диффузной окраски одинаковы для материалов grass_regular и grass_variation. Измените эти настройки для grass_variation: установите для параметра Translucent значение 0.5, а для параметра Alpha Intensity значение 0.8.

Шаг 4. Настройте плотность и распределение травы#

  1. Во-первых, установите плотность травы. Для обычной травы перейдите в раздел Grass на вкладке Node и измените значение Step на 17. Это уменьшит ячейки, которые используются для рендеринга поля травы, однако это значение не настолько велико, чтобы повлиять на производительность при создании ячейки.

    Для параметра Subdivision следует установить значение 1, чтобы избежать дополнительного разделения ячеек травы: более высокие значения этого параметра обычно используются, когда трава используется в качестве низкополигонального удаленного LOD леса, созданного с помощью World Clutter или Mesh Clutter.

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

  2. Увеличьте Density обычной травы в ячейке до 2.5, чтобы добавить больше травинок на поле. Для различных трав установите это значение равным 0.5.

  3. Теперь подправьте распределение травы. Для обычной травы мы уже установили маску изображения. Теперь вы должны установить его для травы различных типов: перетащите RGBA8 image mask в поле Mask Image в разделе Grass вкладки Node.

    Трава больше не растет на горных вершинах и каменистых участках:

    Примечание
    Чтобы нарисовать маску изображения непосредственно в сцене, используйте Mask Editor.
  4. Установите значение Threshold на 0.3, чтобы увеличить интенсивность маски.

    Примечание
    Выполните этот шаг для обоих объектов grass.

    Это уменьшит площадь, которую покрывает трава:

  5. Обычно трава не растет на крутых склонах холмов. Увеличьте значение Angle до 0.85, чтобы сделать крутые участки без травы.

    Примечание
    Выполните этот шаг для обоих объектов grass.

    Теперь распределение травы стало более реалистичным:

  6. В настоящее время все типы травы различных типов (другими словами, слоты диффузной текстуры ноды grass_variation) равномерно распределены по травяному полю. Однако в природе один вид травы может преобладать над другими или расти небольшими группами. Чтобы добиться этого, измените параметр Probability так, чтобы один тип травы преобладал над другими типами в соответствии с диффузной текстурой.

    Например, вы можете установить коэффициент вероятности равным 4 для 3-го столбца диффузной текстуры:

Шаг 5. Настройте форму и ориентацию травы#

  1. При переходе с голых участков на травянистые наша трава начинает расти такой же мелкой и поредевшей. Но на камнях это смотрится не слишком хорошо. Увеличьте значение Min Height до 1.2. В районах с низкой плотностью (согласно маске) трава будет выше. Вы можете установить разные значения высоты для каждого из четырех столбцов в диффузной текстуре или оставить их одинаковыми для всех.

    Примечание
    Выполните этот шаг для обоих объектов grass. Для обычной травы достаточно установить значение для первого столбца.

  2. Увеличьте Max Height травинок до 1.7 единиц. В районах с высокой плотностью (согласно маске) трава становится выше. Мы также будем использовать одинаковую высоту для всех четырех столбцов в диффузной текстуре.

    Примечание
    Выполните этот шаг для обоих объектов grass. Для обычной травы достаточно установить значение для первого столбца.

  3. В отличие от деревьев, трава обычно растет перпендикулярно рельефу местности. Установите флажок Orientation на вкладке Grass окна Parameters, чтобы сориентировать объекты травы по нормали к местности. Выполняйте его как для обычной, так и для вариационной травы.

  4. Сверху трава кажется слишком плоской. В разделе Material вкладки Node (окно Parameters) перейдите на вкладку Parameters и увеличьте значение Slope до 0.5, чтобы сделать его более похожим на рекламный щит.

    Примечание
    Наклон будет одинаковым как для материалов grass_regular, так и для материалов grass_variation.

  5. Травинки слишком тонкие и иногда выглядят пунктирными линиями. Увеличьте значение Alpha Intencity до 2, чтобы травинки выглядели толще, а трава плотнее.

Шаг 6. Настройте анимации травы#

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

В этом руководстве будет использоваться только первый метод. Пример использования grass с анимированными полями можно найти здесь.

Примечание
Выполните этот шаг для материала grass_regular. Унаследованный материал grass_variation будет иметь те же значения.
  1. На вкладке Parameters раздела Material (вкладка Node, окно Parameters) установите значение Stem noise равным 0, чтобы все травинки двигались равномерно. Это поможет узнать, как настроить анимацию.

  2. Уменьшите значение Stem offset до 0.1, чтобы трава меньше раскачивалась и растягивалась по горизонтали.

  3. Уменьшите значение Stem radius до 0.1, чтобы трава не пригибалась к земле.

  4. Увеличьте значение Stem scale до 2, чтобы трава двигалась в два раза быстрее.

  5. Увеличьте значение Stem noise до 2, чтобы сделать движение лопастей более случайным.

Оптимизация травы#

Оптимизация Grass означает уменьшение количества полигонов grass, отображаемых в каждом кадре, и количества вызовов DIP. Чтобы оптимизировать траву, которую мы добавили и настроили выше, мы уже установили значение Step равным 17: Size поля травы делится точно на это значение, без остатка при делении. Это позволяет избежать визуальных артефактов и неожиданных визуальных эффектов. Также такое значение остается в пределах рекомендуемого оптимального диапазона.

По умолчанию для объектов grass установлена опция Thinning: она позволяет уменьшить количество полигонов grass, отображаемых на расстоянии grass Fade.

После изменения настроек, упомянутых выше, вы можете сравнить предыдущее и текущее количество треугольников травы: просто проверьте счетчик Triangles.

Последнее обновление: 23.06.2023
Build: ()