Video Tutorials
Interface
Essentials
Advanced
Полезные советы
UnigineEditor
Interface Overview
Assets Workflow
Settings and Preferences
Working With Projects
Adjusting Node Parameters
Setting Up Materials
Setting Up Properties
Landscape Tool
Using Editor Tools for Specific Tasks
Extending Editor Functionality
Программирование
Fundamentals
Setting Up Development Environment
Usage Examples
UnigineScript
C++
C#
UUSL (Unified UNIGINE Shader Language)
File Formats
Rebuilding the Engine Tools
GUI
Double Precision Coordinates
API
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

Битовые маски

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

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

Чтобы задать значение маски, нажмите на кнопку этой маски (Viewport Mask, Shadow Mask, Intersection Mask и т. д.) и включите соответствующие биты 32-битной маски. Включение бита подразумевает, что ему присваивается значение 1 (при выключении значение равно 0). Полученное значение маски отображается в шестнадцатеричном виде в верхней части контекстного меню маски. Название включенного бита или битов дублируется на кнопке маски.

Чтобы свернуть контекстное меню, еще раз нажмите кнопку маски.

Примечание
В Material Mask (маске материалов) — 24 бита. Во всех остальных — 32 бита.
Surface viewport mask
Маска со включенным первым битом
  • Set All включает все биты маски.
  • Clear All выключает все биты маски.

Названия битов в масках можно редактировать. Введенное в поле название присваивается выбранному биту во всех масках этого типа. Например, если присвоить название первому биту маски Viewport Mask поверхности, то это же название будет отображаться для первого бита маски Viewport Mask камеры. Названия битов в масках присваиваются локально и хранятся в файле <Название проекта>/data/default.bitmasks, который создается, когда вы в первый раз открываете свой проект в UnigineEditor.

Сравнение масок#

Маски сравниваются путем сравнения каждого из битов при помощи бинарного оператора И. Таким образом, первый бит одной маски сравнивается с первым битом другой маски, второй со вторым и так далее.

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

Например, в показанных ниже масках отображения в окно просмотра (Viewport Mask) четыре совпадающих бита, поэтому маски совпали:

Viewport Mask камеры со включенными первыми шестью битами
Viewport Mask объекта со включенными вторым, третьим, четвертым и пятым битами

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

Концепция механизма битовых масок проиллюстрирована в нашем видеоуроке по битовым маскам.

Отображение в окно просмотра#

Объекты (наряду с декалями и источниками освещения) можно выборочно отображать в окне просмотра. Для этого необходимо, чтобы Viewport Mask камеры (открывается через окно Camera Settings на панели камеры), совпадала со следующими масками:

  • Viewport Mask поверхности объекта (окно Parameters -> вкладка Node -> секция Surfaces -> поле Rendering);
  • Viewport Mask материала объекта, чтобы отображался материал, назначенный на этот объект (окно Parameters -> вкладка Node -> секция Surface Material -> вкладка Common -> поле Options).
Примечание
По умолчанию все маски совпадают друг с другом.

Пример использования#

Предположим, что у нас есть два объекта с одинаковым материалом. Чтобы один из них отображался в окне просмотра, а другой — нет, нужно изменить Viewport Mask того объекта, который мы хотим скрыть.

В масках Viewport Mask поверхностей обоих объектов включен один и тот же бит Viewport Mask 0 (00000001)
Для поверхности первого объекта отключены все биты Viewport Mask (установлено значение маски 00000000)

В видеоуроке по битовым маскам показан еще один пример работы с маской отображения в окно просмотра.

Маска отражений#

Маска отражений (Reflection Mask) управляет отрисовкой запеченных и плоских динамических отражений в окне просмотра камеры отражений.

Маску отражений можно задать для следующих видов отражений:

  • Запеченное отражение (environment probe) (окно Parameters -> вкладка Node -> секция Baking Settings -> кнопка Reflection Viewport Mask). Эта маска работает, только если для запеченных отражений включены динамические отражения (dynamic reflections).
  • Плоское отражение (planar reflection) (окно Parameters -> вкладка Node -> секция Surface Material -> вкладка Parameters ->секция Planar Reflection -> кнопка Viewport Mask).

