SceneKit:停止粒子系统的动画
SceneKit: stop animation of particle system
我正在使用 SCNPArticleSystem 在对象周围创建薄雾。阴霾一旦产生,我不希望它进一步改变。
我注意到粒子系统动画在达到 emissionDuration 后仍在继续。这会导致应用使用大量 CPU.
有没有办法冻结粒子系统,因为它在 emissionDuration 之后存在并且不再有任何动画命中?
我试过打电话:
particleSyste.removeAllAnimations()
但这无济于事。这是我设置粒子系统的方法
let particleSystem = SCNParticleSystem()
particleSystem.particleImage = UIImage(named: "smoke")
particleSystem.particleColor = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 0.005)
particleSystem.birthRate = 10000;
particleSystem.birthDirection = .random
particleSystem.birthLocation = .volume
particleSystem.particleLifeSpan = CGFloat.greatestFiniteMagnitude
particleSystem.particleSize = 2
particleSystem.particleSizeVariation = 0.2
particleSystem.particleAngleVariation = 360
particleSystem.blendMode = .additive
particleSystem.orientationMode = .free
particleSystem.emissionDuration = 1
particleSystem.loops = false
particleSystem.warmupDuration = 2
particleSystem.isLocal = true
particleSystem.stretchFactor = 1.5
let particleSystemGeometry = SCNCylinder(radius: 0.85 * GAL_IMAGE_WIDTH_IN_LIGHT_YEARS * sceneScale / 2, height: 100 * sceneScale)
particleSystem.emitterShape = particleSystemGeometry
particleSystemNode = SCNNode(geometry: particleSystemGeometry)
particleSystemNode.addParticleSystem(particleSystem)
particleSystemNode.pivot = SCNMatrix4MakeRotation(Float.pi / 2, 1, 0, 0)
particleSystemNode.name = "ParticleNode"
scene.rootNode.addChildNode(particleSystemNode)
如有任何建议,我将不胜感激。
要回答您的问题,不...我认为没有办法将其冻结在当前状态。场景有雾组件,但我认为这不是您要问的。
粒子系统想要运行它的路线基于你给它的行为。一种想法是连续循环,降低出生率,0 warmupDuration,并减小 particleSize。
类似于:
birthRate < 100,warmupDuration = 0,particleSize 0.15,
particleLifeSpan < 10 秒,emmisionDuration 3.5
所以... N 出生率在 3.5 秒内发生并持续 < 10 秒以使其有一些残留。
我对烟雾尾迹使用类似的设置,但如果您设置所需的方向矢量,我 "think" 它会在您要寻找的附近产生一些东西。
我终于就这个问题联系了 Apple DTS。他们证实没有办法阻止这种情况。当您将粒子系统添加到场景时,它会打开连续渲染。他们建议提交一个关于它的错误(我会的)。
我正在使用 SCNPArticleSystem 在对象周围创建薄雾。阴霾一旦产生,我不希望它进一步改变。
我注意到粒子系统动画在达到 emissionDuration 后仍在继续。这会导致应用使用大量 CPU.
有没有办法冻结粒子系统,因为它在 emissionDuration 之后存在并且不再有任何动画命中?
我试过打电话:
particleSyste.removeAllAnimations()
但这无济于事。这是我设置粒子系统的方法
let particleSystem = SCNParticleSystem()
particleSystem.particleImage = UIImage(named: "smoke")
particleSystem.particleColor = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 0.005)
particleSystem.birthRate = 10000;
particleSystem.birthDirection = .random
particleSystem.birthLocation = .volume
particleSystem.particleLifeSpan = CGFloat.greatestFiniteMagnitude
particleSystem.particleSize = 2
particleSystem.particleSizeVariation = 0.2
particleSystem.particleAngleVariation = 360
particleSystem.blendMode = .additive
particleSystem.orientationMode = .free
particleSystem.emissionDuration = 1
particleSystem.loops = false
particleSystem.warmupDuration = 2
particleSystem.isLocal = true
particleSystem.stretchFactor = 1.5
let particleSystemGeometry = SCNCylinder(radius: 0.85 * GAL_IMAGE_WIDTH_IN_LIGHT_YEARS * sceneScale / 2, height: 100 * sceneScale)
particleSystem.emitterShape = particleSystemGeometry
particleSystemNode = SCNNode(geometry: particleSystemGeometry)
particleSystemNode.addParticleSystem(particleSystem)
particleSystemNode.pivot = SCNMatrix4MakeRotation(Float.pi / 2, 1, 0, 0)
particleSystemNode.name = "ParticleNode"
scene.rootNode.addChildNode(particleSystemNode)
如有任何建议,我将不胜感激。
要回答您的问题,不...我认为没有办法将其冻结在当前状态。场景有雾组件,但我认为这不是您要问的。
粒子系统想要运行它的路线基于你给它的行为。一种想法是连续循环,降低出生率,0 warmupDuration,并减小 particleSize。
类似于: birthRate < 100,warmupDuration = 0,particleSize 0.15, particleLifeSpan < 10 秒,emmisionDuration 3.5
所以... N 出生率在 3.5 秒内发生并持续 < 10 秒以使其有一些残留。
我对烟雾尾迹使用类似的设置,但如果您设置所需的方向矢量,我 "think" 它会在您要寻找的附近产生一些东西。
我终于就这个问题联系了 Apple DTS。他们证实没有办法阻止这种情况。当您将粒子系统添加到场景时,它会打开连续渲染。他们建议提交一个关于它的错误(我会的)。