Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
513 changes: 494 additions & 19 deletions RealityMixer.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

99 changes: 0 additions & 99 deletions RealityMixer/Capture/Configuration/ChromaKeyConfiguration.swift

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//

import Foundation
import RealityMixerKit

struct MixedRealityConfiguration: Codable, Equatable {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//

import Foundation
import RealityMixerKit

struct NetworkConfiguration: Codable {
let address: String
Expand Down
75 changes: 2 additions & 73 deletions RealityMixer/Capture/Misc/ARKitHelpers.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//

import ARKit
import RealityMixerKit

struct ARKitHelpers {

Expand All @@ -19,79 +20,7 @@ struct ARKitHelpers {
return CGSize(width: CGFloat(width), height: CGFloat(height))
}

static func makePlane(size: CGSize, distance: Float) -> SCNNode {
let plane = SCNPlane(width: size.width, height: size.height)
plane.cornerRadius = 0
plane.firstMaterial?.lightingModel = .constant
plane.firstMaterial?.diffuse.contents = UIColor(red: 0, green: 0, blue: 0, alpha: 1)

let planeNode = SCNNode(geometry: plane)
planeNode.position = .init(0, 0, -distance)
return planeNode
}

static func makePlaneNodeForDistance(_ distance: Float, frame: ARFrame) -> SCNNode {
makePlane(size: planeSizeForDistance(distance, frame: frame), distance: distance)
}

@discardableResult
static func create(textureCache: inout CVMetalTextureCache?, for sceneView: SCNView) -> Bool {
guard let metalDevice = sceneView.device else {
return false
}

return create(textureCache: &textureCache, forDevice: metalDevice)
}

@discardableResult
static func create(textureCache: inout CVMetalTextureCache?, forDevice metalDevice: MTLDevice) -> Bool {
let result = CVMetalTextureCacheCreate(
kCFAllocatorDefault,
nil,
metalDevice,
nil,
&textureCache
)

return result == kCVReturnSuccess
}

static func texture(
from pixelBuffer: CVPixelBuffer,
format: MTLPixelFormat,
planeIndex: Int,
textureCache: CVMetalTextureCache?
) -> MTLTexture? {
guard let textureCache = textureCache,
planeIndex >= 0, planeIndex < CVPixelBufferGetPlaneCount(pixelBuffer) //,
// CVPixelBufferGetPixelFormatType(pixelBuffer) == kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
else {
return nil
}

var texture: MTLTexture?

let width = CVPixelBufferGetWidthOfPlane(pixelBuffer, planeIndex)
let height = CVPixelBufferGetHeightOfPlane(pixelBuffer, planeIndex)

var textureRef : CVMetalTexture?

let result = CVMetalTextureCacheCreateTextureFromImage(
nil,
textureCache,
pixelBuffer,
nil,
format,
width,
height,
planeIndex,
&textureRef
)

if result == kCVReturnSuccess, let textureRef = textureRef {
texture = CVMetalTextureGetTexture(textureRef)
}

return texture
SceneKitHelpers.makePlane(size: planeSizeForDistance(distance, frame: frame), distance: distance)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import UIKit
import ARKit
import RealityMixerKit

final class ChromaKeyConfigurationViewController: UIViewController {

Expand Down Expand Up @@ -85,7 +86,7 @@ final class ChromaKeyConfigurationViewController: UIViewController {
sceneView.scene = scene
sceneView.session.delegate = self

ARKitHelpers.create(textureCache: &textureCache, for: sceneView)
SceneKitHelpers.create(textureCache: &textureCache, for: sceneView)
}

private func configureSliders() {
Expand All @@ -112,7 +113,7 @@ final class ChromaKeyConfigurationViewController: UIViewController {
private func configureBackgroundPlane(with frame: ARFrame) {
let distance: Float = 100
let backgroundPlaneSize = ARKitHelpers.planeSizeForDistance(distance, frame: frame)
let backgroundPlaneNode = ARKitHelpers.makePlane(size: backgroundPlaneSize, distance: distance)
let backgroundPlaneNode = SceneKitHelpers.makePlane(size: backgroundPlaneSize, distance: distance)

let planeMaterial = backgroundPlaneNode.geometry?.firstMaterial
planeMaterial?.lightingModel = .constant
Expand All @@ -139,8 +140,8 @@ final class ChromaKeyConfigurationViewController: UIViewController {
}

func updatePlaneImage(with pixelBuffer: CVPixelBuffer) {
let luma = ARKitHelpers.texture(from: pixelBuffer, format: .r8Unorm, planeIndex: 0, textureCache: textureCache)
let chroma = ARKitHelpers.texture(from: pixelBuffer, format: .rg8Unorm, planeIndex: 1, textureCache: textureCache)
let luma = SceneKitHelpers.texture(from: pixelBuffer, format: .r8Unorm, planeIndex: 0, textureCache: textureCache)
let chroma = SceneKitHelpers.texture(from: pixelBuffer, format: .rg8Unorm, planeIndex: 1, textureCache: textureCache)

planeNode?.geometry?.firstMaterial?.transparent.contents = luma
planeNode?.geometry?.firstMaterial?.diffuse.contents = chroma
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import UIKit
import SwiftSocket
import RealityMixerKit

final class MixedRealityConnectionViewController: UIViewController {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import UIKit
import ARKit
import AVFoundation
import SwiftSocket
import RealityMixerKit

final class MixedRealityViewController: UIViewController {
private let client: TCPClient
Expand Down Expand Up @@ -115,10 +116,10 @@ final class MixedRealityViewController: UIViewController {
sceneView.session.delegate = self

if case .visible = configuration.backgroundLayerOptions.visibility {
sceneView.pointOfView?.addChildNode(ARKitHelpers.makePlane(size: .init(width: 9999, height: 9999), distance: 120))
sceneView.pointOfView?.addChildNode(SceneKitHelpers.makePlane(size: .init(width: 9999, height: 9999), distance: 120))
}

ARKitHelpers.create(textureCache: &textureCache, for: sceneView)
SceneKitHelpers.create(textureCache: &textureCache, for: sceneView)
}

private func configureTap() {
Expand Down Expand Up @@ -233,8 +234,8 @@ final class MixedRealityViewController: UIViewController {
}

private func updateForegroundBackground(with pixelBuffer: CVPixelBuffer) {
let luma = ARKitHelpers.texture(from: pixelBuffer, format: .r8Unorm, planeIndex: 0, textureCache: textureCache)
let chroma = ARKitHelpers.texture(from: pixelBuffer, format: .rg8Unorm, planeIndex: 1, textureCache: textureCache)
let luma = SceneKitHelpers.texture(from: pixelBuffer, format: .r8Unorm, planeIndex: 0, textureCache: textureCache)
let chroma = SceneKitHelpers.texture(from: pixelBuffer, format: .rg8Unorm, planeIndex: 1, textureCache: textureCache)

backgroundNode?.geometry?.firstMaterial?.transparent.contents = luma
backgroundNode?.geometry?.firstMaterial?.diffuse.contents = chroma
Expand All @@ -245,8 +246,8 @@ final class MixedRealityViewController: UIViewController {

private func updateMiddle(with pixelBuffer: CVPixelBuffer) {
guard case .greenScreen = configuration.captureMode else { return }
let luma = ARKitHelpers.texture(from: pixelBuffer, format: .r8Unorm, planeIndex: 0, textureCache: textureCache)
let chroma = ARKitHelpers.texture(from: pixelBuffer, format: .rg8Unorm, planeIndex: 1, textureCache: textureCache)
let luma = SceneKitHelpers.texture(from: pixelBuffer, format: .r8Unorm, planeIndex: 0, textureCache: textureCache)
let chroma = SceneKitHelpers.texture(from: pixelBuffer, format: .rg8Unorm, planeIndex: 1, textureCache: textureCache)

middlePlaneNode?.geometry?.firstMaterial?.transparent.contents = luma
middlePlaneNode?.geometry?.firstMaterial?.diffuse.contents = chroma
Expand Down
Loading