big

Этот раздел посвящен работе со сценами, содержащими множество повторяющихся объектов — рассмотренные приемы будут полезны при создании природных и городских ландшафтов.

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

В конце занятия студенты самостоятельно создадут сцену с использованием повторяющихся объектов.

Референсы

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

Опираясь на референсы ниже, создадим сцену с лугом и полевыми цветами.

big
Original size 2855x1607
big
Original size 3146x1770

Maxim Amelko. Exploration 5

Scatter

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

По умолчанию Scatter создает равномерное распределение — чтобы добиться более естественного паттерна, уменьшим значение Relax Iterations.

Original size 1800x1080

Во избежание пересечений копируемых объектов, Scatter позволяет автоматически вычислять радиус точек при изменении других параметров. Радиус определяется через стандартный атрибут @pscale, который можно сохранить, включив параметр Output Radius Attributes во вкладке Output Attributes. Радиус можно дополнительно настроить с помощью Scale Radii By, который работает как множитель @pscale.

Original size 1620x972

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

Паттерны распределения

Проанализировав природные референсы, можно заметить определенные паттерны распределения растений — например, мох скорее будет расти в местах с высокой влажностью или с определенной стороны кроны — попробуем воспроизвести эту деталь в своей сцене.

Такое неравномерное распределение можно задать с помощью атрибутов. Нода Scatter позволяет использовать атрибут в качестве множителя для Density Scale — параметра, который определяет сколько точек будет создано на единицу площади. Чтобы это работало, float атрибут должен находиться на входной геометрии (на точках, примитивах, вершинах или уровне detail) и иметь диапазон значений от 0 до 1, где 0 означает полное отсутствие точек, а 1 — максимальную плотность.

Original size 1600x1080

В демонстрационной сцене, для имитации описанных свойств мха, используется нода Mask by Feature, которая задает атрибут f@density со значениями близкими к 1 с «северной» стороны.

Вариативность

Важной частью референсов является разнообразие видов полевых растений — эффект разнотравья, который важно сохранить.

Для управления вариативностью копируемых объектов используется Piece Attribute — целочисленный атрибут, который определяет, какой именно объект будет размещен в каждой точке. Настроить распределение можно следующим образом: 


  1. Создать на точках целочисленный атрибут i@name.
  2. Копируемым объектам (например, разным видам цветов) также присвоить атрибут i@name
  3. Нода Copy to Points автоматически сопоставит значения i@name на точках и объектах, распределяя их в соответствии с заданными значениями.
  4. 
 

Original size 1600x1080

Свойства объектов

Хотя распределение объектов выглядит довольно реалистично, все они имеют одинаковый размер, наклон и ориентацию в пространстве, чего нельзя встретить в природе.

Вариации размера растений можно настроить, изменяя f@pscale с помощью шумовых паттернов: атрибуты на основе различных типов шума удобно создавать с помощью Attribute Adjust (Float, Vector, Integer) и Attribute Noise. В данном случае основной тренд в вариации размеров растений задает шумовой паттерн: более высокая трава находиться в центре кочек, а по краям — более низкая.

Original size 1600x1080

Для добавления более мелких вариаций на основе рандома в указанном диапазоне, в сцене также используется выражение в Point Wrangle:

f@pscale *= fit01(rand(@ptnum), ch(«min»), ch(«max»));

Parameter Expressions & For-Each Loops

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

Чтобы избежать этого, можно вносить индивидуальные изменения в каждую копию, используя parameter experssions в связке с циклами For-Each. Этот метод позволяет динамически модифицировать параметры объектов на основе атрибутов на точках, создавая еще больший простор для вариативности.

Original size 1972x1057

В нашей сцене этот подход используется для управления наклоном травинок так, что в каждой копии градус наклона индивидуален и определяется атрибутом на точке (@myAttribute).

Copy To Points помещается внутрь цикла For-Each Point, а значение атрибута вызывается каждую итерацию цикла с помощью Parameter Expression:

point(»./foreach_In», 0,«myAttribute», 0)

Original size 1600x1080

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

Оптимизация

Чтобы не перегружать сцену, важно оптимально организовать процесс копирования объектов.

Копирование может быть реализовано несколькими способами:

  • Простое копирование — каждая копия является новой уникальной геометрией, которая занимает место в памяти.
  • Использование Packed Primitives — копируемые на точки объекты являются ссылками на исходный объект
  • Instancing — позволяет передавать копии объектов напрямую в рендер, что даёт максимальную оптимизацию. Этот способ стоит использовать, если не требуются уникальных изменений объектов, кроме трансформации.

Если количество дублируемых объектов велико, запаковка и инстанцирование помогут ускорить работу во viewport и уменьшить потребление памяти.

Original size 3508x2480

Для оптимизации сцен с использованием копирования также используется метод Level Of Detail (LOD).

LOD для 3D-моделей означает уменьшение сложности сетки по мере удаления от камеры (или других метрик). Как правило, детализированная сетка нужна на первом плане, а на среднем и дальнем планах мелкими деталями можно пренебречь. Иерархия LOD определяет, какая версия модели видна в зависимости от этого расстояния.

Original size 1600x1080

В нашей сцене LOD также используется для оптимизации — в соответствии с расстоянием до камеры, все точки делятся на зоны, каждой из которых соответствует свой LOD. В соответствии с принадлежностью к определенной зоне, на каждую точку копируется модель с соответствующим уровнем детализации.

Original size 1600x1080

Так как кусты черники в этой сцене являются инстансами, в зависимости от положения камеры происходит обновление атрибута s@instancepath, с помощью которого нода instance определяет путь до модели.

0

С помощью функции sprintf () и значений атрибутов i@Var (вариант модели) и i@Lod (уровень детализации) на каждой точке создается атрибут s@instancepath, содержащий индивидуальный относительный путь до модели.

s@instancepath = sprintf(«$HIP/props/berrieBushes/Var%d/Var%d_LOD%d.fbx», i@Var, i@Var, i@Lod);

В итоге получается легко редактируемая и оптимизированная сцена, готовая к рендеру.

Original size 1920x1380

Задание

Описание Создайте сцену, применяя изученные приемы распределения объектов. Настройте вариативность типов объектов, их свойств и трансформаций, а также оптимизируйте сцену.

Результат Набор референсов, .hip файл проекта

Полезные ссылки

Системы распределения и оптимизация
8
We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more