У меня есть следующее демонстрационное приложение, в котором я устанавливаю ARWorldTrackingConfiguration поверх своего RealityKit.
Я также использую обнаружение плоскости.
Когда обнаруживается самолет, я добавляю возможность " Запустите "прямоугольник на плоскости с помощью простого квадратного поля столкновения.
Примерно через 100 квадратов приложение thermalStatus
изменится на serious
, а частота кадров снизится до 30 кадров в секунду.
Да хоть убей, я не могу понять, почему 100 простых форм в мире RealityKit без особых текстур или даже событий столкновения вызовут это.
Кто-нибудь знает?
PS1: Запуск на iPhone XS, который должен работать лучше в соответствии со спецификациями HW.
PS2: Добавление кода ниже
import UIKit
import RealityKit
import ARKit
let material = SimpleMaterial(color: .systemPink, isMetallic: false)
var sphere: MeshResource = MeshResource.generatePlane(width: 0.1, depth: 0.1)
var box = ShapeResource.generateBox(width: 0.1, height: 0.03, depth: 0.1)
var ballEntity = ModelEntity(mesh: sphere, materials: [material])
let collider = CollisionComponent(
shapes: [box],
mode: .trigger
)
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = [.vertical]
configuration.worldAlignment = .camera
// Add the box anchor to the scene
configuration.frameSemantics.remove(.bodyDetection)
configuration.frameSemantics.remove(.personSegmentation)
configuration.frameSemantics.remove(.personSegmentationWithDepth)
arView.renderOptions.insert(.disableCameraGrain)
arView.renderOptions.insert(.disableGroundingShadows)
arView.renderOptions.insert(.disableHDR)
arView.renderOptions.insert(.disableMotionBlur)
arView.renderOptions.insert(.disableFaceOcclusions)
arView.renderOptions.insert(.disableDepthOfField)
arView.renderOptions.insert(.disablePersonOcclusion)
configuration.planeDetection = [.vertical, .horizontal]
arView.debugOptions = [.showAnchorGeometry, .showStatistics]
let gesture = UITapGestureRecognizer(target: self,
action: #selector(self.tap(_:)))
arView.addGestureRecognizer(gesture)
arView.session.run(configuration, options: [ .resetSceneReconstruction ])
}
@objc func tap(_ sender: UITapGestureRecognizer) {
let point: CGPoint = sender.location(in: arView)
guard let query = arView.makeRaycastQuery(from: point,
allowing: .existingPlaneGeometry,
alignment: .vertical) else {
return
}
let result = arView.session.raycast(query)
guard let raycastResult = result.first else { return }
let anchor = AnchorEntity(raycastResult: raycastResult)
var ballEntity = ModelEntity(mesh: sphere, materials: [material])
ballEntity.collision = collider
anchor.addChild(ballEntity)
arView.scene.anchors.append(anchor)
}
@IBAction func removePlaneDebugging(_ sender: Any) {
if arView.debugOptions.contains(.showAnchorGeometry) {
arView.debugOptions.remove(.showAnchorGeometry)
button.setTitle("Display planes", for: .normal)
return
}
button.setTitle("Remove planes", for: .normal)
arView.debugOptions.insert(.showAnchorGeometry)
}
}
Кто-нибудь может помочь?