首页 > 解决方案 > 如何使 SCNParticleSystem 中的粒子不透明?

问题描述

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

在此处输入图像描述

我试过了:

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

这只会使粒子大约 80%-90% 透明,但我不能让它 100% 不透明。

标签: swiftaugmented-realityscenekitarkitparticles

解决方案


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

var blendMode: SCNParticleBlendMode { get set }
var sortingMode: SCNParticleSortingMode { get set }

根据苹果文档:

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

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

  • .additive
  • .alpha
  • .multiply
  • .replace
  • .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)

在此处输入图像描述


推荐阅读