RealityKit сводит мой iPhone ThermalStatus go с ума без видимой причины - PullRequest
1 голос
/ 28 мая 2020

У меня есть следующее демонстрационное приложение, в котором я устанавливаю 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)
  }
}

Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 07 июня 2020

Когда вы используете ARKit или RealityKit, тепловое состояние вашего iPhone не полностью зависит от рендеринга 100 примитивов в реальном времени. Дело в отслеживании мира с 6 степенями свободы со скоростью 60 кадров в секунду. Обнаружение самолетов - еще одна функция hard core вашего устройства. Итак, операции World Tracking и Plane Detection чрезвычайно интенсивны для CPU / GPU (а также для обнаружения изображений / объектов или людей). Они также быстро разряжают аккумулятор.

Еще одна тяжелая нагрузка для вашего CPU / GPU - тени и отражающие металлические c шейдеры. Мягкие тени со скоростью 60 кадров в секунду в реальном времени являются дополнительной задачей для любого устройства (даже с процессором A12), а текстуры Metalli c, использующие рефлектоны окружающей среды, рассчитываются на нейронных двигателях.

...