<!--
{
  "availability" : [
    "iOS: 8.0.0 - 26.0.0",
    "iPadOS: 8.0.0 - 26.0.0",
    "macCatalyst: 13.1.0 - 26.0.0",
    "macOS: 10.8.0 - 26.0.0",
    "tvOS: 9.0.0 - 26.0.0",
    "visionOS: 1.0.0 - 26.0.0",
    "watchOS: 3.0.0 - 26.0.0"
  ],
  "documentType" : "symbol",
  "framework" : "SceneKit",
  "identifier" : "/documentation/SceneKit/SCNParticleSystem/addModifier(forProperties:at:modifier:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "SceneKit"
    ],
    "preciseIdentifier" : "c:objc(cs)SCNParticleSystem(im)addModifierForProperties:atStage:withBlock:"
  },
  "title" : "addModifier(forProperties:at:modifier:)"
}
-->

# addModifier(forProperties:at:modifier:)

Adds a block that modifies particle properties, to be executed each time SceneKit renders a frame.

```
func addModifier(forProperties properties: [SCNParticleSystem.ParticleProperty], at stage: SCNParticleModifierStage, modifier block: @escaping SCNParticleModifierBlock)
```

## Parameters

`properties`

An array containing one or more of the constants listed in `Particle Property Keys`, each of which specifies a property of the appearance or behaviors of particles in the particle system.

`stage`

The stage of SceneKit’s particle simulation during which to call the block. See [`SCNParticleModifierStage`](/documentation/SceneKit/SCNParticleModifierStage) for allowed values.

`block`

A [`SCNParticleModifierBlock`](/documentation/SceneKit/SCNParticleModifierBlock) block to be called every time SceneKit renders a frame. In this block you can modify the properties of all particles in the system.

## Discussion

By associating a block with one or more particle properties, you can run arbitrary code that modifies those properties during each frame of animation. This option provides maximum flexibility for changing the appearance or behavior of particles over time.

> Important:
> Running your own code to update particle properties every frame can have a severe impact on rendering performance. If the behavior over time that you want for your particle system can be described more declaratively, use the ``doc://com.apple.scenekit/documentation/SceneKit/SCNParticleSystem/propertyControllers`` property and ``doc://com.apple.scenekit/documentation/SceneKit/SCNParticlePropertyController`` class instead. If you need to change particle properties only at certain times (rather than continuously), add a handler block for an event using the ``doc://com.apple.scenekit/documentation/SceneKit/SCNParticleSystem/handle(_:forProperties:handler:)`` method.

## See Also

[`-  handleEvent:forProperties:withBlock:`](/documentation/SceneKit/SCNParticleSystem/handle(_:forProperties:handler:))

Adds a block that modifies particle properties, to be executed at a specified event in the lifetimes of particles in the system.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)