使用 ARVideoKit 录制视频时粒子加速
Particles Speed Up When Recording A Video Using ARVideoKit
我们有一个使用 ARVideoKit pod (link). Inside our scene we have a fire particle. Fire is playing at a slow speed. However, when you start recording a video the fire particle speeds up. I can't figure out why the fire particle is speeding up. Please see the video (here) 录制视频的 ARKit & SceneKit 应用程序来查看问题。
这是一个示例项目,您可以使用它来测试问题:Project
如果有人能解释为什么会这样,我将不胜感激。
编辑 1:下面是我的 ViewController 代码
import UIKit
import ARKit
import SceneKit
import ARVideoKit
class ViewController: UIViewController, ARSCNViewDelegate {
@IBOutlet var sceneView: ARSCNView!
@IBOutlet weak var photoButton: UIButton!
@IBOutlet weak var videoButton: UIButton!
@IBOutlet weak var takeVideoButtonPressedLabel: UILabel!
// ARVideoKit Variables
var recorder : RecordAR?
var takenImage: UIImage?
var takenVideoAtURL : URL?
let recordingQueue = DispatchQueue(label: "recordingThread", attributes: .concurrent)
var arTrackingConfig = ARWorldTrackingConfiguration()
override func viewDidLoad() {
super.viewDidLoad()
sceneView.delegate = self
sceneView.scene = SCNScene(named: "art.scnassets/fire.scn")!
self.resetTracking()
}
func resetTracking() {
arTrackingConfig = ARWorldTrackingConfiguration()
arTrackingConfig.isLightEstimationEnabled = true
sceneView.session.run(arTrackingConfig, options: [.resetTracking,
.removeExistingAnchors])
}
}
// MARK: - ARVideoKit Implementation
extension ViewController {
@IBAction func takePhoto(_ sender: UIButton) {
// Do Nothing
}
@IBAction func takeVideo(_ sender: UIButton) {
setupCamera()
startRecording()
}
func setupCamera() {
recorder = RecordAR(ARSceneKit: sceneView)
recorder?.prepare(arTrackingConfig)
}
func startRecording() {
takeVideoButtonPressedLabel.isHidden = false
recordingQueue.async {
self.recorder?.record(forDuration: 5) { path in
self.takenVideoAtURL = path
DispatchQueue.main.async {
self.takeVideoButtonPressedLabel.isHidden = true
}
}
}
}
}
编辑 2:添加了用于测试的示例项目。
当使用snapshot方法从SCNRenderer获取图像时传递0作为时间,这样就不会发生强制渲染并且动画会更流畅。在你的情况下粒子不会加速
我们有一个使用 ARVideoKit pod (link). Inside our scene we have a fire particle. Fire is playing at a slow speed. However, when you start recording a video the fire particle speeds up. I can't figure out why the fire particle is speeding up. Please see the video (here) 录制视频的 ARKit & SceneKit 应用程序来查看问题。
这是一个示例项目,您可以使用它来测试问题:Project
如果有人能解释为什么会这样,我将不胜感激。
编辑 1:下面是我的 ViewController 代码
import UIKit
import ARKit
import SceneKit
import ARVideoKit
class ViewController: UIViewController, ARSCNViewDelegate {
@IBOutlet var sceneView: ARSCNView!
@IBOutlet weak var photoButton: UIButton!
@IBOutlet weak var videoButton: UIButton!
@IBOutlet weak var takeVideoButtonPressedLabel: UILabel!
// ARVideoKit Variables
var recorder : RecordAR?
var takenImage: UIImage?
var takenVideoAtURL : URL?
let recordingQueue = DispatchQueue(label: "recordingThread", attributes: .concurrent)
var arTrackingConfig = ARWorldTrackingConfiguration()
override func viewDidLoad() {
super.viewDidLoad()
sceneView.delegate = self
sceneView.scene = SCNScene(named: "art.scnassets/fire.scn")!
self.resetTracking()
}
func resetTracking() {
arTrackingConfig = ARWorldTrackingConfiguration()
arTrackingConfig.isLightEstimationEnabled = true
sceneView.session.run(arTrackingConfig, options: [.resetTracking,
.removeExistingAnchors])
}
}
// MARK: - ARVideoKit Implementation
extension ViewController {
@IBAction func takePhoto(_ sender: UIButton) {
// Do Nothing
}
@IBAction func takeVideo(_ sender: UIButton) {
setupCamera()
startRecording()
}
func setupCamera() {
recorder = RecordAR(ARSceneKit: sceneView)
recorder?.prepare(arTrackingConfig)
}
func startRecording() {
takeVideoButtonPressedLabel.isHidden = false
recordingQueue.async {
self.recorder?.record(forDuration: 5) { path in
self.takenVideoAtURL = path
DispatchQueue.main.async {
self.takeVideoButtonPressedLabel.isHidden = true
}
}
}
}
}
编辑 2:添加了用于测试的示例项目。
当使用snapshot方法从SCNRenderer获取图像时传递0作为时间,这样就不会发生强制渲染并且动画会更流畅。在你的情况下粒子不会加速