Как сделать частицы в SCNParticleSystem непрозрачными? - PullRequest
1 голос
/ 03 февраля 2020

Я создал SceneKit Scene File> Particle System и не могу понять, как сделать все частицы непрозрачными. Настройки альфа-частиц по умолчанию кажутся случайными. Я изменил изображение и несколько других свойств и сделал снимок экрана:

enter image description here

Я пробовал:

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

Что делает частицы прозрачными только на 80-90%, но я не могу сделать их на 100% непрозрачными.

1 Ответ

2 голосов
/ 27 марта 2020

Чтобы сделать систему частиц полностью непрозрачной, необходимо установить для свойства экземпляра blendMode значение .alpha (значение по умолчанию .additive) и для свойства экземпляра sortingMode значение .distance (значение по умолчанию .none)

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

Согласно документации Apple:

.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)

enter image description here

...