This page has been translated automatically.
Видеоуроки
Интерфейс
Основы
Продвинутый уровень
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Профессиональный уровень (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Режимы вывода изображения
Физика
Браузер SDK 2
Лицензирование и типы лицензий
Дополнения (Add-Ons)
Демонстрационные проекты
API Samples
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Контроль версий
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
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
Учебные материалы
Внимание! Эта версия документация УСТАРЕЛА, поскольку относится к более ранней версии SDK! Пожалуйста, переключитесь на самую актуальную документацию для последней версии SDK.
Внимание! Эта версия документации описывает устаревшую версию SDK, которая больше не поддерживается! Пожалуйста, обновитесь до последней версии SDK.

Fracture Body

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

Slice Pieces

Тела Fracture разбиты на куски
Примечание
Тело Fracture можно назначать только объектам Mesh Dynamic и использовать только для выпуклых мешей.

Дополнительная информация#

Физическая аппроксимация#

Тело Fracture (а также все части, на которые он распадается) на самом деле является телом Rigid, которое движется в соответствии с динамикой твердого тела. Следовательно, оно обладает следующими свойствами:

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

Ошибка аппроксимации формы#

Тело Fracture всегда аппроксимируется выпуклым многогранником, который может содержать слишком много деталей для коллизионной геометрии. Как правило, в этом нет необходимости, потому что использование высокодетализированной формы не обеспечивает заметной визуальной разницы, но существенно влияет на производительность. Настройка Approximation Error (ошибка аппроксимации) позволяет контролировать количество вершин в результирующей коллизионной форме:

  • При значении 0 форма точно дублирует меш, охватывая весь его объем.
  • Чем выше значение, тем меньше вершин в созданной форме, но пропускается больше деталей, и форма может не охватить весь объем меша. Максимальное значение — 1.
Примечание
Автоматически сгенерированная форма тела Fracture не отображается в списке Shapes на вкладке Physics окна Parameters. Вы не можете удалить ее или назначить любую другую форму для тела Fracture.

Разрушение#

Существует три модели разрушения:

Эти модели определяют пути разрушения, которые имеют отношение к различным механическим свойствам материалов (например, их вязкости и пористости). Шаблоны разрушений доступны для выбора на уровне скрипта.

Разрез#

Разрез — это способ разрушения, разделяющий объем меша на две части плоскостью. Плоскость проходит через заданную точку тела. Угол разреза определяется заданной нормалью.

Slice Pieces

Разрез тела на две части

Чтобы разрезать тело Fracture, используйте метод createSlicePieces().

Растрескивание#

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

Crack Pieces

Растрескивание с разным количеством радиальных трещин и концентрических колец

Чтобы создать трещины на теле Fracture, используйте метод createCrackPieces().

Разрушение на осколки#

Разрушение на осколки — это способ разрушения, при котором объем меша случайным образом распадается на заданное количество выпуклых частей.

Shatter Pieces

Создание разного количества осколков

Чтобы разбить тело Fracture, используйте метод createShatterPieces().

Пороговое значение объема#

После разрушения тела, особенно несколько раз, маленькие кусочки могут начать снижать производительность. Значение Volume Threshold (пороговое значение объема) определяет минимальный объем фрагментов и, таким образом, контролирует интенсивность раскалывания. Все фрагменты, которые меньше указанного значения, не будут генерироваться.

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

Сломанное тело#

После того, как тело было сломано, для него включается флаг Broken. Снятие этого флага возвращает сломанный меш в неразрушенное состояние. Сломанное тело остается представленным в виде одной ноды в Иерархии UnigineEditor. Сгенерированные части с трещинами автоматически представляются как тела Fracture и наследуют физические параметры тела Fracture (например, демпфирование линейной и угловой скоростей, трение, восстановление и маски).

Примечание
Расколотыми частями нельзя манипулировать с помощью UnigineEditor!

Материал поверхности разрушения#

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

Свойство поверхности разрушения#

Также можно назначить новое свойство для всех поверхностей расколотого тела. Они определяют игровое поведение и дополнительные физические свойства, однако параметры тела переопределяют их.

Физические пересечения#

Физические пересечения можно использовать как быстрый способ проверить, попал ли в разрушаемый объект снаряд. Вы можете использовать Physics Intersection Mask, чтобы включить выборочное обнаружение пересечения для тела (например, чтобы сделать его уязвимым для определенных снарядов). Физические пересечения обнаруживаются только для сопоставления битовых масок.

Советы по оптимизации производительности#

Хотя тело Fracture является относительно недорогим типом, в случае большого количества кусочков, на которые раскололся объект, влияние на производительность может стать значительным. Чтобы избежать падения производительности, воспользуйтесь следующими советами:

  • Используйте параметр Volume Threshold для уменьшения количества фрагментов.
  • Уберите осколки со сцены.

Пример на основе кода, иллюстрирующий, как удалить (заставить исчезнуть со временем) осколки со сцены, можно найти в разделе Physics примеров UnigineScript.

Назначение тела Fracture#

Чтобы присвоить объекту тело Fracture через UnigineEditor, выполните следующие действия:

  1. Откройте окно World Hierarchy.
  2. Выберите объект Mesh Dynamic, которому нужно присвоить тело Fracture.
  3. Перейдите на вкладку Physics в окне Parameters и назначьте физическое тело выбранному объекту, выбрав Body -> Fracture.

    Adding a body

  4. Задайте название тела и при необходимости настройте другие параметры.
Последнее обновление: 09.10.2024
Build: ()