Unity 6.3
0 онлайн 77 гостей 3 в системе
Вход

Трава и другие детали

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

Детали экземпляров работают со всеми конвейерами рендеринга, включая High Definition Render Pipeline (HDRP).

Территория с травой
Территория с травой

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

Режим Описание
Инстансированная сетка Unity рекомендует использовать этот режим, так как он наиболее подходит для большинства сценариев, требующих размещения любого количества произвольных мешей на поверхности.

Чтобы добавить меш с экземпляром, выберите Добавить меш деталей и включите опцию Использовать GPU Инстансирование.
Сетка Vertex Lit Для рендеринга не используется GPU instancing. Вместо этого, он объединяет все экземпляры деталей в одну сетку, что приводит к простому затенению и ограничению количества экземпляров, которые вы можете достичь.

Чтобы добавить сетку с подсветкой вершин, выберите Добавить деталь сетки и установите Render Mode на Vertex Lit.
Трава сетка Работает аналогично меше списка вершин, но Unity рассматривает эти меши как траву, так что они всегда имеют нормали, обращенные вверх, и движутся в направлении ветра.

Чтобы добавить травяную меш, выберите Добавить детальное сеточку и установите Режим отображения на Трава.
Текстура травы Позволяет создавать травяные меши прямо из текстуры, которые движутся в ветре. Вам не нужно указывать какие-либо пользовательские меши, и есть также опция, которую вы можете включить, чтобы травяные меши всегда смотрели на камеру для эффекта рекламного щита.

Выберите Добавить текстуру травы для этой опции.

Краска Детали

Чтобы включить рисование травы и деталей, выберите кнопку Краска Детали на панели инструментов Terrain Inspector.

Краска Детали в местности Inspector
Краска Детали в местности Inspector

Чтобы получить доступ к Краска Детали из наложения:

  1. В накладке Инструменты для местности выберите Foliage Mode Меню режима листвы. Инструменты режима листвы отображаются в конце накладки Инструменты для местности.
  2. Из доступных инструментов режима листвы на накладке Инструменты для местности выберите Краска Детали Краска Детали.

В Inspector нажмите кнопку Изменить детали, чтобы открыть меню с опциями Добавить сетку деталей и Добавить текстуру травы. Нажмите любую из этих опций, чтобы открыть окно, в котором вы можете выбрать Активы, которые нужно добавить в Территорию для рисования.

Добавить деталь сетки

Окно «Добавить деталь сетки»
Окно «Добавить деталь сетки»

Используйте поле Detail Префаб, чтобы выбрать Префаб из вашего Project. Чтобы создать аутентичное впечатление, случайный фактор влияет на каждую сетку, чтобы определить размер и цвет. Unity использует алгоритм шума Перлина для генерации таких случайных факторов.

Значения Min Width, Max Width, Min Heightи Max Height определяют верхний и нижний масштабы вдоль осей X и Y, с которыми меши генерируются случайным образом.

Значение Align to Ground (%) задаёт степень выравнивания оси объекта детализации по нормали рельефа. При значении 0 выравнивание отсутствует, а при 100 ось полностью выровнена по нормали.

Position Jitter (%) контролирует случайность распределения деталей от упорядоченной до случайной. Этот параметр доступен только в том случае, если устаревшее распределение отключено в Настройки качества.

Настройка Noise Seed устанавливает генератор случайных чисел. Каждое значение seed представляет уникальное поколение. Если вы устанавливаете одно и то же значение seed для двух типов деталей, генерируемые экземпляры становятся идентичными. Значение Noise Spread относится к масштабированию образца шума в плоскости X-Z, с более высокими значениями, указывающими на большее количество вариаций в данной области.

Настройка Заполнение края отверстия (%) определяет, на каком расстоянии от края отверстия находятся детали. Более подробную информацию см. в DetailPrototype.holeEdgePadding.

Значение плотности деталей контролирует плотность деталей относительно их размера. Вы можете включить это в режиме рассеивания деталей “Покрытие”, установленном в Настройках местности.

Здоровый цвет и Сухой цвет Настройки контролируют вариацию цвета. Unity выполняет линейную интерполяцию между здоровыми и сухими цветами и выбирает цвет на основе размера меши. Например, система считает, что меши большего размера здоровее. Результаты линейной интерполяции для таких мешей больше склоняются к оттенку Здоровый цвет. Эти цветовые настройки исчезают, когда вы выбираете Использование GPU Инстансирование, так как они не влияют на экземплярные меши.

Флажок Зависит от масштаба плотности определяет, влияет ли на эту деталь настройка Масштаб плотности деталей, установленная в Настройки местности.

Вы можете установить Режим Рендирования на Вертикальное освещение или Трава.

Режим отображения Описание
Вертекс Лит Отображает меши деталей как сплошные, вершины освещенные GameObjects в сцене, которые не двигаются в ветре.
Трава Отображает детали меши в сцене с упрощенным освещением, подобным Grass Textures, и движется в ветре.

Примечание: Чтобы применить текстуру к детали в режиме рендеринга Vertex Lit или Grass, назначьте текстуру свойству материала MainTex (имя свойства по умолчанию для базовой карты цветов во встроенном/URP). Другие свойства материала не рассматриваются для деталей, не имеющих экземпляров.

Использование экземпляра GPU

Вы можете указать, хотите ли вы использовать GPU instancing для рендеринга детализированных мешей. При GPU instancing, Unity использует материал и шейдер, указанный на префаб для рендеринга. Это позволяет вам выполнять больше настроек в шейдере и использовать Shader Graph.

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

Под капотом, некоторые ограничения Unity GPU экземпляр влияют на отображение. Например:

  • Ваша целевая платформа должна поддерживать создание экземпляров GPU.
  • Ваш шейдер должен поддерживать GPU instancing. (Большинство шейдеров это поддерживают.)
  • Объекты отображаются партиями по 1023 или меньше.
  • Подсветка экземплярного светового зонда или подсветка lightmap не поддерживается.

В отличие от обычного инстанционирования, где Unity динамически создает буфер инстанционной константы каждый кадр, детали инстанционирования имеют постоянные константные буферы для улучшения производительности CPU и GPU, когда это позволяет целевое оборудование, ценой умеренного увеличения использования памяти GPU.

Если вы выбрали Использовать GPU Создание экземпляра, параметр Режим отображения станет серым и недоступен.

Добавить текстуру травы

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

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

Детальная Текстура — это Текстура, которая представляет траву. Вы можете скачать Текстуры из Asset Store, или создать собственные Текстуры. Текстура — это небольшое изображение с нулевым альфа для пустых областей. Обратите внимание, что "Трава" — это общий термин; возможно, что Текстура представляет цветы или искусственные объекты, такие как катушки колючей проволоки.

Параметры Min Width, Max Width, Min Height, Max Height, Noise Seed, Noise Spread, Hole Edge Padding (%), Align to Ground (%), Position Jitter (%), Detail Density, Affected by Density Scale, Healthy Color и Dry Color работают так же, как и для мешей. Дополнительные сведения см. в разделе Add Detail Mesh выше.

При включении опции Билборд изображения травы вращаются так, что они всегда обращены к Camera. Это полезно, когда вы хотите показать густое поле травы, потому что куски травы двумерны и не видны сбоку. Однако, при редкой траве вращения отдельных кусочков могут стать видимыми, что может создать странный визуальный эффект.

Удалить детали

Чтобы удалить детали, выберите их, нажмите кнопку Изменить детали, затем выберите Удалить. При удалении детали Unity удаляет данные, представляющие область Территории, на которой вы рассеяли эту детали.