<!--
{
  "documentType" : "article",
  "framework" : "RealityKit",
  "identifier" : "/documentation/RealityKit/low-level-rendering",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "Low-level rendering"
}
-->

# Low-level rendering

Drive the renderer directly to build custom drawing pipelines, meshes, buffers, and textures when higher-level rendering does not give you the control you need.

## Overview

These types give you direct access to the rendering pipeline and the GPU resources that feed it, so you can issue your own draw work and manage how scenes get rendered. Use them to define custom render targets, configure pipeline state, and supply geometry, transforms, buffers, and textures that you control at a fine granularity. This is intended for advanced rendering work where the standard material and mesh APIs are too high level for what you need. Reach for these capabilities when you want precise control over how your 3D content is drawn and how its underlying memory is organized.

## Topics

### Render contexts

[`class LowLevelRenderer`](/documentation/RealityKit/LowLevelRenderer)

A renderer that encodes draw calls for a collection of mesh instances into a
Metal command buffer.

[`protocol LowLevelRenderContext`](/documentation/RealityKit/LowLevelRenderContext)

An entry point for creating rendering resources and compiling materials.

[`protocol LowLevelRenderContextLighting`](/documentation/RealityKit/LowLevelRenderContextLighting)

The interface for creating lighting functions for use in materials.

[`protocol LowLevelRenderContextShaderGraph`](/documentation/RealityKit/LowLevelRenderContextShaderGraph)

The interface for creating Metal shader functions from a ShaderGraph.

[`class LowLevelRenderContextStandalone`](/documentation/RealityKit/LowLevelRenderContextStandalone)

A standalone Metal-backed render context for creating low-level rendering resources.

[`struct LowLevelRenderContextError`](/documentation/RealityKit/LowLevelRenderContextError)

An error thrown when binding or updating a low-level rendering resource fails.

[`struct LowLevelRendererError`](/documentation/RealityKit/LowLevelRendererError)

An error thrown when creating or configuring a renderer.

### Pipeline and render targets

[`class LowLevelRenderPipelineState`](/documentation/RealityKit/LowLevelRenderPipelineState)

A compiled Metal render pipeline state for a specific mesh descriptor, material, and
render target configuration.

[`class LowLevelRenderTarget`](/documentation/RealityKit/LowLevelRenderTarget)

An object that describes the pixel format configuration for a render pass’s color and
depth attachments.

[`class LowLevelArgumentTable`](/documentation/RealityKit/LowLevelArgumentTable)

A table of buffer slices and textures bound to a single shader function.

[`struct LowLevelMaterialParameterMapping`](/documentation/RealityKit/LowLevelMaterialParameterMapping)

A mapping of named buffer and texture parameters to binding indices for a compiled
shader function.

### GPU resources

[`class LowLevelMeshResource`](/documentation/RealityKit/LowLevelMeshResource)

A container for vertex and index data in a custom format.

[`class LowLevelMeshPart`](/documentation/RealityKit/LowLevelMeshPart)

An object that describes a range of primitives to draw from a mesh resource.

[`class LowLevelMeshInstance`](/documentation/RealityKit/LowLevelMeshInstance)

A single drawable object pairing a mesh part with a compiled pipeline state, optional
per-draw argument tables, a transform, and a sort category.

[`class LowLevelMeshInstanceArray`](/documentation/RealityKit/LowLevelMeshInstanceArray)

A fixed-capacity collection of mesh instances submitted to the renderer.

[`class LowLevelInstanceTransformResource`](/documentation/RealityKit/LowLevelInstanceTransformResource)

A GPU-managed buffer that stores an array of per-instance transforms for GPU instancing.

[`class LowLevelBufferResource`](/documentation/RealityKit/LowLevelBufferResource)

A GPU-managed buffer for arbitrary per-draw data such as uniforms and custom parameters.

[`struct LowLevelBufferSlice`](/documentation/RealityKit/LowLevelBufferSlice)

A reference to a sub-range of a buffer resource, used to bind a region of a buffer to an
argument table slot.

[`class LowLevelTextureResource`](/documentation/RealityKit/LowLevelTextureResource)

A container for texture data in a custom format.

[`class LowLevelMaterialResource`](/documentation/RealityKit/LowLevelMaterialResource)

A compiled material composed of three independently-replaceable shader functions.

[`class LowLevelDeviceResource`](/documentation/RealityKit/LowLevelDeviceResource)

Encapsulates a GPU device resource created by the application.
On visionOS, resources must be allocated in shared memory that can be used by the renderer process.
Once a device resource is in use by the renderer, changing its contents is unsafe and undefined.

[`struct BoundingSphereBox`](/documentation/RealityKit/BoundingSphereBox)

A combined bounding volume consisting of a bounding sphere and an optional
axis-aligned bounding box.



---

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)