This page has been translated automatically.
Видеоуроки
Интерфейс
Основы
Продвинутый уровень
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Профессиональный уровень (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Физика
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Контроль версий
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Player-ноды
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Материалы и шейдеры
Rebuilding the Engine Tools
Интерфейс пользователя (GUI)
Двойная точность координат
API
Animations-Related Classes
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
VR-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Учебные материалы

Трава (Grass)

Grass is rendered as a set of 2D textures (blades), each representing a small grass tuft. Grass diversity is achieved by the probabilistic factor that influences the grass blades height, offset, color, etc., which grants convincing illusion of natural variation with fine details, while not monopolizing the GPU. Grass can be animated, which makes it realistically sway in the wind.Трава отображается в виде набора 2D текстур (травинок), каждая из которых представляет собой небольшой пучок травы. Разнообразие травы достигается за счет вероятностного фактора, который влияет на высоту травинок, смещение, цвет и т.д., Что создает убедительную иллюзию естественного разнообразия с мелкими деталями, не монополизируя графический процессор. Траву можно анимировать, что позволяет ей реалистично раскачиваться на ветру.

See AlsoСмотрите также#

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

To add grass to the world, perform the following:Чтобы добавить траву в мир, выполните следующие действия:

  1. On the Menu bar, click Create -> Grass -> Base.В меню выберите пункт Create -> Grass -> Base.

  2. Place the object somewhere in the world.Поместите объект где-нибудь в мире.

The default grass field would appear with the grass_base material assigned.Поле травы по умолчанию будет отображаться с присвоенным материалом grass_base.

Rendering GrassРендеринг травы#

Rendering of grass mostly depends on two textures:Рендеринг травы в основном зависит от двух текстур:

  • Diffuse texture defines the grass shape and color.текстура Diffuse определяет форму и цвет травы.
  • Mask texture determines grass mapping and density distribution on the terrain.текстура Mask определяет отображение травы и распределение плотности на местности.

For convenience, the diffuse texture is subdivided into chunks. Each chunk is rendered depending on the used mask values. To utilize maximum variations of grass species, chunks are placed in the texture as follows:Для удобства диффузная текстура разделена на куски. Каждый фрагмент отображается в зависимости от используемых значений маски. Чтобы максимально использовать вариации видов травы, куски помещаются в текстуру следующим образом:

  • The horizontal row can have up to 4 chunks. Each chunk corresponds to the red, green, blue, and alpha channels of the mask.Горизонтальная строка может содержать до блоков 4. Каждый фрагмент соответствует красному, зеленому, синему и альфа-каналам маски.

  • The number of chunks in the vertical column can be from 1 to 4. Chunks in the column represent variations of grass for the corresponding mask channel. Usually, each channel corresponds to the particular species of grass (thiner, thicker, tangled, etc.). If there are several grass clusters in a vertical column, they are randomly spread across the masked area.Количество блоков в вертикальном столбце может быть от 1 до 4. Фрагменты в столбце представляют вариации травы для соответствующего канала маски. Обычно каждый канал соответствует определенному виду травы (более тонкой, густой, спутанной и т.д.). Если в вертикальном столбце есть несколько скоплений травы, они случайным образом распределяются по замаскированной области.

    For the texture to be split into the correct number of chunks, the number of chunks that you've used per column should be specified in the Num Textures field. For example, for the diffuse texture below, Num Textures = 4 should be specified.Чтобы текстура была разделена на правильное количество фрагментов, в поле Num Textures должно быть указано количество фрагментов, которые вы использовали для каждого столбца. Например, для приведенной ниже диффузной текстуры следует указать значение Num Textures = 4.

Texture Type Setting
Diffuse RGBA:
  • RGB values store the grass color information.RGB values store the grass color information.
  • A value stores transparency information and defines which parts of the grass chunks will be rendered colored and which ones will be cut by alpha testing.A value stores transparency information and defines which parts of the grass chunks will be rendered colored and which ones will be cut by alpha testing.
RGB values store the grass color information.A value stores transparency information and defines which parts of the grass chunks will be rendered colored and which ones will be cut by alpha testing.
RGBA:
  • RGB values store the grass color information.значения RGB хранят информацию о цвете травы.
  • A value stores transparency information and defines which parts of the grass chunks will be rendered colored and which ones will be cut by alpha testing.значение A хранит информацию о прозрачности и определяет, какие части кусков травы будут окрашены, а какие будут обрезаны при альфа-тестировании.
Set in the Textures tab of the grass_base material.Устанавливается на вкладке Textures материала grass_base.
Mask

RGBA8: each channel controls distribution of the chunks in the vertical column of the grass diffuse texture.RGBA8: каждый канал управляет распределением фрагментов в вертикальном столбце диффузной текстуры травы.

  • Red channel specifies the areas of growth for the 1st texture column.Красный канал определяет области роста для 1-го столбца текстуры.
  • Green — for the 2nd texture column.Зеленый — для 2-го столбца текстуры.
  • Blue — for the 3rd texture column.Синий — для 3-го столбца текстуры.
  • Alpha — for the 4th texture column.Альфа — для 4-го столбца текстуры.
Примечание
In case R8, RG8, or RGB8 texture is used as a mask, the diffuse texture must have only one, two, or three columns. So, if your diffuse texture contains, for example, only 1 vertical column, the R8 texture should be used.В случае, если в качестве маски используется текстура R8, RG8 или RGB8, диффузная текстура должна содержать только один, два или три столбца. Итак, если ваша диффузная текстура содержит, например, только 1 вертикальный столбец, следует использовать текстуру R8.

0 mask channel values (no color) create areas where grass should not grow. Non-zero channel values create a grassy area: the higher the value, the denser grass grows.значения канала маски 0 (без цвета) создают области, где трава расти не должна. Ненулевые значения канала создают травянистую зону: чем выше значение, тем гуще растет трава.

If the mask texture is not set, the default white texture is used. It doesn't have a predefined amount of channels: the type of this texture depends on the value set in the Num Textures field. So, if Num Textures = 2, the default mask texture will be RG8.Если текстура маски не задана, используется белая текстура по умолчанию. У него нет предопределенного количества каналов: тип этой текстуры зависит от значения, установленного в поле Num Textures. Итак, если Num Textures = 2, текстура маски по умолчанию будет RG8.

Set in the ObjectGrass -> Node tab -> Grass section - > Mask Image field.Установите на вкладке ObjectGrass -> Node → раздел Grass - поле > Mask Image.

For example, we have the following diffuse and mask textures:Например, у нас есть следующие диффузные и маскирующие текстуры:

Diffuse textureДиффузная текстура
RBG and A channels of the maskRBG и каналы маски

We see that in the first column, chunks of the green shades correspond to the red channel of the mask, which is 9 red rhombuses; in the second column, chunks of the real grass variation correspond to the green channel of the mask, which is the square green mask frame; in the third column, chunks of the red shades correspond to the blue channel of the mask, which is the blue rhombuses frames; and in the fourth column, chunks of the yellow shades correspond to the alpha channel of the mask, which is the rest black areas (note that these parts won't re rendered, as there no alpha color data).Мы видим, что в первом столбце фрагменты зеленых оттенков соответствуют красному каналу маски, который представляет собой 9 красных ромбов; во втором столбце фрагменты реальной вариации травы соответствуют зеленому каналу маски, который представляет собой квадратную зеленую рамку маски; в третьем столбце, фрагменты красных оттенков соответствуют синему каналу маски, который является рамками синих ромбов; а в четвертом столбце фрагменты желтых оттенков соответствуют альфа-каналу маски, который является остальными черными областями (обратите внимание, что эти части не будут повторно отображаться, так как там нет данных об альфа-цвете).

The result will be as follows:Результат будет следующим:

Randomizing GrassРандомизация травы#

To randomize appearance of grass blades, two types of values are used:Для рандомизации внешнего вида травинок используются два типа значений:

  • Mean Value (set in the main field of the parameter: Min/Max Bend, Min/Max Height, Aspect, Offset) defines the average value of distribution. Four fields correspond to the red, green, blue, and alpha channels of the diffuse texture correspondingly. Using this value, the designer can set milestones to control the parameter.Mean Value (задается в основном поле параметра: Min/Max Bend, Min/Max Height, Aspect, Offset) определяет среднее значение распределения. Четыре поля соответствуют красному, зеленому, синему и альфа-каналам диффузной текстуры соответственно. Используя это значение, разработчик может установить контрольные точки для управления параметром.

  • Spread Value defines the range for possible variation of the parameter. Four fields correspond to the red, green, blue, and alpha channels of the diffuse texture correspondingly. The higher the value, the more diverse the final result is.Spread Value определяет диапазон возможного изменения параметра. Четыре поля соответствуют красному, зеленому, синему и альфа-каналам диффузной текстуры соответственно. Чем выше значение, тем разнообразнее конечный результат.

    Примечание
    The spread value is optional: if set to 0, it does not affect the simulation process. In such a case, only the mean value is uniformly used.Значение разброса является необязательным: если установлено значение 0, оно не влияет на процесс моделирования. В таком случае равномерно используется только среднее значение.

An example of using the Spread Value is provided for the Min/Max Height parameter. It is applied similarly to the Min/Max Bend, Aspect, and Offset parameters.Пример использования Spread Value приведен для параметра Min/Max Height. Он применяется аналогично параметрам Min/Max Bend, Aspect и Offset.

Mean and spread values of the grass randomization parametersСредние и разбросанные значения параметров рандомизации grass

ProbabilityProbability#

The probability of appearance of the grass chunk belonging to a specific mask channel (horizontal row) depends on the Probability parameter. The variations of the specie (vertical column) are rendered randomly.Вероятность появления фрагмента grass, принадлежащего определенному каналу маски (горизонтальная строка), зависит от параметра Probability. Вариации вида (вертикальный столбец) отображаются случайным образом.

Probability of appearance of the grass slots belonging to the red, green, blue, and alpha channels of the mask correspondinglyВероятность появления слотов травы, принадлежащих красному, зеленому, синему и альфа-каналам маски соответственно

Let's check several variations of the Probability parameter for the following diffuse texture:Давайте проверим несколько вариантов параметра Probability для следующей диффузной текстуры:

The default RGBA8 white texture is used as a mask (as there are 4 chunks in the diffuse texture, we set Num Textures to 4). The mask value is white = 1, therefore, the whole grass area is filled.Белая текстура RGBA8 по умолчанию используется в качестве маски (поскольку в диффузной текстуре 4 фрагмента, мы устанавливаем Num Textures равным 4). Значение маски равно white = 1, следовательно, вся область травы будет заполнена.

In the pictures below, different variations of the Probability parameter are shown:На рисунках ниже показаны различные варианты параметра Probability:

Probability = 1 1 1 1
Probability = 0.1 0 0 1
Probability = 0 1 0 1
Probability = 0.1 0.3 0.7 1

Min/Max BendMin/Max Bend#

Bending means sloping of a grass quad forward or backward at a certain angle.Изгиб означает наклон травяного квадрата вперед или назад под определенным углом.

Min Bend is the mean grass quad sloping value in areas with the lowest density according to the mask. Max Bend is the mean grass quad sloping value in areas with the highest density according to the mask. Both Min/Max Bend and their spread values are set for each diffuse texture column separately.Min Bend - это среднее значение уклона травы в областях с наименьшей плотностью в соответствии с маской. Max Bend - это среднее значение уклона травы в областях с наибольшей плотностью в соответствии с маской. Как Min/Max Bend, так и их значения spread устанавливаются для каждого столбца диффузной текстуры отдельно.

Min/Max HeightMin/Max Height#

Min Height is the mean grass height value in areas with the lowest density according to the mask. Max Height is the mean grass height value in areas with the highest density according to the mask. Both Min/Max Height and their spread values are set for each diffuse texture column separately.Min Height - это среднее значение высоты травы в областях с наименьшей плотностью в соответствии с маской. Max Height - это среднее значение высоты травы в областях с наибольшей плотностью в соответствии с маской. Как Min/Max Height, так и их значения spread устанавливаются для каждого столбца диффузной текстуры отдельно.

Let's compare the following examples:Давайте сравним следующие примеры:

If we set the Min Height value equal to 1 with the Spread value of 0.3, the height interval for the grass in the areas with the lowest density is from 0.7 (i.e., 1 - 0.3) to 1.3 (i.e., 1 + 0.3), meaning that each grass quad has its own height selected randomly from this interval.Если мы установим значение Min Height равным 1, а значение Spread равно 0.3, интервал высоты травы в областях с наименьшей плотностью составит от 0.7 (т.е. 1 - 0,3) до 1.3 (т.е. 1 + 0,3), что означает, что каждый травяной квадрат имеет свою собственную высоту, выбранную случайным образом из этого интервала. With the Min Height value equal to 1.2 and the Spread value of 1, the height interval for the grass in the areas with the lowest density is from 0.2 (i.e., 1.2 - 1) to 2.2 (i.e., 1.2 + 1), meaning that each grass quad has its own height selected randomly from this interval.При минимальном значении высоты, равном 1.2, и значении разброса 1 интервал высоты травы в областях с наименьшей плотностью составляет от 0.2 (т.е. 1,2 - 1) до 2.2 (т.е. 1,2 + 1), это означает, что каждый травяной квадрат имеет свою собственную высоту, выбранную случайным образом из этого интервала.
Min Height = 1; Spread = 0.3
Min Height = 1.2; Spread = 1

It works the same way for Max Height.Это работает так же для Max Height.

For the Max Height value equal to 3 and the Spread value equal to 0.3, the height interval for the grass in the areas with the highest density is from 2.7 (i.e., 3 - 0.3) to 3.3 (i.e., 3 + 0.3), meaning that each grass quad has its own height selected randomly from this interval.Для значения Max Height, равного 3, и значения разброса, равного 0.3, интервал высоты травы в областях с наибольшей плотностью составляет от 2.7 (т.е. 3 - 0,3) до 3.3 (т.е. 3 + 0,3), это означает, что каждый травяной квадрат имеет свою собственную высоту, выбранную случайным образом из этого интервала. For the Max Height value equal to 3 and the Spread value equal to 1, the height interval for the grass in the areas with the highest density is from 2 (i.e., 3 - 1) to 4 (i.e., 3 + 1), meaning that each grass quad has its own height selected randomly from this interval.Для значения Max Height, равного 3, и значения разброса, равного 1, интервал высоты травы в областях с наибольшей плотностью составляет от 2 (т.е. 3 - 1) до 4 (т.е. 3 + 1), это означает, что каждый травяной квадрат имеет свою собственную высоту, выбранную случайным образом из этого интервала.
Max Height = 3; Spread = 0.3
Max Height = 3; Spread = 1

AspectAspect#

To render the intended grass quad, in addition to the height, it should also have the width set. To preserve the proportions of the quad, width is not specified directly, but rather using the aspect parameter. So the final width is calculated by multiplying Max Height by Aspect.Чтобы отобразить предполагаемый квадрат травы, в дополнение к высоте, у него также должна быть установлена ширина. Чтобы сохранить пропорции квадрата, ширина задается не напрямую, а с помощью параметра aspect. Таким образом, конечная ширина вычисляется путем умножения Max Height на Aspect.

Aspect is set for each diffuse texture column separately. Like the Height parameter, Aspect can be randomly varied if the Spread value is set in addition to the Mean value. For example, setting spread to 0 yields the following result:Aspect устанавливается для каждого столбца диффузной текстуры отдельно. Как и параметр Height, значение Aspect может изменяться случайным образом, если в дополнение к значению Mean задано значение Spread. Например, установка значения spread равным 0 приводит к следующему результату:

  • If the mean value is set to 1, grass is rendered in square proportions, with the height equal to the width.Если для среднего значения задано значение 1, трава отображается в квадратных пропорциях, при этом высота равна ширине.
  • If the mean value is set to 2, the width of the grass quad is twice its height.Если среднее значение равно 2, ширина квадрата травы в два раза превышает его высоту.
Aspect = 1; Spread = 0
Aspect = 2; Spread = 0

OffsetOffset#

Sometimes to avoid visual artifacts, it is necessary to slightly raise grass quads above the ground. This parameter specifies the offset in units up the surface normal, thus accurately repeating its relief. It is set by the mean value (only positive) and additional spread value (positive or negative), if variation is required.Иногда, чтобы избежать визуальных артефактов, необходимо слегка приподнять травяные каре над землей. Этот параметр определяет смещение в единицах вверх по нормали к поверхности, таким образом точно повторяя ее рельеф. Он устанавливается значением mean (только положительным) и дополнительным значением spread (положительным или отрицательным), если требуется изменение.

RotationRotation#

Rotation of grass quads adds more diversity. This parameter specifies the rotation of grass quads in degrees in random directions . It is set by the mean value (only positive) and additional spread value (positive or negative), if variation is required. Values are set for each diffuse texture column separately.Чередование травяных квадратов добавляет больше разнообразия. Этот параметр определяет поворот квадратов травы в градусах в произвольных направлениях. Он устанавливается значением mean (только положительным) и дополнительным значением spread (положительным или отрицательным), если требуется изменение. Значения устанавливаются для каждого столбца диффузной текстуры отдельно.

Texture SlotsСлоты для текстур#

On one single field, it may be necessary to simulate grass that had grown in good and bad conditions, shooting young grass blades and withered straw. The grass diffuse texture can have 4 x n slots, each containing a separate grass cluster, plant, or flower. The number of horizontal rows in the texture can be from 1 to 4. However, the number of vertical columns may vary depending on the way the grass distribution is specified:На одном поле может потребоваться имитировать траву, которая росла в хороших и плохих условиях, снимая молодые травинки и пожухлую солому. Диффузная текстура травы может иметь слоты 4(nbs)x(nbs)n, каждый из которых содержит отдельный пучок травы, растение или цветок. Количество горизонтальных строк в текстуре может быть от 1 до 4. Однако количество вертикальных столбцов может варьироваться в зависимости от способа определения распределения травы:

  • If the image mask is used to specify grass density distribution, the number of diffuse texture columns can be less than 4.Если маска изображения используется для указания распределения плотности травы, количество столбцов диффузной текстуры может быть меньше , чем 4.

    Примечание
    The number of diffuse texture columns in this case is determined by the number of channels in the mask texture (e.g., diffuse texture must have 1 column if an R8 mask is used).Количество столбцов диффузной текстуры в этом случае определяется количеством каналов в текстуре маски (например, диффузная текстура должна иметь столбец 1, если используется маска R8).
  • If a mesh mask is used to specify grass distribution, the number of diffuse texture columns must be equal to 4.Если для указания распределения травы используется mesh-маска , количество столбцов диффузной текстуры должно быть равно 4.
  • If both masks are used (the image mask sets grass density distribution and the mesh mask is used to exclude some areas, such as roads, the number of diffuse texture columns also must be equal to 4.Если используются обе маски (маска изображения задает распределение плотности травы, а Mesh-маска используется для исключения некоторых областей, таких как дороги, количество столбцов диффузной текстуры также должно быть равно 4.

The Num Textures parameter sets a number of horizontal rows with grass clusters, plants, or flowers available in the diffuse texture, and this value cannot exceed 4. After specifying the number, each grass cluster is rendered as a separate quad on the field.Параметр Num Textures задает количество горизонтальных строк с кластерами травы, растений или цветов, доступных в диффузной текстуре, и это значение не может превышать 4. После указания номера каждый кластер травы отображается как отдельный квадрат на поле.

4 Texture Slots; Num Textures = 1
8 Texture Slots; Num Textures = 2

VariationVariation#

To add more diversity to grass and avoid total uniformity of all blades on the field (especially required, if grass is represented as billboards), the variation option can be enabled. On randomly chosen quads, it flips the texture horizontally, automatically giving two variants of rendering the same quad.Чтобы добавить больше разнообразия траве и избежать полного единообразия всех травинок на поле (особенно это необходимо, если трава представлена в виде рекламных щитов), можно включить опцию variation. На случайно выбранных квадратиках он переворачивает текстуру по горизонтали, автоматически предоставляя два варианта рендеринга одного и того же квадрата.

Two possible variations for grass (automatic horizontal flipping)Два возможных варианта для травы (автоматическое горизонтальное переворачивание)

Grass Quads OrientationОриентация квадратов травы#

To make grass quads repeat the relief, the following parameters are set up:Чтобы травяные квадраты повторяли рельеф, настраиваются следующие параметры:

  • Orientation. A grass quad can be oriented either along its own normal vector, or along the normal vector of its parent node (usually a terrain). However, on steep hills, grass oriented along the terrain normal can look unnatural (as the grass growth direction is up), so you will need to choose an appropriate value for the Angle parameter.Orientation. Травяной квадрат может быть ориентирован либо вдоль его собственного вектора нормали, либо вдоль вектора нормали его родительской ноды (обычно рельефа). Однако на крутых холмах трава, ориентированная вдоль нормали рельефа, может выглядеть неестественно (поскольку направление роста травы вверх), поэтому вам нужно будет выбрать подходящее значение для параметра Angle.

    In the right picture below, the Angle parameter is set incorrectly and the grass grows almost perpendicular to the slope:На правом рисунке ниже параметр Angle установлен неправильно, и трава растет почти перпендикулярно склону:

    Grass polygons oriented along normal of Grass ObjectМногоугольники травы, ориентированные по нормали к объекту травы
    Grass polygons oriented along normal of Terrain ObjectТравяные полигоны, ориентированные по нормали к объекту рельефа
  • Angle. This parameter affects to grass distribution that varies depending on the ground slope angle. This parameter simulates the natural tendency of the grass to strike root in more flat places.Angle. Этот параметр влияет на распределение травы, которое меняется в зависимости от угла наклона грунта. Этот параметр имитирует естественную тенденцию травы укореняться на более ровных местах.
  • Intersection. By reproducing the hilly landscape, it is essential that the grass follows the relief it grows on. For the grass to be rendered upon the ground, the following is necessary:Intersection. Воспроизводя холмистый ландшафт, важно, чтобы трава повторяла рельеф, на котором она растет. Для того чтобы трава была нанесена на землю, необходимо следующее:

    1. Make the grass a child of the terrain or any arbitrary mesh (static or dynamic one). If there are some nodes in the hierarchy between a terrain or mesh node and grass, intersections will still be checked.Сделайте траву дочерним элементом ландшафта или любого произвольного меша (статического или динамического). Если в иерархии есть несколько нод между нодой ландшафта или меша и травой, пересечения все равно будут проверены.
    2. Enable the Intersection option.Включите опцию Intersection.

Size of the Grass FieldРазмер травяного поля#

The grass can shoot as a few separate blades, or form a field of verdure stretching to the horizon. The size of the field determines the extent of rectangular area, which is covered with grass.Трава может расти как несколько отдельных травинок, так и образовывать зеленое поле, простирающееся до горизонта. Размер поля определяет протяженность прямоугольной площади, которая покрыта травой.

  • Size X specifies the length of the grass area along the X axis.Size X задает длину участка травы вдоль оси X.
  • Size Y specifies the length of the grass area along the Y axis.Size Y задает длину участка травы вдоль оси Y.

Step for Cell DivisionЭтап для деления клеток#

Visually attractive grass, however, may reduce performance if rendered as a whole. To allow rendering at interactive frame rates, the field is split into cells that form a grid. Each cell is estimated, whether it contributes to the grass field or stays grassless. Grassless cells are disregarded, while for the cells with grass all required computations are done. Depending on the density, blades are planted in the cell with random coordinates imitating the natural vegetation sprouting. The cells are rendered one by one, starting from the camera and further forward.Однако визуально привлекательная трава может снизить производительность при рендеринге в целом. Чтобы обеспечить визуализацию с интерактивной частотой кадров, поле разбивается на ячейки, которые образуют сетку. Оценивается каждая ячейка, независимо от того, вносит ли она свой вклад в травяное поле или остается без травы. Ячейки без травы игнорируются, в то время как для ячеек с травой выполняются все необходимые вычисления. В зависимости от плотности ячейку высаживаются лопасти со случайными координатами, имитирующими прорастание естественной растительности. Ячейки отображаются одна за другой, начиная с камеры и далее вперед.

To get the resulting number of cells, Size of the field (both along X and Y axes) is split using the Step value.Чтобы получить результирующее количество ячеек, Size поля (как по осям X, так и Y) разбивается с использованием значения Step.

Примечание
  • Size of the field should be divided by Step exactly. Otherwise, if there is a remainder of a division, it may result in visual artifacts and unexpected visual effects.Size поля должно быть ровно разделено на Step. В противном случае, если есть остаток от деления, это может привести к визуальным артефактам и неожиданным визуальным эффектам.
  • Each cell requires 1 DIP call, so the higher the number of cells (i.e. the smaller the step), the lower the performance is. However, to create one large grass cell takes longer time. When the camera moves fast enough, small cells are created one by one very fast and smoothly, but large ones can noticeably pop into sight and cause a small rendering lag. Usually the Step value is set between 10 and 25 (for normal grass; if grass is used as a distant LOD of World Clutter or Mesh Clutter, Step may be different).Для каждой ячейки требуется DIP-вызов 1, поэтому, чем больше количество ячеек (т.е. чем меньше шаг), тем ниже производительность. Однако для создания одной большой ячейки травы требуется больше времени. Когда камера движется достаточно быстро, маленькие ячейки создаются одна за другой очень быстро и плавно, но большие могут заметно появляться в поле зрения и вызывать небольшую задержку рендеринга. Обычно значение Step устанавливается между 10 и 25 (для обычной травы; если трава используется в качестве удаленного LOD, значение World Clutter или Mesh Clutter, Step может отличаться).

Controlling the step for dividing field into cells allows you to change the field size without affecting the set density for planting grass blades. On the other hand, if we change the step and consequently the number of cells without altering the density value, the number of grass quads rendered will be different.Управление шагом разделения поля на ячейки позволяет изменять размер поля, не влияя на заданную плотность посадки травяных стеблей. С другой стороны, если мы изменим шаг и, следовательно, количество ячеек без изменения значения плотности, количество отображаемых квадратов травы будет другим.

If the Step value is too small and the maximum visibility distance is large, rendering of cells takes some time and the number of DIP calls increases significantly. On the other hand, a very high Step value causes performance spikes due to the increased number of objects per cell.Если значение Step слишком мало, а максимальное расстояние видимости велико, рендеринг ячеек занимает некоторое время, а количество вызовов DIP значительно увеличивается. С другой стороны, очень высокое значение Step вызывает скачки производительности из-за увеличения количества объектов в ячейке.

Cell SubdivisionПодразделение ячейки#

Each cell can also be subdivided into smaller parts by specifying the Subdivision value. Subdivision is usually required when the grass is used as a low-poly distant LOD of a forest created by using World Clutter or ObjectMeshClutter with a smaller cell size: the Subdivision parameter subdivides large grass cells so that they match smaller cells of a clutter. This way, positions of randomly scattered objects will coincide with positions of grass-based impostors. The range of available values is from 1 to 32.Каждую ячейку также можно разделить на более мелкие части, указав значение Subdivision. Разделение обычно требуется, когда трава используется в качестве низкополигонального удаленного LOD леса, созданного с помощью World Clutter или ObjectMeshClutter с меньшим размером ячейки: параметр Subdivision подразделяет большие ячейки травы так, чтобы они соответствовали меньшим ячейкам беспорядка. Таким образом, позиции случайно разбросанных объектов будут совпадать с позициями самозванцев на траве. Диапазон доступных значений составляет от 1 до 32.

Masks for the Grass FieldМаски для травяного поля#

Image Mask for the Grass FieldМаска изображения для травяного поля#

To simulate a convincingly looking pasture that naturally blends with the rest of the virtual environment, the grass field can take an arbitrary outline gradually shaping and growing on the ground. Furthermore, the grass can grow chaotically and irregularly forming clumps of green and grassless patches, just like in the nature. To implement this effect, the mask is mapped on the terrain to determine the density distribution.Чтобы имитировать убедительно выглядящее пастбище, которое естественным образом сливается с остальной виртуальной средой, травяное поле может принимать произвольные очертания, постепенно формирующиеся и растущие на земле. Кроме того, трава может расти хаотично и нерегулярно, образуя скопления зелени и участки без травы, как в природе. Чтобы реализовать этот эффект, маска наносится на карту местности для определения распределения плотности.

The mask is an RGBA8 texture. Each channel of this texture controls distribution of grass per vertical column of the grass diffuse texture (there can be up to 4 columns in the diffuse texture).Маска представляет собой текстуру RGBA8. Каждый канал этой текстуры управляет распределением травы по вертикальному столбцу диффузной текстуры grass (в диффузной текстуре может быть до 4 столбцов).

  • Red channel specifies the areas of growth for the 1st texture column. If there are several grass clusters in a vertical column, they are randomly spread across the masked area. Красный канал определяет области роста для 1-го столбца текстуры. Если в вертикальном столбце есть несколько скоплений травы, они случайным образом распределяются по замаскированной области.
  • Green — for the 2nd texture column. Зеленый — для 2-го столбца текстуры.
  • Blue - for the 3rd texture column. Синий - для 3-го столбца текстуры.
  • Alpha - for the 4th texture column. Альфа - для 4-го столбца текстуры.
Примечание
In case R8, RG8, or RGB8 texture is used as a mask, the diffuse texture must have only one, two, or three columns respectively. So, if your diffuse texture contains, for example, only 1 vertical column, the R8 texture should be used.В случае, если в качестве маски используется текстура R8, RG8 или RGB8, диффузная текстура должна иметь только один, два или три столбца соответственно. Итак, если ваша диффузная текстура содержит, например, только 1 вертикальный столбец, следует использовать текстуру R8.

For every channel separately, areas where the grass should not grow have 0 channel value (no color or alpha data). Non-zero channel value creates a grassy area: the higher the value, the denser the grass grows.Для каждого канала в отдельности области, где трава не должна расти, имеют значение канала 0 (нет данных о цвете или альфа). Ненулевое значение канала создает травянистую зону: чем выше значение, тем гуще растет трава.

The image mask is characterized with the following parameters:Маска изображения характеризуется следующими параметрами:

  • Threshold that controls starting from what density (according to the mask), the grass should grow.Threshold, который определяет, начиная с какой плотности (в соответствии с маской) должна расти трава.
  • Min value and Max value that set the color density range.Min value и Max value, которые задают диапазон плотности цвета.
  • Flip X and Flip Y that flip the texture horizontally and vertically (respectively).Flip X и Flip Y, которые переворачивают текстуру по горизонтали и вертикали (соответственно).
Примечание
To paint the image mask directly in the scene, use Mask Editor.Чтобы нарисовать маску изображения непосредственно в сцене, используйте Mask Editor.

Minimum and Maximum Mask ValuesМинимальные и Максимальные значения маски#

As a solution for advanced objects seeding and memory consumption optimization, a mask can be applied to the object partially. It means that different multiple objects can share the same mask, but use different levels.В качестве решения для расширенного заполнения объектов и оптимизации потребления памяти к объекту можно частично применить маску. Это означает, что разные множественные объекты могут использовать одну и ту же маску, но использовать разные уровни.

By default, each channel of the image mask specifies the areas and the density of growth in the [0;255] color density range. However, by using Min value and Max value, you can modify a certain color density range, and the part of the mask that contains the specified density range will be used to seed the grass.По умолчанию каждый канал маски изображения определяет области и плотность роста в диапазоне плотности цвета [0;255]. Однако, используя Min value и Max value, вы можете изменить определенный диапазон плотности цвета, и часть маски, содержащая указанный диапазон плотности, будет использоваться для посева травы.

For example, there is the following R8 image mask:Например, существует следующая маска изображения R8:

Several grass objects that represent grass of different heights can share this mask as follows:Несколько объектов травы, представляющих траву разной высоты, могут совместно использовать эту маску следующим образом:

  • In range from 100 to 200, density of the short grass can be stored. The part of the image mask, in which the specified range of color gradation is stored, will be applied for the short grass object.В диапазоне от 100 до 200 может быть сохранена плотность короткой травы. Часть маски изображения, в которой сохранен указанный диапазон цветовой градации, будет применена к объекту с короткой травой.
  • In range from 160 to 230, density of the grass of the medium height can be stored.В диапазоне от 160 до 230 может быть сохранена плотность травы средней высоты.
  • In range from 190 to 255 density of the tall grass can be stored.В диапазоне от 190 до 255 может сохраняться плотность высокой травы.

Terrain MaskМаска местности#

The same way as by an arbitrary image mask, the grass density distribution can be defined by ObjectLandscapeTerrain masks. If a Landscape Terrain object is present in the world and has some masks provided, the names of the masks are available in the Mask Terrain parameter, so you can specify a certain landscape mask for each grass texture slot (grass type).Так же, как и с помощью произвольной маски изображения, распределение плотности травы может быть определено с помощью ObjectLandscapeTerrain masks. Если объект Landscape Terrain присутствует в мире и имеет некоторые предоставленные маски, имена масок доступны в параметре Mask Terrain, поэтому вы можете указать определенную ландшафтную маску для каждого слота текстуры травы (тип травы).

Mask Terrain parameterПараметр местности маски

Grass distribution based on a landscape mask. Landscape Masks helper is enabledРаспределение травы на основе ландшафтной маски. включен помощник Landscape Masks

Mesh MaskМаска на основе меша#

Vector masking allows creating roads, rivers, etc., with extremely high precision as it is independent of the mask texture resolution. A mesh-based mask can be set for grass to specify areas where grass should or should not grow.Векторное маскирование позволяет создавать дороги, реки и т.д. с чрезвычайно высокой точностью, поскольку она не зависит от разрешения текстуры маски. Для травы можно установить mesh-маску, чтобы указать области, где должна или не должна расти трава.

Примечание
A mesh for masking should be a simple planar mesh.Меш для маски должна быть простым и плоским.

Mesh used as a maskМеш, используемый в качестве маски

Mesh-based maskingМаскирование на основе меша
Примечание
When using a mesh mask to specify the grass distribution, the number of diffuse texture columns must be equal to 4. Otherwise, the diffuse texture will be applied incorrectly.При использовании Mesh-маски для указания распределения травы количество столбцов диффузная текстура должно быть равно 4. В противном случае диффузная текстура будет нанесена неправильно.

A mesh mask can be inverted by toggling the Inverse flag.Mesh-маску можно инвертировать, переключив флаг Inverse.

Inverse maskingОбратная маскировка

Field MaskField Mask#

Any area of a grass field can be animated by using Field Animation. Field Spacer is used to specify areas of grass that should not be rendered. Such areas of grass are specified by the Field Mask (Parameters window -> Grass section).Любая область травяного поля может быть анимирована с помощью Field Animation. Field Spacer используется для указания областей травы, которые не должны отображаться. Такие участки травы задаются параметром Field Mask (окно Parameters → раздел Grass).

Примечание
The Field Mask set for the grass object must match the Field Mask of a Field node applied to the grass.Значение Field Mask, установленное для объекта grass, должно соответствовать значению Field Mask ноды Field, примененного к grass.

See the example on animating grass with the animation field here.Смотрите пример анимации травы с помощью поля анимации здесь.

Density of Growth and Grass RandomizationПлотность роста и рандомизация травы#

To achieve the sufficient richness of a grass field, Density parameter can be tweaked. Density determines how many grass quads are to be rendered per square unit.Чтобы добиться достаточной насыщенности травяного поля, параметр Density можно настроить. Плотность определяет, сколько квадратов травы должно быть отображено на единицу площади.

  • The higher the value, the more grass quads are rendered and the more closely they are positioned. But it should be kept in mind, that the final result also depends on the Step of division and the number of cells it defines.Чем выше значение, тем больше квадратов травы отображается и тем ближе они расположены. Но следует иметь в виду, что конечный результат также зависит от Step деления и количества ячеек, которые он определяет.

To randomly position grass quads across an area using the image mask, set up the Seed value, which is an integer value used to generate pseudo-random successions of numbers (in other words, a random seed). To get a random seed value, press the Randomize button.Чтобы случайным образом расположить квадраты травы по области с помощью маски изображения, установите значение Seed, которое представляет собой целое значение, используемое для генерации псевдослучайных последовательностей чисел (другими словами, случайное начальное значение). Чтобы получить случайное начальное значение, нажмите кнопку Randomize.

Примечание
The same Seed value always generates the same successions of numbers.Одно и то же значение Seed всегда генерирует одни и те же последовательности чисел.

Setting up the Seed value is necessary when there is more than one grass object in the world. It enables to position grass quads differently so that 2 quads don't have the same coordinates.Установка значения Seed необходима, когда в мире существует более одного объекта grass. Это позволяет расположить травяные квадраты по-разному, чтобы 2 квадрата не имели одинаковых координат.

To achieve the predominance of one type of the grass over the other types, you can use the Probability parameter. This parameter sets the grass rendering probability per diffuse texture column: you can specify a probability factor for each column of the diffuse texture separately.Чтобы добиться преобладания одного типа травы над другими типами, вы можете использовать параметр Probability. Этот параметр задает вероятность рендеринга травы для каждого столбца диффузной текстуры: вы можете указать коэффициент вероятности для каждого столбца диффузной текстуры отдельно.

For example, if you set the probability factor to 5 for the 1st column of the diffuse texture, the grass blades quads stored in slots of this column will appear more often.Например, если вы установите коэффициент вероятности равным 5 для 1-го столбца диффузной текстуры, квадраты травинок, сохраненные в ячейках этого столбца, будут появляться чаще.

Probability = 1
Probability for the 1st column = 5

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

As it was mentioned above, rendering all grass cells at once (and therefore thousands of grass polygons) drastically drops performance.Как уже упоминалось выше, одновременный рендеринг всех ячеек травы (и, следовательно, тысяч полигонов травы) резко снижает производительность.

The grass field can be thinned out with a distance: you can check the Thinning box in order not to render random grass polygons across the grass Fade distance. Поле травы может быть уменьшено с помощью расстояния: вы можете установить флажок Thinning, чтобы не отображать случайные многоугольники травы на расстоянии Fade от травы.

Примечание
When changing the settings described above, you can compare the previous and the current number of grass triangles: simply check the Triangles counter.При изменении настроек, описанных выше, вы можете сравнить предыдущее и текущее количество треугольников травы: просто проверьте счетчик Triangles.

Choosing the optimal Step for cells division is also important when optimizing grass. For normal grass (that is used properly), the optimal step is in range [10, 25]. Выбор оптимального значения Step для деления клеток также важен при оптимизации grass. Для обычной травы (которая используется должным образом) оптимальный шаг находится в диапазоне [10, 25].

Using Grass as Low-Poly LODИспользование травы в качестве низкополигонального ЛОДА#

When using a grass object as a low-poly LOD (for example, to create a distant LOD for a forest), the clutter and the grass cells must match. So, you need to make sure that the following parameters match:При использовании объекта grass в качестве низкополигонального LOD (например, для создания удаленного LOD для леса) ячейки clutter и grass должны совпадать. Итак, вам нужно убедиться, что следующие параметры совпадают:

  • Seed of both objects so that they are positioned the same way.Seed обоих объектов, чтобы они располагались одинаково.
  • Size X and Size Y of both objects.Size X и Size Y обоих объектов.
  • Clutter Step matches the ratio of Step/Subdivision values of the grass. Clutter Step соответствует соотношению значений Step/Subdivision травы.
  • Orientation flag is enabled/disabled for both objects.флаг Orientation включен/отключен для обоих объектов.
  • Intersection flag is enabled/disabled for both objects.флаг Intersection включен/отключен для обоих объектов.
  • Flip X and Flip Y are enabled/disabled for both objects (in case the image mask is used).Flip X и Flip Y включены/отключены для обоих объектов (в случае использования маски изображения).
  • Inverse is enabled/disabled for both objects (in case the mesh mask is used).Inverse включен/отключен для обоих объектов (в случае использования Mesh-маски).
  • Min Value and Max Value of both objects (in case the image mask is used).Min Value и Max Value обоих объектов (в случае, если используется маска изображения).
  • Angle, Threshold, Density, and Probability of both objects.Angle, Threshold, Density и Probability обоих объектов.
Последнее обновление: 01.07.2022
Build: ()