Чтобы динамическое отражение было отрисовано, в маске отражающего материала, которая определяет, будет ли отражение показано в окне отрисовки (окно Parameters -> вкладка Node -> секция Surface Material -> вкладка Parameters -> секция Planar Reflection -> кнопка Viewport Mask), должен быть хотя бы один совпадающий бит с каждой из следующих масок:

  • маска камеры Reflection Viewport (окно Camera Settings -> поле Masks);
  • Viewport Mask объекта (окно Parameters -> вкладка Node -> секция Surfaces -> поле Rendering);
  • Viewport Mask материала объекта (окно Parameters -> вкладка Node -> секция Surface Material -> вкладка Common -> поле Options).

В нашем видеоуроке по битовым маскам также показаны примеры использования масок с запеченными отражениями и динамическими отражениями.

Пример использования#

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

  • Чтобы отрисовать объект без отражения, Viewport Mask этого объекта или его материала не должна иметь совпадающих битов с Viewport Mask плоского отражения или маской Reflection Viewport камеры.
  • Чтобы отрисовать отражение без объекта, Viewport Mask объекта или его материала не должна иметь совпадающих битов с Viewport Mask камеры.

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

Объект без отражения
Отражение без объекта
МаскаЗнач-е
Маска камеры Viewport0111
Маска камеры Reflection Viewport1100
Viewport Mask первого объекта0001
Viewport Mask второго объекта0110
Viewport Mask плоского отражения
для материала отражающей поверхности
1110
МаскаЗнач-е
Маска камеры Viewport0111
Маска камеры Reflection Viewport1100
Viewport Mask первого объекта1000
Viewport Mask второго объекта0110
Viewport Mask плоского отражения
для материала отражающей поверхности
1110

В первом случае Viewport Mask объекта не совпадает с маской Reflection Viewport камеры, но совпадает с Viewport маской камеры, поэтому сам объект все-таки отрисован.

Во втором случае Viewport Mask объекта не совпадает с маской Viewport камеры, но совпадает с маской Reflection Viewport камеры и the Viewport Mask плоского отражения, поэтому отражение отрисовывается.

Маска теней#

Маска теней (Shadow Mask) управляет отрисовкой теней, которые отбрасывает объект, освещенный источником света.

Чтобы тень была отрисована, Shadow Mask источника освещения, который освещает объект, должна совпадать (иметь хотя бы один совпадающий бит) со следующими масками:

  • Shadow Mask поверхности объекта (окно Parameters -> вкладка Node -> секция Surfaces -> поле Rendering);
  • Shadow Mask материала объекта (окно Parameters -> вкладка Node -> секция Surface Material -> вкладка Common -> поле Options).

Пример использования#

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

Shadow Mask поверхности и ее материала
Shadow Mask поверхности и ее материала
Shadow Mask источника освещения
Shadow Mask источника освещения

В нашем видеоуроке по битовым маскам разобран еще один пример.

Маска материалов#

Примечание
Decal Mask была переименована в Material Mask.

Маска материалов (Material Mask) содержит 24 бита и используется для того, чтобы выбрать те объекты, на которые будет проецироваться декаль. Декаль может отложиться на объекте или одной из его поверхностей, только если их маски Material Mask совпадут.

Material Mask для материала можно указать в окне Parameters редактора материалов:

Поле Material Mask

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

Маска пересечений#

Маска пересечений (Intersection Mask) определяет сущности (объекты, ноды, формы, коллизионные объекты и препятствия), для которых будет или не будет выполняться поиск пересечений. Поиск пересечений выполняется, только если Intersection Mask объекта совпадает с Intersection Mask, переданной в качестве аргумента функции. В противном случае объект при проверке пересечений будет игнорироваться.

Маску для объекта можно задать в UnigineEditor или через API.

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

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

Маска коллизий#

Маска коллизий (Collision Mask) сортирует формы и тела, которые должны участвовать в определенном физическом взаимодействии: объекты будут сталкиваться, только если совпадают их маски коллизий. Если маски не совпадают, формы и тела будут просто проходить сквозь друг друга.

