Как создать эффект портала в ARKit, используя редактор SceneKit? - PullRequest
0 голосов
/ 21 октября 2018

Я хотел бы создать прототип как этот : просто с помощью Xcode SceneKit Editor.Я нашел ответ , где комната создается программно с простыми SCNPlane объектами и играет с порядком рендеринга.

Однако я хотел бы собрать что-то более сложное, например, загрузить 3d-модель комнаты и сделать ее доступной только через портал.Я пытаюсь добиться того же эффекта непосредственно в редакторе SceneKit Xcode, преобразовывая эту часть:

//a. Create The Left Wall And Set Its Rendering Order To 200 Meaning It Will Be Rendered After Our Masks
    let leftWallNode = SCNNode()
    let leftWallMainGeometry = SCNPlane(width: 0.5, height: 1)
    leftWallNode.geometry = leftWallMainGeometry
    leftWallMainGeometry.firstMaterial?.diffuse.contents = UIColor.red
    leftWallMainGeometry.firstMaterial?.isDoubleSided = true
    leftWallNode.renderingOrder = 200

    //b. Create The Left Wall Mask And Set Its Rendering Order To 10 Meaning It Will Be Rendered Before Our Walls
    let leftWallMaskNode = SCNNode()
    let leftWallMaskGeometry = SCNPlane(width: 0.5, height: 1)
    leftWallMaskNode.geometry = leftWallMaskGeometry
    leftWallMaskGeometry.firstMaterial?.diffuse.contents = UIColor.blue
    leftWallMaskGeometry.firstMaterial?.isDoubleSided = true
    leftWallMaskGeometry.firstMaterial?.transparency = 0.0000001
    leftWallMaskNode.renderingOrder = 10
    leftWallMaskNode.position = SCNVector3(0, 0, 0.001)

в две плоскости в редакторе:

SceneKit Editor

Я позаботился о настройке isDoubleSided и renderingOrder для них обоих, и я сделал второй прозрачным (используя альфа на Diffuse Color).

К сожалению, при отображении в режиме AR он не работает.Файл .scn доступен здесь .

1 Ответ

0 голосов
/ 21 октября 2018

В вашем примере виртуальный мир скрыт за стеной .Чтобы получить портал, как в представленном фильме, вам нужно отверстие в стене (где находится вход), а не плоскость, блокирующая ваши трехмерные объекты.Альфа-канал portal's entrance должен выглядеть как правая часть следующего изображения:

enter image description here

Также посмотрите мои ответы в SOposts: ARKit скрывает объекты за стенами и ARKit - Рендеринг трехмерного объекта под невидимой плоскостью для проверки того, как настроить невидимый материал.

Код может выглядеть таквот этот:

portalPlane.geometry?.materials.first?.colorBufferWriteMask = [] 
portalPlane.geometry?.materials.first?.readsFromDepthBuffer = true
portalPlane.geometry?.materials.first?.writesToDepthBuffer = true
portalPlane.renderingOrder = -1

И, конечно, вы можете использовать свойства в инспекторе материалов:

enter image description here

Для плоскости порталаследующие свойства: Writes Depth - true, Reads Depth - true, Write to Color - пусто, Rendering Order (в Node Inspector) - -1.

Для 3D-объектов внутри портала Rendering Order (в Node Inspector) больше 0.

Вы точно можете наблюдать a hidden effect прямо в окне просмотра Xcode .

enter image description here

Теперь скрытая стена маскирует большую часть 3D, чтобы показать реальную улицу, и вы видите свою 3D-среду через портал (неверный результат включенслева, справа результат находится в правой части этой фотографии).

enter image description here

И на следующем рисунке показано, как 3D стена (в моем случае она вытесняется)плоскость) выглядит следующим образом:

enter image description here

Но для exit портала вам просто нужен трехмерный объект, такой как door (неотверстие в стене), и это exit должно выглядеть как левая сторона представленных изображений.Нормы door должны быть указаны внутрь, нормы wall должны быть указаны снаружи.Материал для обоих объектов односторонний.

Надеюсь, это поможет.

...