Это может произойти из-за двух потенциальных проблем.
РЕШЕНИЕ 1 .
Когда вы используете CISourceOverCompositing
, вам нужно предварительно умноженное изображение RGBA (RGB * A) для переднего плана, где альфа-канал имеет той же формы , что и Земля (изображение слева). Но у вас есть альфа-канал, покрывающий все изображение (правая картинка).
Если вы хотите знать, какова форма альфа-канала на вашем изображении Земли - используйте одно из следующих приложений для композитинга: The Foundry Nuke, Adobe After Effect, Apple Motion, Blackmagic Fusion и т. Д.
Также, если вы хотите объединить Луну и Землю по отдельности, вы должны иметь их как два разных изображения.
В классическом композитинге OVER
операция имеет следующую формулу:
(RGB_image1 * A_image1) + (RGB_image2 * (1 – A_image1))
Первая часть этой формулы - это предварительно умноженное изображение переднего плана (Земля) - RGB1 * A1.
Вторая часть этой формулы - это фоновое изображение с отверстием - RGB2 * inverted_A1. Вы получили инверсию альфа-канала, используя (1-A). Само фоновое изображение может иметь только три компонента - RGB (без A).
Затем вы добавляете два изображения вместе, используя простую операцию сложения. Если у вас есть несколько OVER
операций - порядок этих операций имеет решающее значение.
РЕШЕНИЕ 2 .
Это может быть связано с Depth Buffer
. Отключить writesToDepthBuffer
свойство экземпляра. Это логическое значение, которое определяет, будет ли SceneKit генерировать информацию о глубине при рендеринге материала.
yourTorusNode.geometry?.materials.first?.writesToDepthBuffer = false
Надеюсь, это поможет.