Unity / C # Camera Culling Mask Notation - PullRequest
       91

Unity / C # Camera Culling Mask Notation

0 голосов
/ 01 декабря 2018

У меня есть скрипт управления шейдером из проекта github, и я пытаюсь понять, что он делает построчно.В какой-то момент он берет камеру и делает это:

 m_transparentCamera.cullingMask = ~(1 << LayerMask.NameToLayer("Transparent")); 

И затем он рендерит камеру.Чуть позже в тексте он меняет целевую текстуру камеры, а затем делает это:

 m_transparentCamera.cullingMask = 1 << LayerMask.NameToLayer("Transparent");

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

Что означает обозначение здесь?Я знаю, что ~ и << являются побитовыми операторами, но что на самом деле это делает с маской отбраковки? </p>

Почему это происходит именно так?

А зачем сначала инвертировать биты маски слоя, а потом не позже?

Github cred: https://github.com/candycat1992/OIT_Lab

1 Ответ

0 голосов
/ 01 декабря 2018

Маска отбраковки камеры сообщает, какие слои визуализировать.

Первая маска ~(1 << LayerMask.NameToLayer("Transparent")) отображает все , за исключением прозрачного слоя.

Вторая маска, 1 << LayerMask.NameToLayer("Transparent"), визуализирует только прозрачный слой.

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

Если ничего из этого не имеет смысла, вы можете прочитать битовые маски .

Битовая маскировка имеет тенденцию интенсивно использовать:

  • сдвиг влево (<<) для выбора бита
  • поразрядно ИЛИ (|) для включения определенных битов маски
  • поразрядно И (&) для отключения определенных битов маски
  • поразрядно НЕ (~) для отрицания маски
...