Например, у нас есть четыре тела, которые должны сталкиваться следующим образом:

Тело A Тело B Тело C Тело D
Тело A
Тело B
Тело C
Тело D

Для этого у каждой пары сталкивающихся тел должна быть 1 в одном и том же бите:

Тело Маска
Тело A 0001
Тело B 0010
Тело C 0110
Тело D 1111

Пример работы маски коллизий есть в нашем видеоуроке по битовым маскам.

Маска исключений#

Маска исключений (Exclusion Mask) работает противоположно маске коллизий. Она используется для предотвращения коллизий определенной формы с другими формами. Чтобы формы с совпадающими масками коллизий не сталкивались, достаточно одного совпадающего бита в их масках исключений. Значение 0 в Exclusion Mask означает, что все формы с совпадающими Collision Mask будут сталкиваться. Эта маска не зависит от значений в Collision Mask.

Примечание
Может использоваться только для коллизий между формами.

В нашем видеоуроке по битовым маскам показано, как работает маска исключений.

Маска физических явлений#

Маска физических явлений (Physical Mask) определяет, какие объекты будут взаимодействовать с нодами физических явлений: сила (Physical Force), ветер (Physical Wind) и вода (Physical Water). Маска выставляется по такому же принципу, что и маска коллизий. Например, тело, помещенное в Physical Water, при несовпадении масок плавать не будет.

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

Маски источников звука#

Маски можно задавать как в UnigineEditor, так и через API.

Увидеть и услышать работу масок источников звука можно в нашем видеоуроке по битовым маскам.

Маска источников звука#

Маска источников звука (Source Mask) определяет, в каких звуковых каналах распространяется определенный звук. Чтобы источник звука было слышно, его маска должна совпадать с Sound Mask персонажа хотя бы в одном бите.

Маска ревербераций#

Маска ревербераций (Reverberation Mask) определяет, какие зоны реверберации будет слышно. Чтобы звук реверберировал, как минимум один бит этой маски должен быть общим у Reverb Mask ноды Reverberation Zone и Reverb Mask персонажа. Помимо этого, Reverb Mask персонажа должна совпадать с Reverb Mask ноды Sound Source (но совпадающий бит у этой пары может быть не таким, как у первой пары).

Маска звуковых преград#

Маска звуковых преград (Occlusion Mask) определяет, для каких источников звука выбранная поверхность будет преградой. Чтобы поверхность не пропускала звук, у такой поверхности и у источника звука маски Occlusion Mask должны совпадать (хотя бы по одному биту).

Примечание
Для того чтобы эффект работал, необходимо включить Source Occlusion в окне Sound Settings.

Маска перемещений#

Маска перемещений (Navigation Mask) используется для определения, по каким зонам перемещения проходит траектория, а по каким — нет. Navigation Mask зоны перемещения должна совпадать с Navigation Mask траектории, которая рассчитывается внутри зоны перемещения; при несовпадении масок эта зона перемещения исключается из построения траектории.

Navigation Mask для зон перемещения можно задать через:

Примечание
Navigation Mask для траектории можно задать только через API.

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

В нашем видеоуроке по битовым маскам есть пример использования маски перемещений.

Маска препятствий#

Маска препятствий (Obstacle Mask) используется для указания препятствий внутри зон перемещения, которые должны учитываться при построении траектории. Obstacle Mask препятствия должна совпадать с Obstacle Mask просчитываемой траектории; в ином случае препятствие при построении траектории учтено не будет.

Как и маску перемещений, маску препятствий можно задать через:

Примечание
Для траектории маску препятствий можно задать только через API.

В нашем видеоуроке по битовым маскам есть пример использования маски препятствий.

Маска полей#

Маска полей (Field Mask) определяет какая область травы, воды или облаков будет вырезана при помощи поля. Field Mask ноды типа Field должна совпадать с Field Mask травы, воды или слоя облаков.

Field Mask можно задать через UnigineEditor или API.

Пример использования Field Mask есть в нашем видеоуроке по битовым маскам.

Последнее обновление: 25.06.2019