SK3DNode Always Above All Other SKNode Content

I have successfully incorporated some basic 3D content into my SpriteKit-based app.


Next, I want to display some sprites overlaid on top of the 3D content, but can't manage to do so.

Manipulating the .zPosition porperty of the SK3DNode and SKSpriteNode involded doesn't seem to do it.


This is my code for both the Spritekit scene, and the SceneKit scene whose content is displayed within the SK3DNode:


SpriteKit-side:

import SpriteKit
class SpriteKitScene: SKScene {

  override init(size: CGSize) {
  super.init(size: size)

  // Scene Background
  self.backgroundColor = .red

  // 3D Node
  let objectNode = SK3DNode(viewportSize: size)
  objectNode.scnScene = SceneKitScene()
  addChild(objectNode)
  objectNode.position = CGPoint(x: size.width/2, y: size.height/2)

  let camera = SCNCamera()
  let cameraNode = SCNNode()
  cameraNode.camera = camera
  objectNode.pointOfView = cameraNode
  objectNode.pointOfView?.position = SCNVector3(x: 0, y: 0, z: 60)
  objectNode.zPosition = -100

  // 2D Sprite
  let sprite = SKSpriteNode(color: .yellow, size: CGSize(width: 250, height: 60))
  sprite.position = objectNode.position
  sprite.zPosition = +100
  addChild(sprite)
  }

  required init?(coder aDecoder: NSCoder) {
  fatalError("init(coder:) has not been implemented")
  }
}



SceneKit-side:

import SceneKit
class SceneKitScene: SCNScene {

  override init() {
  super.init()

  let box = SCNBox(width: 10, height: 10, length: 10, chamferRadius: 0)
  let material = SCNMaterial()
  material.diffuse.contents = UIColor.green
  box.materials = [material]

  let boxNode = SCNNode(geometry: box)
  boxNode.transform = SCNMatrix4MakeRotation(.pi/2, 1, 1, 1)

  self.rootNode.addChildNode(boxNode)
  }

  required init?(coder: NSCoder) {
  fatalError("init(coder:) has not been implemented")
  }
}


The sprites seem to be rendered at exatly the "far plane" of the SK3DNode's camera; if I push my geometry back to the far plane, it gets clipped ewxactly where it "intersects" the srpite.

Replies

Did you figure out a solution to this problem? It doesn't seem like there are a lot of resources about SK3DNode.