<!--
{
  "documentType" : "article",
  "framework" : "RealityKit",
  "identifier" : "/documentation/RealityKit/postprocessing-effects",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "Postprocessing effects"
}
-->

# Postprocessing effects

Create special rendering effects for your RealityKit scenes.

## Overview

In iOS 15 and later, and macOS 12 and later, you can apply postprocess effects to a RealityKit scene after RealityKit renders it, but before RealityKit displays it. If you register a postprocess callback function, RealityKit passes that function the complete, rendered frame so you can modify it before the viewer sees it. You can use any image processing or drawing APIs on the rendered frame but, as a practical matter, only APIs that execute on the GPU are fast enough to use every frame and maintain a good framerate.

<doc://com.apple.documentation/documentation/CoreImage>, Metal kernal functions, <doc://com.apple.documentation/documentation/MetalPerformanceShaders>, and <doc://com.apple.documentation/documentation/SpriteKit> all execute on the GPU and can be effectively used to implement postprocessing effects.

## Topics

### Core Image effects

[Applying core image filters as a postprocess effect](/documentation/RealityKit/applying-core-image-filters-as-a-postprocess-effect)

Create special rendering effects for your RealityKit scenes using Core Image.

### Metal effects

[Using Metal performance shaders to create custom postprocess effects](/documentation/RealityKit/using-metal-performance-shaders-to-create-custom-postprocess-effects)

Leverage the Metal Performance Shaders framework to create special rendering effects
for your RealityKit scenes.

[Implementing special rendering effects with RealityKit postprocessing](/documentation/RealityKit/implementing-special-rendering-effects-with-realitykit-postprocessing)

Implement a variety of postprocessing techniques to alter RealityKit rendering.

[Checking the pixel format of a postprocess effect’s output texture](/documentation/RealityKit/checking-the-pixel-format-of-a-postprocess-effect-s-output-texture)

Make sure your postprocess effect works on all devices.

[Passing Structured Data to a Metal Compute Function](/documentation/RealityKit/passing-structured-data-to-a-metal-compute-function)

Send nontexture data from Swift to your Metal shaders using a shared header file.

[Implementing postprocess effects using Metal compute functions](/documentation/RealityKit/implementing-postprocess-effects-using-metal-compute-functions)

Create custom shaders to implement postprocess effects.

### Bloom and tone mapping

[`BloomComponent`](/documentation/RealityKit/BloomComponent)

The `BloomComponent` adds a luminous glow effect around bright objects in the scene
by extracting and blurring the brightest parts of the image, then combining them
back with the original rendering. If scope is set to `unbounded` Bloom will be computed
on the entire screen. If scope is set to `hierarchical` multiple Bloom Components can be
used to opt in only the regions around certain objects for blooming.

[`BloomOptionsComponent`](/documentation/RealityKit/BloomOptionsComponent)

A component that sets the properties for the bloom post-processing effects.

[`ToneMappingComponent`](/documentation/RealityKit/ToneMappingComponent)



---

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)