После некоторых исследований и сна я пришел к следующему рабочему решению (включая некоторые необъяснимые препятствия):
В настоящее время дополнительный канал SCNCamera не связан с SCNMaterial на SCNPlane, так как это былопервоначальная идея, но я буду использовать дополнительный SCNView (на данный момент)
В определениях я добавляю другой вид, например, так:
let overlayView = SCNView() // (also tested with ARSCNView(), no difference)
let camera = SCNCamera()
let cameraNode = SCNNode()
, затем в viewDidLoad я настраиваю материалвот так ...
camera.automaticallyAdjustsZRange = true
camera.usesOrthographicProjection = false
cameraNode.camera = camera
cameraNode.camera?.focalLength = 50
sceneView.scene.rootNode.addChildNode(cameraNode) // add the node to the default scene
overlayView.scene = scene // the same scene as sceneView
overlayView.allowsCameraControl = false
overlayView.isUserInteractionEnabled = false
overlayView.pointOfView = cameraNode // this links the new SCNView to the created SCNCamera
self.view.addSubview(overlayView) // don't forget to add as subview
// Size and place the view on the bottom
overlayView.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width * 0.8, height: self.view.bounds.height * 0.25)
overlayView.center = CGPoint(x: self.view.bounds.width * 0.5, y: self.view.bounds.height - 175)
затем, в какой-то другой функции, я помещаю узел, содержащий SCNCamera, в желаемое положение и угол.
// (exemplary)
cameraNode.position = initialStartPosition + SCNVector3(x: -0.5, y: 0.5, z: -(Float(shiftCurrentDistance * 2.0 - 2.0)))
cameraNode.eulerAngles = SCNVector3(-15.0.degreesToRadians, -15.0.degreesToRadians, 0.0)
Результат - это видокна (новый SCNView) в нижней части экрана, отображая тот же контент SceneKit, что и в основном sceneView, видимый через перспективу SCNCamera плюс положение его узла, и это очень красиво.
В обычном проекте iOS / Swift / ARKit эта конструкция генерирует некоторые побочные эффекты, с которыми можно бороться.
1) В основном, новый SCNView показывает содержимое SceneKit с желаемой точки зрения, но фон всегда является фактической подачей физической камеры.Я не мог понять, как сделать фон статичным цветом, по-прежнему отображая все содержимое SceneKit.Изменение свойства background новой сцены влияет также на всю основную сцену, что на самом деле НЕ желательно.
2) Это может показаться странным, но как только следующий код становится включенным (что необходимо для его работы):
overlayView.scene = scene
скорость анимации всей сцены (обе) удваивается!(Почему?)
Я исправил это, добавив / изменив следующее свойство, которое восстанавливает поведение скорости анимации почти как нормальное (по умолчанию):
// add or change this in the scene setup
scene.physicsWorld.speed = 0.5
3) Если есть действиякак и SCNAction.playAudio в проекте, все эффекты больше не будут воспроизводиться - пока я этого не сделаю:
overlayView.scene = nil
Конечно, дополнительный SCNView перестает работать, но все остальное возвращается кэто нормально.