Swift 如何使nParticle系统中的粒子不透明?

Swift 如何使nParticle系统中的粒子不透明?,swift,augmented-reality,scenekit,arkit,particles,Swift,Augmented Reality,Scenekit,Arkit,Particles,我创建了一个SceneKit场景文件>粒子系统,但我不知道如何使所有粒子不透明。默认的粒子alpha设置似乎是随机的。我更改了图像和其他一些属性,并拍摄了一张屏幕截图: 我试过: particle.particleColorVariation = SCNVector4(0, 0, 0, 0) 这只会使粒子大约80%-90%透明,但我无法使其100%不透明。要使粒子系统完全不透明,需要将实例属性设置为.alpha(默认值为.additive),并将实例属性设置为.distance(默认值为.n

我创建了一个SceneKit场景文件>粒子系统,但我不知道如何使所有粒子不透明。默认的粒子alpha设置似乎是随机的。我更改了图像和其他一些属性,并拍摄了一张屏幕截图:

我试过:

particle.particleColorVariation = SCNVector4(0, 0, 0, 0)

这只会使粒子大约80%-90%透明,但我无法使其100%不透明。

要使粒子系统完全不透明,需要将实例属性设置为
.alpha
(默认值为
.additive
),并将实例属性设置为
.distance
(默认值为
.none

根据苹果的文档:

.blendMode
是用于将粒子图像合成到渲染场景中的混合模式

SceneKit中的粒子有六种合成混合模式

  • .additive
  • .alpha
  • .multiply
  • 。更换
  • .screen
  • .subtract
下面是它在实际代码中的外观:

let scnView = self.view as! SCNView
scnView.scene = scene
scnView.allowsCameraControl = true
scnView.backgroundColor = NSColor.black

let particleSystem = SCNParticleSystem()
particleSystem.birthRate = 5

particleSystem.blendMode = .alpha         // 100% opaque if alpha = 1.0
particleSystem.sortingMode = .distance
particleSystem.particleSize = 1.0
particleSystem.emitterShape = SCNSphere(radius: 5)
particleSystem.particleLifeSpan = 100
particleSystem.particleColor = .red

// No Alpha variation
particleSystem.particleColorVariation = SCNVector4(1, 1, 1, 0)

let particlesNode = SCNNode()
particlesNode.addParticleSystem(particleSystem)
scnView.scene!.rootNode.addChildNode(particlesNode)

谢谢!这就成功了:particleSystem.alpha=1.0;particleSystem.particleAlphaRange=0.0。我在粒子文件中设置了它。
let scnView = self.view as! SCNView
scnView.scene = scene
scnView.allowsCameraControl = true
scnView.backgroundColor = NSColor.black

let particleSystem = SCNParticleSystem()
particleSystem.birthRate = 5

particleSystem.blendMode = .alpha         // 100% opaque if alpha = 1.0
particleSystem.sortingMode = .distance
particleSystem.particleSize = 1.0
particleSystem.emitterShape = SCNSphere(radius: 5)
particleSystem.particleLifeSpan = 100
particleSystem.particleColor = .red

// No Alpha variation
particleSystem.particleColorVariation = SCNVector4(1, 1, 1, 0)

let particlesNode = SCNNode()
particlesNode.addParticleSystem(particleSystem)
scnView.scene!.rootNode.addChildNode(particlesNode)