Битовые маски
Механизм битовых масок делает возможным доступ к отдельным битам из всего набора данных. Данный механизм может применяться в следующих системах:
- рендеринг в окно просмотра,
- отображение теней,
- отрисовка отражений,
- коллизии,
- пересечения,
- декали,
- поля,
- источники звука,
- физические явления,
- построение траекторий.
Чтобы задать значение маски, нажмите на кнопку этой маски (Viewport Mask, Shadow Mask, Intersection Mask и т. д.) и включите соответствующие биты 32-битной маски. Включение бита подразумевает, что ему присваивается значение 1 (при выключении значение равно 0). Полученное значение маски отображается в шестнадцатеричном виде в верхней части контекстного меню маски. Название включенного бита или битов дублируется на кнопке маски.
Чтобы свернуть контекстное меню, еще раз нажмите кнопку маски.
Маска со включенным первым битом
|
|
Названия битов в масках можно редактировать. Введенное в поле название присваивается выбранному биту во всех масках этого типа. Например, если присвоить название первому биту маски Viewport Mask поверхности, то это же название будет отображаться для первого бита маски Viewport Mask камеры. Названия битов в масках присваиваются локально и хранятся в файле <Название проекта>/data/default.bitmasks, который создается, когда вы в первый раз открываете свой проект в UnigineEditor.
Comparing MasksСравнение масок#
Маски сравниваются путем сравнения каждого из битов при помощи бинарного оператора И. Таким образом, первый бит одной маски сравнивается с первым битом другой маски, второй со вторым и так далее.
Например, в показанных ниже масках отображения в окно просмотра (Viewport Mask) четыре совпадающих бита, поэтому маски совпали:
Viewport Mask камеры со включенными первыми шестью битами |
Viewport Mask объекта со включенными вторым, третьим, четвертым и пятым битами |
Кроме того, у масок есть шестнадцатеричное значение, которое отображается в поле ввода вверху контекстного меню. Можно скопировать шестнадцатеричное значение одной маски и вставить его в поле ввода в другой маске, чтобы включить аналогичные биты.
Концепция механизма битовых масок проиллюстрирована в нашем видеоуроке по битовым маскам.
Rendering into ViewportОтображение в окно просмотра#
Объекты (наряду с декалями и источниками освещения) можно выборочно отображать в окне просмотра. Для этого необходимо, чтобы Viewport Mask камеры (открывается через окно Camera Settings на панели камеры), совпадала со следующими масками:
- Viewport Mask поверхности объекта (окно Parameters -> вкладка Node -> секция Surfaces -> поле Rendering);
- Viewport Mask материала объекта, чтобы отображался материал, назначенный на этот объект (окно Parameters -> вкладка Node -> секция Surface Material -> вкладка Common -> поле Options).
Usage ExampleПример использования#
Предположим, что у нас есть два объекта с одинаковым материалом. Чтобы один из них отображался в окне просмотра, а другой — нет, нужно изменить Viewport Mask того объекта, который мы хотим скрыть.
В масках Viewport Mask поверхностей обоих объектов включен один и тот же бит Viewport Mask 0 (00000001)
|
Для поверхности первого объекта отключены все биты Viewport Mask (установлено значение маски 00000000)
|
В видеоуроке по битовым маскам показан еще один пример работы с маской отображения в окно просмотра.
Reflection MaskМаска отражений#
Маска отражений (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).
В нашем видеоуроке по битовым маскам также показаны примеры использования масок с запеченными отражениями и динамическими отражениями.
Usage ExampleПример использования#
Возьмем отражающую поверхность и два объекта, которые в ней отражаются.
- Чтобы отрисовать объект без отражения, 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 источника освещения, который освещает объект, должна совпадать (иметь хотя бы один совпадающий бит) со следующими масками:
- Shadow Mask поверхности объекта (окно Parameters -> вкладка Node -> секция Surfaces -> поле Rendering);
- Shadow Mask материала объекта (окно Parameters -> вкладка Node -> секция Surface Material -> вкладка Common -> поле Options).
Usage ExampleПример использования#
Приведенные ниже иллюстрации показывают разницу. Слева в масках Shadow Mask поверхности и ее материала включены все биты, следовательно у них есть один совпадающий бит с Shadow Mask источника освещения, благодаря чему тень будет отрисована. Справа маски Shadow Mask поверхности и назначенного на нее материала не совпадают с Shadow Mask источника освещения, поэтому тень отрисована не будет.
Shadow Mask поверхности и ее материала
|
Shadow Mask поверхности и ее материала
|
Shadow Mask источника освещения
|
Shadow Mask источника освещения
|
В нашем видеоуроке по битовым маскам разобран еще один пример.
Material MaskМаска материалов#
Маска материалов (Material Mask) содержит 24 бита и используется для того, чтобы выбрать те объекты, на которые будет проецироваться декаль. Декаль может отложиться на объекте или одной из его поверхностей, только если их маски Material Mask совпадут.
Material Mask для материала можно указать в окне Parameters редактора материалов:
В нашем видеоуроке по битовым маскам показано, как при помощи маски материалов спроецировать декаль на определенную поверхность.
Intersection MaskМаска пересечений#
Маска пересечений (Intersection Mask) определяет сущности (объекты, ноды, формы, коллизионные объекты и препятствия), для которых будет или не будет выполняться поиск пересечений. Поиск пересечений выполняется, только если Intersection Mask объекта совпадает с Intersection Mask, переданной в качестве аргумента функции. В противном случае объект при проверке пересечений будет игнорироваться.
Маску для объекта можно задать в UnigineEditor или через API.
Маска пересечений может использоваться, чтобы уточнить поиск предмета или повысить производительность, ограничив число объектов, участвующих в пересечениях.
Наш видеоурок по битовым маскам демонстрирует два примера использования маски пересечений: исключение объектов из процесса определения пересечений и вырезание сегментов травы.
Collision MaskМаска коллизий#
Маска коллизий (Collision Mask) сортирует формы и тела, которые должны участвовать в определенном физическом взаимодействии: объекты будут сталкиваться, только если совпадают их маски коллизий. Если маски не совпадают, формы и тела будут просто проходить сквозь друг друга.
Например, у нас есть четыре тела, которые должны сталкиваться следующим образом:
Тело A | Тело B | Тело C | Тело D | |
Тело A | ||||
Тело B | ||||
Тело C | ||||
Тело D |
Для этого у каждой пары сталкивающихся тел должна быть 1 в одном и том же бите:
Тело | Маска |
---|---|
Тело A | 0001 |
Тело B | 0010 |
Тело C | 0110 |
Тело D | 1111 |
Пример работы маски коллизий есть в нашем видеоуроке по битовым маскам.
Exclusion MaskМаска исключений#
Маска исключений (Exclusion Mask) работает противоположно маске коллизий. Она используется для предотвращения коллизий определенной формы с другими формами. Чтобы формы с совпадающими масками коллизий не сталкивались, достаточно одного совпадающего бита в их масках исключений. Значение 0 в Exclusion Mask означает, что все формы с совпадающими Collision Mask будут сталкиваться. Эта маска не зависит от значений в Collision Mask.
В нашем видеоуроке по битовым маскам показано, как работает маска исключений.
Physics Intersection MaskPhysics Intersection Mask#
Physics intersections (between physical objects with bodies and collider shapes, or ray intersections with collider geometry) use a separate mask, other than the one described above and used for world intersections (i.e., between object bound volumes, or ray intersections with object surfaces). This offers more flexibility enabling you to control them independently.Поиск физических перечечений (между физическими объектами с назначенными телами и коллизионными формами или поиск пересечения луча с коллизионной геометрией) использует отдельную маску, в отличие от описанных выше и применяется для поиска мировых пересечений (т.е., между ограничивающими контурами объектов или поиск пересечений луча с поверхностями объектов). Благодаря этому вы можете управлять ими независимо.
Physics intersections can be used, for example, to detect collisions of spawned particles with physical shapes and bodies, or static collider surfaces to ensure proper interaction, or as a quick way to detect collisions for raycast-wheels of a simulated ground vehicle, or to check if a destructible object or a player was hit by a projectile.Поиск физических пересечений может быть использован, к примеру, для определения столкновений сгенерированных частиц с физическими формами и телами или статичными коллизионными поверхностями, чтобы удостовериться в корректном взаимодействии, или в качестве быстрой проверки на столкновения для колёс наземного транспорта, использующих бросание луча в сторону поверхности земли (raycating), или чтобы проверить, произошло ли столкновение снаряда и персонажа или разрушаемого объекта.
The Physics Intersection mask can be specified via the UnigineEditor or via API for a particle system, a shape, a fracture body, a player actor, or a wheel joint to enable selective physics intersection detection or increase performance by limiting the number of objects that can participate in physics intersections. It san also be set for the object's surface (if this object has no body or shape assigned and is to be treated as a static collider) via UnigineEditor or API.Маску Physics Intersection можно задать в редакторе UnigineEditor или при помощи API для систем частиц, форм, разрушаемых тел, Player Actor, и Wheel сочленений, чтобы задействовать выборочное определение физических пересечений и повысить производительность, органичив число объектов, которые могут учствовать в физических пересечениях. Маску также можно настроить для поверхности объекта (если этому объекту не назначены коллизионные формы или физическое тело и он будет использоваться как статический коллизионный объект) при помощи UnigineEditor или API.
Physical MaskМаска физических явлений#
Маска физических явлений (Physical Mask) определяет, какие объекты будут взаимодействовать с нодами физических явлений: сила (Physical Force), ветер (Physical Wind) и вода (Physical Water). Маска выставляется по такому же принципу, что и маска коллизий. Например, тело, помещенное в Physical Water, при несовпадении масок плавать не будет.
Пример того, как работает маска физических явлений с физическими эффектами, можно найти в нашем видеоуроке по битовым маскам.
Sound Sources MasksМаски источников звука#
Маски можно задавать как в UnigineEditor, так и через API.
Увидеть и услышать работу масок источников звука можно в нашем видеоуроке по битовым маскам.
Source MaskМаска источников звука#
Маска источников звука (Source Mask) определяет, в каких звуковых каналах распространяется определенный звук. Чтобы источник звука было слышно, его маска должна совпадать с Sound Mask персонажа хотя бы в одном бите.
Reverb MaskМаска ревербераций#
Маска ревербераций (Reverberation Mask) определяет, какие зоны реверберации будет слышно. Чтобы звук реверберировал, как минимум один бит этой маски должен быть общим у Reverb Mask ноды Reverberation Zone и Reverb Mask персонажа. Помимо этого, Reverb Mask персонажа должна совпадать с Reverb Mask ноды Sound Source (но совпадающий бит у этой пары может быть не таким, как у первой пары).
Occlusion MaskМаска звуковых преград#
Маска звуковых преград (Occlusion Mask) определяет, для каких источников звука выбранная поверхность будет преградой. Чтобы поверхность не пропускала звук, у такой поверхности и у источника звука маски Occlusion Mask должны совпадать (хотя бы по одному биту).
Navigation MaskМаска перемещений#
Маска перемещений (Navigation Mask) используется для определения, по каким зонам перемещения проходит траектория, а по каким — нет. Navigation Mask зоны перемещения должна совпадать с Navigation Mask траектории, которая рассчитывается внутри зоны перемещения; при несовпадении масок эта зона перемещения исключается из построения траектории.
Navigation Mask для зон перемещения можно задать через:
- UnigineEditor — секция Navigation Sector/Navigation Mesh окна Parameters;
- Unigine API.
Используя маску перемещений, можно определить те зоны, в которых будет просчитываться определенная траектория. Например, маска может использоваться даже внутри общей для двух траекторий зоны перемещения для вычисления траекторий, которые пересекаться не будут.
В нашем видеоуроке по битовым маскам есть пример использования маски перемещений.
Obstacle MaskМаска препятствий#
Маска препятствий (Obstacle Mask) используется для указания препятствий внутри зон перемещения, которые должны учитываться при построении траектории. Obstacle Mask препятствия должна совпадать с Obstacle Mask просчитываемой траектории; в ином случае препятствие при построении траектории учтено не будет.
Как и маску перемещений, маску препятствий можно задать через:
- UnigineEditor — секция Obstacle Box/Sphere/Capsule окна Parameters;
- Unigine API.
В нашем видеоуроке по битовым маскам есть пример использования маски препятствий.
Field MaskМаска полей#
Маска полей (Field Mask) определяет, взаимодействует ли такой объект как трава, вода или облака с объектом Field. Field Mask ноды типа Field должна совпадать с Field Mask травы, воды или слоя облаков.
Field Mask можно задать через UnigineEditor или API.
Пример использования Field Mask есть в нашем видеоуроке по битовым маскам.
Particles Field MaskParticles Field Mask#
The Particles Field mask is used for interaction of particles with Particles Field nodes (Deflectors and Spacers). Emitted particles will be affected by a Particles Field only if their masks match (one bit at least).Маска полей частиц Particles Field используется для взаимодействия с нодами Particles Field (дефлекторами и и спейсерами). Particles Field будет воздействовать на испускаемые частицы, только если их маски совпадают (хотя бы в одном бите).