Изменить буфер глубины в Scene Kit с помощью шейдеров - PullRequest
1 голос
/ 03 апреля 2020

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

Редактировать Одна из причин, по которой я хочу это сделать, заключается в том, что из-за Z-боев между двумя моделями на больших расстояниях. Я попытался изменить порядок рендеринга "вырезанного" узла, который невидим, но это вызывает проблемы с Z-боем на расстоянии.

1 Ответ

1 голос
/ 03 апреля 2020

Есть разные способы для достижения этой цели, но самый простой из них, вероятно,

  1. Иметь геометрию для окклюдера
  2. Установите свойство colorBufferWriteMask материала окклюдера на SCNColorMaskNone (он все равно будет записывать в буфер глубины, который является независимым свойством, а именно writesToDepthBuffer)
  3. В конечном итоге установить renderingOrder для узла -1 (или любое значение, которое будет всегда отображаться раньше закрытый узел), если есть проблемы с отбраковкой или сортировкой
...