Latest 1.3.1
License MIT
Platforms ios 11.0


See my Medium post about this CocoaPod

This class PortalMask creates an occluding box around any rectangular frame, including a tracking image, which turns the tracking image or any static area into an Augmented Reality portal into a scene you can define inside that area that can be seen by looking through the defined portal.
This can also be used to have the illusion of a hole in the ground.

Include this pod in your project:
pod 'PortalMask'

The following example code creates a portal ontop of a tracking marker, similar to the example gif.

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
    if let imageAnchor = anchor as? ARImageAnchor {
        let nodeRotated = SCNNode()
        nodeRotated.eulerAngles.x = -.pi / 2
        // the next 2 lines add the portal
        let portal = PortalMask(frameSize: imageAnchor.referenceImage.physicalSize)

        // the next 4 lines add a cube inside the image area
        let width = imageAnchor.referenceImage.physicalSize.width
        let boxNode = SCNNode(geometry: SCNBox(width: width, height: width, length: width, chamferRadius: 0))
        boxNode.position.z = -boxNode.width


Also contains functions for circular holes:

let portal = PortalMask(radius: imageAnchor.referenceImage.physicalSize.width)

And any other polygon by feeding coordinates. This example will make a triangular portal:

let portal = PortalMask(path: [CGPoint(x: 1, y: -1), CGPoint(x: 0, y: 1), CGPoint(x: -1, y: -1)])

Here’s some basic examples of what you can do with this Pod:

Tracking Portal Example
Flappy Bird Example

Latest podspec

    "name": "PortalMask",
    "version": "1.3.1",
    "summary": "PortalMask window to an AR world",
    "description": "PortalMask create a window into any collection of SceneKit elements by occluding other things around it.n     This can be used ontop of ARReferenceImage, create a static portal into another world,n     or to have the illusion of a hole in the ground.",
    "homepage": "",
    "license": "MIT",
    "authors": "Max Cobb",
    "source": {
        "git": "",
        "tag": "1.3.1"
    "swift_version": "4.1",
    "platforms": {
        "ios": "11.0"
    "source_files": "PortalMask/*.swift"

Pin It on Pinterest

Share This