¿Crear bordes más suaves o, de lo contrario, arreglar bordes irregulares en el cuadro en SCNView?

El código siguiente genera un cuadro rojo en una SCNView . Sin embargo, los bordes están dentados a lo largo de la parte superior e inferior del lado / elemento que mira hacia usted (como lo ilustra el accesorio). El objective es hacer bordes más suaves similares a los de Minecraft. Cambiar la position de la camera networkinguce la pixelación de ciertos bordes, ¿es esto un problema con el ángulo de la camera? En caso afirmativo, ¿es posible representar cuadros con bordes suaves sin importar el ángulo de la camera?

Por ejemplo, la configuration de la position de la camera en SCNVector3(x: 0.0, y: 0.0, z: 10.0) hace que la caja sea efectiva en 2D y con bordes nítidos (segundo file adjunto).

introduzca la descripción de la imagen aquí introduzca la descripción de la imagen aquí

  let sceneView = SCNView(frame: self.view.frame) self.view.addSubview(sceneView) let scene = SCNScene() sceneView.scene = scene let camera = SCNCamera() let cameraNode = SCNNode() cameraNode.camera = camera cameraNode.position = SCNVector3(x: -3.0, y: 0.0, z: 10.0) let ambientLight = SCNLight() ambientLight.type = SCNLightTypeAmbient ambientLight.color = UIColor(networking: 0.2, green: 0.2, blue: 0.2, alpha: 1.0) cameraNode.light = ambientLight let light = SCNLight() light.type = SCNLightTypeOmni let lightNode = SCNNode() lightNode.light = light lightNode.position = SCNVector3(x: 0, y: 20, z: 10) let cubeGeometry = SCNBox(width: 3.0, height: 3.0, length: 3.0, chamferRadius: 0.0) let cubeNode = SCNNode(geometry: cubeGeometry) let planeGeometry = SCNPlane(width: 100.0, height: 100.0) let planeNode = SCNNode(geometry: planeGeometry) planeNode.eulerAngles = SCNVector3(x: GLKMathDegreesToRadians(-90), y: 0, z: 0) planeNode.position = SCNVector3(x: 0, y: -0.5, z: 0) let networkingMaterial = SCNMaterial() networkingMaterial.diffuse.contents = UIColor.networkingColor() cubeGeometry.materials = [networkingMaterial] let greenMaterial = SCNMaterial() greenMaterial.diffuse.contents = UIColor.greenColor() planeGeometry.materials = [greenMaterial] let constraint = SCNLookAtConstraint(target: cubeNode) constraint.gimbalLockEnabled = true cameraNode.constraints = [constraint] lightNode.constraints = [constraint] scene.rootNode.addChildNode(lightNode) scene.rootNode.addChildNode(cameraNode) scene.rootNode.addChildNode(cubeNode) scene.rootNode.addChildNode(planeNode) 

Como se menciona en los comentarios, si desea antialias cada fotogtwig establece el modo antialiasingMode . No funciona tan bien como CoreGraphics pero es razonablemente agradable. Sin embargo, aumenta la carga de trabajo una tonelada, por lo que va a quemar baterías y ralentizar su velocidad de fotogtwigs.

En OS X, el valor pnetworkingeterminado es 4x multimuestra en cada cuadro. En iOS, el valor pnetworkingeterminado no es un multimuestreo, ya que es muy caro.

Por suerte, hay una solución que prefiero, que es activar el jittering . Es como un multimuestreo pero perezoso. Cuando los objects se mueven se representan normalmente (con jaggies), pero cuando dejan de moverse, el renderer funciona como 96 frameworks más en el background y suaviza todos los jaggies.

El aspecto final es mucho mejor que el antialiasing (porque no hay "modo de antialiasing 96x") y en el hardware rápido la mayoría de las personas que he mostrado no se dan count de que la calidad está cambiando cuando los objects se mueven.