Растительность: советы по созданию
This article describes principles of modeling and configuring plants and ways to achieve the best performance in scenes with dense vegetation in UNIGINE.В этой статье описаны принципы моделирования и настройки растений, а также способы достижения наилучшей производительности в сценах с густой растительностью в UNIGINE.
Polygon PlantsПолигональные растения#
Models of plants based on polygon meshes should be used for close-ups and middle distances for the most realistic representation of real-life greenery. It is crucial to use optimized 3D models of trees in real-time projects.Модели растений на основе полигональных мешей следует использовать для крупных планов и средних расстояний, чтобы максимально реалистично передать внешний вид живой растительности. В проектах, работающих в режиме реального времени, крайне важно использовать оптимизированные 3D-модели деревьев.
This section will introduce you to some vegetation authoring tips in UNIGINE and third-party Digital Content Creation software.В этом разделе вы познакомитесь с основными рекомендациями по созданию растительности в UNIGINE и стороннем программном обеспечении для создания цифрового контента.
ModelingМоделирование#
When preparing a 3D model of a tree with dense foliage, avoid creating topology for all branches and leaves; instead, it is much more efficient performance-wise to simulate fine details with textures. The main rule of models optimized for use in real-time is "the fewer polygons — the better". Following this rule is much more critical for rendering a dense forest filled with multiple types of plants and grasses.При подготовке 3D-модели дерева с густой листвой не стоит прорабатывать топологию всех веток и листьев. Гораздо эффективнее с точки зрения производительности имитировать мелкие детали с помощью текстур. Основное правило моделей, оптимизированных для работы в реальном времени — «чем меньше полигонов, тем лучше». Соблюдение этого принципа особенно важно при рендеринге густого леса, заполненного различными видами растений и трав.
Therefore, it is highly recommended to prepare several levels of detail (LODs) for a plant to be used at different distances from the camera.Поэтому настоятельно рекомендуется подготовить для растения несколько уровней детализации ( LOD), чтобы использовать их на разном расстоянии от камеры.
The overall workflow of modeling a tree is as follows:Общий рабочий процесс моделирования дерева выглядит следующим образом:
-
Model several small branches with leaves and bake the models into texture atlases — the obtained textures are going to be your foliage textures. Here are examples of such textures:Создайте несколько небольших веток с листьями и запеките их в текстурные атласы — полученные текстуры будут использоваться в качестве текстур листвы. Вот примеры таких текстур:
-
Create low-poly meshes that will represent foliage chunks, map UVs for proper texturing. The chunks do not have to be flat, you can experiment with the shape and bend of meshes. It is also important to prepare at least 3 LODs, so make sure to optimize the meshes of LODs to the full extent:Создайте низкополигональные меши, которые будут представлять собой фрагменты листвы, и настройте UV-развертку для корректного наложения текстур. Эти фрагменты не обязательно должны быть плоскими — можно экспериментировать с их формой и изгибом. Важно также подготовить как минимум три уровня детализации (LOD), максимально оптимизируя их геометрию:
Foliage LODsLOD-ы для листвы -
Create the trunk with large branches and levels of detail for it. Prepare and assign necessary textures and materials.Создайте ствол с крупными ветвями и проработайте для него уровни детализации. Подготовьте и назначьте необходимые текстуры и материалы.
Trunk LODsLOD-ы стволаAlso, it is recommended to transfer normals from the trunk to the adjoined vertices of branches to make a more natural look of joints:Также рекомендуется перенести перенести нормали ствола на прилегающие вершины ветвей, чтобы добиться более естественного вида соединений:
Adjusted normals of branches at joints provide a more natural lookСкорректированные нормали ветвей на стыках обеспечивают более естественный вид -
Scatter the LODs of foliage chunks over branches of the corresponding trunk LODs forming the tree crown:Распределите LOD-ы фрагментов листвы по ветвям соответствующих LOD-ов ствола, формируя крону дерева:
The fact that the same number of chunks is used on all LODs may result in a higher polygon count. However, this approach has a number of advantages:Использование одинакового количества фрагментов листвы на всех LOD-уровнях может увеличить количество полигонов. Однако этот подход имеет ряд преимуществ:
- High diversity of branches makes it possible to create more realistic plants.Большое разнообразие ветвей позволяет создавать более реалистичные растения.
- A better, almost seamless transition between LODs. All elements can be adjusted at any time to get rid of any inconsistencies.Более плавный переход между уровнями детализации. Все элементы можно в любой момент откорректировать, чтобы устранить несоответствия.
- A more permissive art pipeline enables the artists to collect trees of different sizes and ages out of the same chunks.Более гибкий художественный пайплайн позволяет художникам собирать деревья разного размера и возраста из одних и тех же фрагментов.
- Accurate work of post effects even on the lowest LODs (SSAO, SSGI, etc.).Корректная работа постэффектов даже на самых низких LOD-ах (SSAO, SSGI и т.д.).
- It is also recommended to create a separate low detail foliage LOD to simplify shadow casting. You can duplicate the lowest LOD and optimize it even more for this purpose and configure shadow casting in UNIGINE.Также рекомендуется создать отдельный LOD листвы с низкой детализацией для упрощения отбрасывания теней. Можно продублировать самый низкий LOD, дополнительно его оптимизировать и настроить параметры теней в UNIGINE.
-
For better blending with terrain, prepare a separate bottom part of the trunk with a new material assigned. You can merge it to the mesh of the highest LOD for convenience:Для более естественного слияния с рельефом подготовьте отдельную нижнюю часть ствола с назначенным на нее новым материалом. Для удобства можно объединить её с самым детализированным мешем:
-
Orient the model so it will be imported in UNIGINE appropriately, reset all transformations.Ориентируйте модель так, чтобы при импорте в UNIGINE она загружалась корректно. Сбросьте все трансформации.
Pay attention to the correct position of the mesh's pivot point (apparently, all the LODs must have the same position). As a rule, the pivot is placed at the bottommost point of the plant for ease of world design. However, you can alter the position of the pivot if this is needed for stem animation.Убедитесь, что pivot (центр привязки) меша расположен правильно (очевидно, что все LOD-ы должны иметь одинаковую позицию). Обычно pivot размещают в нижней точке растения для удобства проектирования сцены, но при необходимости его можно сместить, если это необходимо для анимации ствола.
-
As a result, the model has the following content:В результате модель содержит следующее:
For convenience, it is recommended to add postfixes to the names of levels of detail that will be used later during import.Для удобства рекомендуется добавлять постфиксы к названиям уровней детализации, которые будут использоваться в дальнейшем при импорте.
- Consider further adjustment of vertex normals and vertex colors and UVs for leaves animation.Дополнительно можно настроить нормали вершин, цвета вершин и UV-развертку для анимации листьев.
- Export the model to the recommended FBX format.Экспортируйте модель в рекомендуемый формат FBX.
Configuring the Look of the PlantНастройка внешнего вида растения#
Import the created model to UNIGINE following the FBX Import Guide and add the plant to the scene.Импортируйте созданную модель в UNIGINE, следуя руководству по импорту FBX, и добавьте растение в сцену.
To make all separate objects surfaces of the single Mesh Static, enable Merge Static Meshes in the import settings.Чтобы объединить все отдельные объекты в единый Mesh Static, включите Merge Static Meshes в настройках импорта.
Setting Up LODsНастройка уровней детализации#
Set the visibility distances for LODs by enabling the Combine By Postfixes option and adjusting values in the import settings.Настройте дистанции видимости LOD-уровней, включив опцию Combine By Postfixes и задав соответствующие значения в параметрах импорта.
Shadow LODLOD для отбрасывания теней#
When dynamic shadow casting is used, all polygons are rendered one more time for each light source with shadows enabled. World light sources can have up to 4 shadow cascades, so the number of polygons rendered into shadow maps can be tremendous, leading to a strong performance hit. You can estimate this number by using the Rendering Profiler.При включенной динамической генерации теней все полигоны рендерятся еще раз для каждого источника света, у которого включено отбрасывание теней. Источники света World могут иметь до 4 каскадов теней, так что количество полигонов может быть огромным, что приводит к значительной нагрузке на производительность. Оценить количество полигонов, рендерящихся в карты теней, можно с помощью Rendering Profiler.
That is why it is a best practice to use a low-poly mesh for foliage shadows. Perform the following steps:Поэтому лучшей практикой является использование упрощенной (низкополигональной) модели для отбрасывания теней от листвы. Сделайте следующее:
-
Disable shadow casting for all foliage LODs except the Shadow LOD. You can do it in one of the following ways:Отключите отбрасывание теней для всех LOD-уровней листвы, кроме LOD, который предназначен для отбрасывания теней. Вы можете сделать это одним из следующих способов:
- By disabling the Cast Proj and Omni Shadows and Cast World Shadows flags.Отключив флаги Cast Proj and Omni Shadows и Cast World Shadows.
- By toggling off all bits of the Shadow Mask.Выключив все биты в Shadow Mask.
- Hide the shadow LOD for any camera by toggling off all bits of its Viewport Mask.Отключите отображение LOD-а для теней во всех камерах, выключив все биты ее Viewport Mask.
See the demonstration of configuring a shadow LOD in the Bit Masking video tutorial.См. демонстрацию настройки LOD-а для теней в видеоуроке по битовым маскам.
Materials AdjustmentНастройка материалов#
If the Import Materials flag was enabled in the import options, all necessary materials are already generated and assigned to the surfaces of the tree. Let's consider material parameters that worth being noted:Если в настройках импорта был включен флаг Import Materials, все необходимые материалы уже сгенерированы и назначены поверхностям дерева. Рассмотрим параметры материала, на которые стоит обратить внимание:
- Make the leaves material Alpha-Test to cut out texels according to the Alpha channel of the Albedo texture.Материал листвы должен быть Alpha-Test, чтобы вырезать тексели в соответствии с альфа-каналом текстуры Albedo.
-
If specular highlights are incorrect, it is recommended to set the Specular value to 0.Если блики выглядят некорректно, рекомендуется установить значение Specular на 0.
Incorrect lighting on the Reflections Rendering Debug preview (left) and the result image (right)Некорректное освещение при отладке рендеринга отражений при предварительном просмотре (слева) и итоговом изображении (справа) -
Consider enabling the Two Sided option for the material to make the foliage denser. Be careful, as it may significantly affect performance if there are too many polygons in the scene.Рассмотрите возможность включения для материала опции Two Sided, чтобы сделать листву более плотной. Но учтите, что это может существенно повлиять на производительность, если в сцене слишком много полигонов.
It may be better to switch the Backside Normal mode to the To Front Side option since it usually provides more realistic results for foliage.Режим Backside Normal лучше переключить на To Front Side, так как он обычно дает более реалистичный результат для листвы.
-
If textures make it evident that foliage is made of flat chunks, a great solution to this is the Angle Fade feature that cuts out polygons faced to the camera at extreme angles.Если текстуры делают очевидным, что листва состоит из плоских фрагментов, отличным решением этой проблемы является Angle Fade — этот эффект скрывает полигоны, повернутые к камере под экстремальными углами.
ПримечаниеThis feature may work incorrectly for meshes that have modified normals.Эта функция может работать некорректно для мешей с модифицированными нормалями. -
Adjusting translucency for the foliage material is necessary for a better look. Increase the Translucent value to permit light to pass through the object.Настройка прозрачности материала листвы необходима для создания реалистичного внешнего вида. Увеличьте значение Translucent, чтобы свет мог проходить сквозь объект.
You can also enable the use of the Translucent Map in the States tab to specify a single-channel texture that will define parts of the object that aren't translucent (such as branches).Также на вкладке States можно включить использование Translucent Map, чтобы указать одноканальную текстуру, которая будет определять непрозрачные части объекта (например, ветки).
ПримечаниеThere is no need to paint fibers and small features of leaves on the Translucent texture if the Normal map is used and defines such surface irregularities.Нет необходимости прорисовывать прожилки и мелкие детали листьев в текстуре Translucent, если используется текстура Normal Map, которая задает такие неровности поверхности.Albedo textureТекстура AlbedoTranslucent textureТекстура Translucent -
Enable the Terrain Lerp flag for the material of the bottom part of the tree to blend your tree with a Terrain in your scene.Включите флаг Terrain Lerp для материала нижней части дерева, чтобы создать плавный переход от ствола к ландшафту сцены.
Vertex Normals AdjustmentНастройка нормалей вершин#
The fact that foliage is composed of flat chunks results in inaccurate shading. To counteract this and hide the flatness of the mesh, adjust vertex normals and improve the way the foliage is shaded.Так как листва состоит из плоских фрагментов, это приводит к неточностям в затенении. Чтобы улучшить затенение листвы и скрыть то, что меш плоский, отрегулируйте нормали вершин.
The following solutions are possible:Возможные решения:
-
Enable the Normals Rotated To Camera option so all surface normals will be oriented towards the camera, ignoring the geometry normals. This feature checks out as a quick solution, although it makes all polygons shaded the same way.Включите опцию Normals Rotated To Camera, чтобы все нормали поверхности были ориентированы на камеру, игнорируя нормали геометрии. Это быстрый способ исправления проблемы, но он делает освещение всех полигонов одинаковым.
-
Edit vertex normals manually in your modeling software. Transfer vertex normals from a boundary cage to make the foliage look like a smooth and dense tree crown.Отредактируйте нормали вершин вручную в вашем 3D-редакторе. Перенесите нормали вершин с ограничивающей оболочки, чтобы крона выглядела гладкой и плотной.
ПримечаниеIt is recommended to use a dome-like boundary cage with the sides elongated to the ground to avoid shading errors on lower polygons.Рекомендуется использовать куполообразную ограничивающую оболочку, вытянутую вниз, чтобы избежать ошибок затенения на нижних полигонах.Transferring normals from a boundary cageПеренос нормалей с ограничивающей оболочкиAs a result, the flatness of foliage geometry is less evident (on the right):В результате станет менее заметно то, что геометрия листвы плоская (справа):
MIP MapsMIP-карты#
The MipMapping technique, supported by UNIGINE renderer, implies sampling lower textures for smaller and distant polygons. At that, minor features of foliage start wiping away with the distance. In some cases, branches and leaves look thicker when far from the camera than on a close-up view.Технология MipMapping , поддерживаемая рендером UNIGINE, подразумевает использование менее детализированных текстур для мелких и удалённых полигонов. При этом мелкие черты листвы исчезают на расстоянии. В некоторых случаях ветки и листья вдали от камеры выглядят толще, чем на крупном плане.
This issue can be resolved via these approaches:Эту проблему можно решить с помощью следующих подходов:
- Engage the Mip Bias feature to shift the distance at which the switch between MIP-levels is performed. This option significantly affects the performance.Используйте опцию Mip Bias, чтобы сдвинуть расстояние, на котором выполняется переключение между уровнями MIP. Этот параметр существенно влияет на производительность.
- By default, MIP maps for a texture are generated automatically on import using the Box filtering that may provide too blurred results. Consider switching to the Point filtering type to get sharper MIP maps.По умолчанию MIP-карты для текстуры генерируются автоматически при импорте с использованием Box-фильтрации, которая может слишком размыть текстуру. Попробуйте переключить тип фильтрации на Point, чтобы получить более четкие MIP-карты.
-
You can also prepare custom MIP maps in third-party software. For example, here is a comparison between MIP maps generated using the Box filtering and the sharper Kaiser filtering:Вы также можете подготовить пользовательские MIP-карты в стороннем программном обеспечении. Например, вот сравнение MIP-карт, созданных с использованием фильтрации Box и более четкой фильтрации Kaiser:
To import a texture with custom MIP-levels, use the Combine option for a texture with laid out MIP-levels or save them to a .texture format and import the texture with the Unchanged option enabled.Для импорта текстуры с пользовательскими MIP-уровнями, используйте опцию Combine, если уровни разложены в файле, или сохраните их в формате .texture и импортируйте текстуру с включенной опцией Unchanged.
AnimationАнимация#
Enable the Vegetation state to activate a set of animation-related parameters.Включите состояние Vegetation, чтобы активировать набор параметров, связанных с анимацией.
Vegetation animation consists of Stem and Leaves animation. To enable both of them, set Animation to the Default or Field option.Анимация растительности состоит из анимации ствола и листьев. Чтобы включить обе эти настройки, установите для параметра Animation значение Default или Field.
At that, Field Animation makes the plant be affected by Field Animation volumes enabling you to override animation parameters locally (e.g., simulation of rotor downwash effects in close proximity to a rotorcraft).Настройка Field Animation позволяет воздействовать на растения объемами Field Animation и локально изменять параметры анимации, например, для имитации воздушного потока от вертолёта.
Stem AnimationАнимация ствола#
Stem animation applies vertex movement based on spatial 3D noise to simulate bending of the plant's trunk or stem caused by wind. The mesh's pivot point is considered fixed, and the further the vertex is along the Z axis, the stronger movement is applied to it.Анимация ствола применяет перемещение вершин на основе пространственного 3D-шума, чтобы имитировать то, как ствол дерева гнется от ветра. Pivot меша считается фиксированной точкой, и чем дальше по оси Z от нее находится вершина, тем дальше она отклоняется.
Thus, it is necessary to place the pivot point at the correct position (usually, it is the bottommost point of the stem) and orient the model, so the Z axis goes upwards.Таким образом, необходимо правильно расположить Pivot (обычно это самая нижняя точка ствола) и выставить модель так, чтобы ось Z была направлена вверх.
A set of Parameters controls the animation.Набор параметров, которые управляют анимацией.
Please note that all surfaces of the plant must have identical stem animation parameters in order to synchronize their movement.Обратите внимание, что все поверхности растения должны иметь одинаковые параметры анимации ствола, чтобы их движение было синхронизированным.
Leaves AnimationАнимация листьев#
The Leaves animation is another layer of vertex shader animation mainly applied to foliage, providing additional detail bending. Using this type of animation requires preliminary adjustment to geometry on the modeling stage.Анимация листьев — это еще один уровень анимации вершинного шейдера, в основном применяемый к листве, обеспечивающий дополнительное движение деталей. Использование этого типа анимации требует предварительной корректировки геометрии на этапе моделирования.
Several approaches of leaves animation are available out of the box. Choose the type of animation using the Leaves option.В редакторе доступно несколько способов анимации листьев. Выберите тип анимации, используя опцию Leaves.
Geometry Vertex Color BasedНа основе цвета вершин#
This recommended approach providing the best control over foliage implies that leaves are rendered as polygons, and vertex colors are used for animation.Это рекомендуемый подход, обеспечивающий максимальный контроль над листвой: листья визуализируются как полигоны, а цвета вершин используются для анимации.
Vegetation movements are defined by RGB channels of vertex colors as follows:Движения растительности определяются RGB-каналами цветов вершин следующим образом:
![]() |
Red channel is used for animation of smaller or peripheral parts of vegetation (leaves). Bright parts are animated, and dark parts are stiff.Красный канал используется для анимации более мелких или периферийных частей растительности (листьев). Яркие части анимированы, а темные — неподвижны. |
![]() |
Green channel is used to define the movement order for branches in order to desynchronize them. The movement sequence starts from the brightest element to the darkest.Зеленый канал задает порядок движения ветвей с целью их десинхронизации. Последовательность движений начинается от самого светлого элемента к самому темному. |
![]() |
Blue channel is used to define which parts of branches can be bent. Brighter parts indicate bendable portions, and darker parts — stiff portions.Синий канал определяет, какие части ветвей могут сгибаться. Более светлые части обозначают гнущиеся участки, а более темные участки — жесткие. |
The animation parameters control vertices movement:Параметры анимации управляют движением вершин:
It is also a regular practice to animate branches using this technique even if they are attached to the trunk:Этот подход, как правило, используется для анимации ветвей, даже если они прикреплены к стволу:
At that, related surfaces must have the same vertex colors on adjacent vertices and identical animation parameters in order to synchronize their movement:При этом связанные поверхности должны иметь одинаковые цвета вершин на соседних вершинах и одинаковые параметры анимации, чтобы их движение было синхронизированным:
Geometry UV-basedНа основе UV-развертки#
This is a rather legacy approach when leaves are rendered as standard polygons. It requires the UV Channel 2 to be defined for the mesh.Это довольно устаревший подход, когда листья визуализируются как стандартные полигоны. Этот подход требует, чтобы для меша был определен 2-й канал UV-развертки.
![]() Geometry UV-based animationАнимация геометрии на основе UV-развертки
|
![]() UV Channel 2: the stiffest vertices are in the top left corner2-й канал UV-развертки: самые жесткие вершины находятся в левом верхнем углу
|
Animation uses UV channel 2 of an object as follows: in the UV grid, [0,1] is the pivot point for the object's movements and the stiffest part of the object, and towards [1,0], the object becomes more flexible.Анимация использует 2-й канал UV-развертки объекта следующим образом: в UV-развертке [0,1] — pivot для движений объекта и самая жесткая часть объекта, а ближе к [1,0] объект становится более гибким.
![]() |
![]() |
Control the vertices movement via the same Animation Parameters.Настройка движения вершин осуществляется через те же параметры анимации.
BillboardBillboard#
Billboard is the most performance-friendly way of animating distant vegetation: all quads are rendered as billboards that always face the camera; the UV Channel 2 defines the size and movement of polygons. Hence, the foliage mesh should contain only quad polygons for leaves.Billboard (билборд) — наиболее удобный способ анимации удаленной растительности: все четырехугольники визуализируются как билборды, которые всегда смотрят в камеру; 2-й канал UV-развертки определяет размер и движение полигонов. Следовательно, листья в меше листвы должны быть представлены только четырехугольниками.
![]() A billboards-based bushКуст на основе билбордов
|
![]() The mesh of the bushМеш куста
|
Animation uses UV channel 2 of an object as follows: in the UV grid, [0,1] is the pivot point for the billboard's movements, and the billboard's size can be changed by scaling the polygon in the UV channel.Анимация использует 2-й канал UV-развертки объекта следующим образом: в UV-сетке [0,1] является pivot-ом для движения билборда, а размер билборда можно изменить, масштабируя полигон в UV-канале.
![]() UV Channel 11-й канал UV-развертки
|
![]() UV Channel 22-й канал UV-развертки
|
![]() Mesh (above) and the result (below)Меш (вверху) и результат (внизу)
|
Control the polygons movement via the same Animation Parameters.Настройка движения полигонов осуществляется через те же параметры анимации.
Global Animation OptionsГлобальные параметры анимации#
Stem and leaves animation are also controlled by the global Vegetation Animation Parameters. Via these settings, you can adjust stem and leaves animation intensity, speed, and wind effect globally and control the weather conditions per world.Анимация ствола и листьев также контролируется глобальными параметрами анимации растительности. Через эти настройки можно глобально регулировать интенсивность, скорость и эффект ветра для анимации ствола и листьев, а также контролировать погодные условия в каждом мире отдельно.
Note that the global parameters are just multipliers for the per-material animation parameters.Обратите внимание, что глобальные параметры — это просто множители для параметров анимации для каждого материала.
Scattering PlantsРассадка растений#
To randomly scatter a significant number of identical meshes across the terrain, Mesh Clutter is used. Mesh Clutter scatters objects procedurally and renders only those objects which are in the viewing frustum. The typical workflow is as follows:Для случайной расстановки большого количества одинаковых мешей по местности используется Mesh Clutter. Mesh Clutter процедурно распределяет объекты и отображает только те объекты, которые находятся в области видимости. Типичный алгоритм выглядит следующим образом:
-
Click Create -> Clutter -> Mesh and specify the .mesh asset to be used as the source mesh for the Mesh Clutter. Click within the viewport to place the new node in the world.Нажмите Create -> Clutter -> Mesh и укажите ассет с расширением .mesh, который будет использоваться в качестве исходного меша для Mesh Clutter. Щелкните внутри вьюпорта, чтобы разместить новый ноду в мире.
Примечание.fbx assets are containers for .mesh assets, right-click on the asset and choose Open or double-click on it to access its content.Ассеты .fbx являются контейнерами для ассетов .mesh — щелкните правой кнопкой мыши ассет и выберите Open или дважды щелкните его, чтобы получить доступ к его содержимому. -
If you already have a configured tree in your world, you can copy all materials and parameters from surfaces of the configured tree and paste them sequentially or by surface names to Mesh Clutter.Если у вас в мире уже есть настроенное дерево, можно скопировать все материалы и параметры с поверхностей настроенного дерева и вставить их в Mesh Clutter последовательно или по именам поверхностей.
-
Place the node in the scene and set the Size to cover the whole playable area.Поместите ноду в сцену и установите Size, который покроет всю игровую область.
ПримечаниеThe operation of Mesh Clutter objects is float-based, so it is not recommended to use Sizes bigger than 10000 units lengthwise and widthwise. If you need to fill areas beyond this limit, you will need to manually split the single Mesh Clutter object into a grid of several clutters.Работа объектов Mesh Clutter основана на числах с плавающей запятой, поэтому не рекомендуется использовать размеры, превышающие 10000 по длине и ширине. Если вам нужно заполнить области большего размера, нужно будет вручную разделить один объект Mesh Clutter на сетку из нескольких клаттеров.
Sandworm Tool does the slicing automatically when generating terrain. Инструмент Sandworm автоматически выполняет разбиение при генерации ландшафта.
- Adjust the scattering parameters: set the desired Density in meshes per square unit; diversify the appearance of the forest by randomizing the Scale, Offset, and Rotation parameters.Настройте параметры расстановки: установите нужную плотность в количестве мешей на квадратный юнит; разнообразьте внешний вид леса, рандомизируя параметры масштаба, смещения и поворота.
-
Make the clutter object child to the terrain and enable the Intersection flag to make trees follow the surface.Сделайте объект клаттера дочерним по отношению к ландшафту и включите флаг Intersection, чтобы деревья следовали рельефу поверхности.
ПримечаниеIf the Intersection flag is enabled, toggle it off and on to forcefully re-generate the Clutter object.Если флаг Intersection включен, включите и выключите его, чтобы принудительно повторно сгенерировать объект Clutter. - Adjust the Visibility and Fade distances. Given the number of polygons a dense forest may consist of, it is recommended to make Mesh Clutter visible as close as possible and use Impostor objects at a farther distance.Настройте параметры расстояний видимости и плавного исчезновения. Учитывая количество полигонов, которое можно получить в случае густого леса, рекомендуется сделать Mesh Clutter видимым на как можно более коротких расстояниях и использовать объекты Impostor на дальних расстояниях.
-
By default, trees are scattered across the whole area. You can mask areas with vegetation via the following approaches:По умолчанию деревья распределяются по всей территории. Однако можно ограничить зоны растительности несколькими способами:
-
By using a single-channel texture. You can prepare a texture in third-party software or create a new one and draw the mask from scratch. All Mesh Clutter and Grass objects that use that texture are updated on the fly.С помощью одноканальной текстуры. Можно подготовить текстуру в стороннем ПО или создать новую и нарисовать маску с нуля. Все объекты Mesh Clutter и Grass, использующие эту текстуру, обновляются на лету.
-
By using Landscape Terrain masks. You can use the data of Landscape Terrain masks to define the density of the vegetation, provided your world contains Landscape Terrain with configured masks: select the desired mask in the Mask Terrain parameter:С помощью масок ландшафта. Если в мире используется Landscape Terrain с настроенными масками, то чтобы задать плотность растительности, можно выбрать нужную маску в параметре Mask Terrain:
You can also edit the mask by using the Brush Editor and have the Mesh Clutter updated on the fly.Также можно отредактировать маску с помощью редактора кистей, и Mesh Clutter обновится на лету.
ПримечаниеAll Landscape Terrain data, including masks, is subject to data streaming. If you have unoptimized streaming settings, there might be a bottleneck in mask data loading on world startup and changing the camera position, affecting the performance of Mesh Clutter generation.Все данные Landscape Terrain, включая маски, загружаются потоком. Если настройки потоковой загрузки не оптимизированы, возможны задержки при загрузке маски во время запуска мира или при изменении положения камеры, что влияет на производительность генерации Mesh Clutter. -
As an additional feature, masking by a mesh is also available:Также дополнительно есть возможность маскирования по мешу:
-
Cutout by intersection with objects:Вырез по пересечению с объектами:
- Create Mesh Static or Decal representing a bounding cutout volume. Enable the Clutter Interaction flag for it.Создайте Mesh Static или Decal, который представляет собой объем для вырезки. Включите для него флаг Clutter Interaction.
- Choose and enable a bit of the Intersection mask of the object that will be used for the cutout feature.Выберите и включите бит маски Intersection у того объекта, который будет использоваться для вырезки.
- Enable the same bit of the Cutout Intersection mask of the Clutter object.Включите тот же бит маски Cutout Intersection объекта Clutter.
- Hide the visual representation of the object from the camera by disabling all bits of its Viewport mask and disabling shadow casting for it.Выключите визуализацию объекта в камере, отключив все биты его маски Viewport и отключив отбрасывание теней этим объектом.
Cutting out trees within a boxУдаление растительности внутри прямоугольной области
-
-
Keep the optimal Step value for the best performance.Оптимизируйте параметр Step для лучшей производительности.
The Clutter is rendered as a 2D grid, in each cell of which meshes are randomly scattered depending on the density and probability of appearing. Generation of meshes in the cells is time-sliced starting from the nearest cells to reduce the load on the CPU.Clutter рендерится в виде 2D-сетки, в каждой ячейке которой случайным образом разбросаны меши в зависимости от плотности и вероятности появления. Генерация мешей в ячейках осуществляется поэтапно, начиная с ближайших ячеек, чтобы снизить нагрузку на ЦП.
Cell divisionДеление на ячейкиThe Step value defines the cell size in units. Thus, this value specifies the resulting number of cells along each axis (the size divided by the step). It is highly recommended to choose the values that are divided with no remainder.Значение Step задает размер ячейки в юнитах. Таким образом, это значение определяет общее количество ячеек по каждой оси (общий размер делится на шаг). Настоятельно рекомендуется выбирать значения, делящиеся без остатка .
ПримечаниеEach cell requires 1 DIP call, so the higher the number of cells (i.e., the smaller the step), the more reduced the performance is. However, creating a large cell takes a 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 slight rendering lag.Для каждой ячейки требуется 1 DIP-вызов, поэтому чем больше количество ячеек (т. е. чем меньше шаг), тем больше снижается производительность. Однако создание большой ячейки занимает больше времени. Когда камера движется достаточно быстро, маленькие ячейки создаются одна за другой очень быстро и плавно, а большие могут появляться внезапно и вызывать небольшую задержку рендеринга.
You can scatter bushes and chunks of polygon grass across the terrain the same way.Таким же образом можно расставлять по ландшафту кусты и участки полигональной травы.
Finally, by combining several clutters for different types of trees, bushes, and grass, you get a diverse look of vegetation.В итоге, комбинируя несколько объектов Mesh Clutter для разных типов деревьев, кустов и травы, можно создать разнообразную растительность.
Manual PlacementРасстановка вручную#
As a finishing touch, you can place trees as Static Mesh where needed. It is efficient performance-wise to collect a significant number of identical meshes into a Mesh Cluster object in order to treat and render a bunch of meshes as one object.В качестве завершающего штриха можно расставить деревья как Static Mesh в нужных местах. Для повышения производительности рекомендуется объединять большое количество одинаковых мешей в объект Mesh Cluster, чтобы рендерить их как единое целое.
You can bake identical meshes of their hierarchy or collect all similar meshes in the world. Refer to the dedicated article for more details on the ways of collecting a cluster.Можно запекать идентичные меши внутри их иерархии или собрать все похожие меши в мире. Подробнее о методах объединения в кластеры можно узнать в соответствующей статье.
The other convenient approach to quickly scatter clusters of grass, bushes and trees across the scene is using the mesh placement brush tool:Другой удобный способ быстрой расстановки участков травы, кустов и деревьев по сцене — это использование кисти для размещения мешей:
-
Switch to the Cluster Editor mode:Переключитесь в режим Cluster Editor:
- Select one or several Mesh Cluster objects in the scene or create a new one by using the Create button in the Active Tool window.Выберите один или несколько объектов Mesh Cluster в сцене или создайте новый с помощью кнопки Create в окне Active Tool.
-
Paint areas with brush, scattering meshes across the scene:Закрасьте пространство кистью, расставляя меши в сцене:
- If needed, edit the cluster manually to reposition or remove some meshes.При необходимости можно отредактировать кластер вручную, чтобы переместить или удалить меши.
BillboardsBillboard#
Billboard is a flat rectangular object that always faces the camera. Using billboards instead of fully functional objects that are barely seen from far off significantly simplifies and speeds up rendering.Billboard — это плоский прямоугольный объект, который всегда поворачивается лицом к камере. Использование билбордов вместо полноценных объектов, которые едва видны издалека, значительно упрощает и ускоряет рендеринг.
ImpostorsИмпосторы#
In terms of UNIGINE, Impostor is a billboard-like object capable of mimicking the appearance of polygon meshes by displaying different areas of textures depending on the angle of view. Impostor objects serve to speed up geometry rendering by reducing the number of polygons while saving visual fidelity.В UNIGINE Impostor — это объект, аналогичный билборду, который имитирует внешний вид полигональных мешей, отображая разные участки текстуры в зависимости от угла обзора. Импосторы ускоряют рендеринг геометрии, за счет уменьшения количества полигонов при сохранении визуального качества.
The built-in Impostor Creator tool makes it easy to generate Impostors for single meshes and Mesh Clutters.Встроенный инструмент Impostor Creator упрощает создание импосторов для одиночных мешей и объектов Mesh Clutter.
For a forest based on Mesh Clutter, the Grass object with the grass_impostor_base material will be used as a low-poly LOD. At that, the Clutter and grass parameters must match to make sure the position and orientation of all LODs are the same.В случае леса на основе Mesh Clutter объект Grass с материалом grass_impostor_base будет использоваться как низкополигональный LOD. При этом параметры объектов Clutter и Grass должны совпадать, чтобы положение и ориентация всех LOD-уровней были одинаковыми.
![]() Mesh Clutter and ImpostorsMesh Clutter и импосторы
|
![]() Meshes' and Impostors' WireframesКонтуры поверхностей мешей и импосторов
|
Grass objects are also rendered as a 2D grid to optimize performance. The Step parameter defines the cell size. Usually, impostors are visible much further than meshes, and the Step value is to be chosen respectively. You can use the Subdivision parameter that subdivides large grass cells so that they match smaller cells of a Mesh Clutter to make positions of randomly scattered objects coincide with positions of grass-based impostors. Therefore, the Clutter Step must match the ratio of Step/Subdivision values of the grass.Объекты Grass также рендерятся в виде 2D-сетки для оптимизации производительности. Параметр Step определяет размер ячейки. видны с гораздо больших расстояний, чем меши, поэтому значение Step следует подбирать соответствующим образом. Можно использовать параметр Subdivision, который делит крупные ячейки травы на более мелкие, чтобы они совпадали с ячейками Mesh Clutter, и таким образом позиции случайно расставленных объектов будут совпадать с позициями импосторов. Следовательно, значение параметра Step объекта Clutter должно соответствовать соотношению значений Step/Subdivision травы.
GrassТрава#
The Grass object with the grass_base material can fill empty spots on the terrain and increase the overall density of lower vegetation in the scene. The grass_base material is intended to represent the basic features of grass. It has a lower visual fidelity compared to the mesh_base material, so Grass should be thought of as an additional filling layer of grass.Объект Grass с материалом grass_base может заполнять пустые участки ландшафта и увеличивать плотность низкорослой растительности в сцене. Материал grass_base обладает более низкой детализацией по сравнению с материалом mesh_base, поэтому объект Grass рекомендуется использовать как дополнительный заполняющий слой.
First, you need to prepare a Diffuse texture with chunks representing small grass tufts:Во-первых, вам нужно подготовить текстуру Diffuse с сегментами, представляющими небольшие пучки травы:
Chunks are to be placed in the texture as follows:Сегменты размещаются в текстуре следующим образом:
- Columns represent different grass species, each of which will be distributed according to the corresponding channel of the Mask texture. Therefore, the number of columns must match the number of channels of the Mask texture; otherwise, grass tufts will be sliced incorrectly.Столбцы представляют разные виды травы, каждый из которых будет распределен согласно соответствующему каналу текстуры Mask. Поэтому количество столбцов должно совпадать с количеством каналов текстуры Mask, иначе сегменты травы будут нарезаны некорректно.
- Rows represent variations of grass of the particular species (thinner, thicker, tangled, etc.). There can be from 1 to 4 rows, and this number must coincide with the Num Textures value.Ряды представляют вариации определенного вида травы (более тонкая, густая, запутанная и т. д.). Количество рядов может варьироваться от 1 до 4, и должно совпадать со значением Num Textures.
For the grass texture with 4 columns, a mask with 4 channels should be used:Для текстуры травы с 4 столбцами следует использовать маску с 4 каналами:
Refer to the Texture Slots section for more details.Подробнее о слотах текстур можно узнать в соответствующем разделе.
Visually attractive grass, however, may reduce performance if rendered as a whole. All computations are time-sliced and performed per cell of a 2D grid to allow rendering at interactive frame rates. So choosing the optimal Step for cells is crucial for better performance.Высококачественная трава может снижать производительность при рендеринге в больших количествах. Все вычисления распределены по времени и выполняются по ячейкам 2D-сетки, что позволяет выполнять рендеринг, поддерживая интерактивную частоту кадров. Поэтому выбор оптимального значения Step для ячеек критичен для оптимизации.
For more details on creating and configuring grass, refer to the in-depth tutorial: Adding Grass.Дополнительные сведения о создании и настройке травы см. в подробном руководстве: Добавление травы.
Grass: General RecommendationsТрава: общие рекомендации#
When adding grass in the scene, try to follow these general recommendations to avoid the performance drop:При добавлении травы в сцену рекомендуется следовать нескольким правилам для предотвращения падения производительности:
- Use LODs and simplify the farthest LOD to the maximum extent. The fade distances between LODs shouldn't be very big, because these transitions imply that two objects are displayed simultaneously instead of one, which definitely affects performance.Используйте LOD-ы и максимально упрощайте самые дальние LOD-уровни. Расстояние между LOD-уровнями не должно быть слишком большим, так как во время перехода два объекта отображаются одновременно, что влияет на производительность.
- Disable shadows cast by the grass object surface and use screen-space shadows.Отключите отбрасывание теней от поверхности травы и используйте тени в экранном пространстве (screen-space shadows).
- The grass mesh normals should be directed upwards to ensure correct shading.Нормали мешей травы должны быть направлены вверх для корректного освещения.
- Make the albedo/roughness of the ground, which is visible in the background, similar to the grass albedo/roughness so that the transition between these two objects in the distance is smooth and natural.Сделайте Albedo/Roughness текстур земли, видимой в фоне, похожими на Albedo/Roughness травы. Это обеспечит естественный переход между объектами на дальних расстояниях.
See AlsoДополнительная информация#
- Generating vegetation based on landcover data using SandwormГенерация растительности на основе данных о растительном покрове с использованием Sandworm
- Grass OptimizationОптимизация травы
- Vegetation content sampleСэмпл Vegetation
- Vegetation add-onДополнение Vegetation
- Fox Hole demoДемо-проект Fox Hole
Информация, представленная на данной странице, актуальна для версии UNIGINE 2.19.1 SDK.