Битовые маски
Механизм битовых масок делает возможным доступ к отдельным битам из всего набора данных. Данный механизм может применяться в следующих системах:
- рендеринг в окно просмотра,
- отображение теней,
- отрисовка отражений,
- коллизии,
- пересечения,
- декали,
- поля,
- источники звука,
- физические явления,
- построение траекторий.
Чтобы задать значение маски, нажмите на кнопку этой маски (Viewport Mask, Shadow Mask, Intersection Mask и т. д.) и включите соответствующие биты 32-битной маски. Включение бита подразумевает, что ему присваивается значение 1 (при выключении значение равно 0). Полученное значение маски отображается в шестнадцатеричном виде в верхней части контекстного меню маски. Название включенного бита или битов дублируется на кнопке маски.
Чтобы свернуть контекстное меню, еще раз нажмите кнопку маски.
Маска со включенным первым битом
|
|
Названия битов в масках можно редактировать. Введенное в поле название присваивается выбранному биту во всех масках этого типа. Например, если присвоить название первому биту маски 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). Эта маска работает, только если для запеченных отражений включены динамические отражения (режим Realtime Update).
- Плоское отражение (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.
Объект без отражения
|
Отражение без объекта
|
||||||||||||||||||||||||
|
|
В первом случае 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 источника освещения
|
В нашем видеоуроке по битовым маскам разобран еще один пример.
Маска материалов#
Маска материалов (Material Mask) содержит 24 бита и используется для того, чтобы выбрать те объекты, на которые будет проецироваться декаль. Декаль может отложиться на объекте или одной из его поверхностей, только если их маски Material Mask совпадут.
Material Mask для материала можно указать в окне Parameters редактора материалов:
В нашем видеоуроке по битовым маскам показано, как при помощи маски материалов спроецировать декаль на определенную поверхность.
Маска пересечений#
Маска пересечений (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.
В нашем видеоуроке по битовым маскам показано, как работает маска исключений.
Physics Intersection Mask#
Поиск физических перечечений (между физическими объектами с назначенными телами и коллизионными формами или поиск пересечения луча с коллизионной геометрией) использует отдельную маску, в отличие от описанных выше и применяется для поиска мировых пересечений (т.е., между ограничивающими контурами объектов или поиск пересечений луча с поверхностями объектов). Благодаря этому вы можете управлять ими независимо.
Поиск физических пересечений может быть использован, к примеру, для определения столкновений сгенерированных частиц с физическими формами и телами или статичными коллизионными поверхностями, чтобы удостовериться в корректном взаимодействии, или в качестве быстрой проверки на столкновения для колёс наземного транспорта, использующих бросание луча в сторону поверхности земли (raycating), или чтобы проверить, произошло ли столкновение снаряда и персонажа или разрушаемого объекта.
Маску Physics Intersection можно задать в редакторе UnigineEditor или при помощи API для систем частиц, форм, разрушаемых тел, Player Actor, и Wheel сочленений, чтобы задействовать выборочное определение физических пересечений и повысить производительность, ограничив число объектов, которые могут участвовать в физических пересечениях. Маску также можно настроить для поверхности объекта (если этому объекту не назначены коллизионные формы или физическое тело и он будет использоваться как статический коллизионный объект) при помощи UnigineEditor или API.
Маска физических явлений#
Маска физических явлений (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 должны совпадать (хотя бы по одному биту).
Маска перемещений#
Маска перемещений (Navigation Mask) используется для определения, по каким зонам перемещения проходит траектория, а по каким — нет. Navigation Mask зоны перемещения должна совпадать с Navigation Mask траектории, которая рассчитывается внутри зоны перемещения; при несовпадении масок эта зона перемещения исключается из построения траектории.
Navigation Mask для зон перемещения можно задать через:
- UnigineEditor — секция Navigation Sector/Navigation Mesh окна Parameters;
- Unigine API.
Используя маску перемещений, можно определить те зоны, в которых будет просчитываться определенная траектория. Например, маска может использоваться даже внутри общей для двух траекторий зоны перемещения для вычисления траекторий, которые пересекаться не будут.
В нашем видеоуроке по битовым маскам есть пример использования маски перемещений.
Маска препятствий#
Маска препятствий (Obstacle Mask) используется для указания препятствий внутри зон перемещения, которые должны учитываться при построении траектории. Obstacle Mask препятствия должна совпадать с Obstacle Mask просчитываемой траектории; в ином случае препятствие при построении траектории учтено не будет.
Как и маску перемещений, маску препятствий можно задать через:
- UnigineEditor — секция Obstacle Box/Sphere/Capsule окна Parameters;
- Unigine API.
В нашем видеоуроке по битовым маскам есть пример использования маски препятствий.
Маска полей#
Маска полей (Field Mask) определяет, взаимодействует ли такой объект как трава, вода или облака с объектом Field. Field Mask ноды типа Field должна совпадать с Field Mask травы, воды или слоя облаков.
Field Mask можно задать через UnigineEditor или API.
Пример использования Field Mask есть в нашем видеоуроке по битовым маскам.
Particles Field Mask#
Маска полей частиц Particles Field используется для взаимодействия с нодами Particles Field (дефлекторами и и спейсерами). Particles Field будет воздействовать на испускаемые частицы, только если их маски совпадают (хотя бы в одном бите).