# RayTracingAccelerationStructure.BuildSettings

> Contains options for building a RayTracingAccelerationStructure.

## Definition

* **Type:** Struct
* **Namespace:** [UnityEngine.Rendering](/engine/6000.0/script-reference/unityengine/rendering.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
public struct RayTracingAccelerationStructure.BuildSettings
```

## Remarks

This struct packages together parameters for the [CommandBuffer.BuildRayTracingAccelerationStructure](/engine/6000.0/script-reference/unityengine/rendering/commandbuffer/buildraytracingaccelerationstructure.md) and [RayTracingAccelerationStructure.Build](/engine/6000.0/script-reference/unityengine/rendering/raytracingaccelerationstructure/build.md) methods. Use the different parameters to control or optimize how Unity builds the acceleration structure.

```csharp
using UnityEngine;
using UnityEngine.Rendering;

public class RayTracingManager : MonoBehaviour
{
    // References to renderers that will be ray traced
    public Renderer[] sceneRenderers;

    private RayTracingAccelerationStructure rtas;
    private bool isInitialized = false;

    void Start()
    {
        InitializeRayTracing();
    }

    void OnDestroy()
    {
        // Clean up acceleration structure
        if (rtas != null)
        {
            rtas.Dispose();
            rtas = null;
        }
    }

    void Update()
    {
        if (!isInitialized || rtas == null)
            return;

        // Rebuild acceleration structure each frame to handle dynamic objects
        UpdateAccelerationStructure();
    }

    private void BuildAccelerationStructure()
    {
        if (Camera.main == null)
            return;

        var buildSettings = new RayTracingAccelerationStructure.BuildSettings(
            // Build the acceleration structure for maximum ray tracing performance...
            RayTracingAccelerationStructureBuildFlags.PreferFastTrace,
            // ...and with camera-relative ray tracing.
            Camera.main.transform.position
        );

        rtas.Build(buildSettings);
    }

    private void InitializeRayTracing()
    {
        if (sceneRenderers == null || sceneRenderers.Length == 0)
        {
            Debug.LogError("ERROR: No renderers assigned for ray tracing.");
            return;
        }

        // Create acceleration structure
        rtas = new RayTracingAccelerationStructure();

        // Configure submesh flags
        RayTracingSubMeshFlags[] subMeshFlags = new RayTracingSubMeshFlags[1];
        subMeshFlags[0] = RayTracingSubMeshFlags.Enabled | RayTracingSubMeshFlags.ClosestHitOnly;

        // Add all renderers to acceleration structure
        foreach (var renderer in sceneRenderers)
        {
            if (renderer != null)
            {
                rtas.AddInstance(
                    renderer,          // Renderer to add
                    subMeshFlags,      // Hit shader setup
                    true,              // Disable triangle culling
                    false,             // Consider front triangles as clockwise relative to the ray direction
                    0xff,              // Instance mask (all bits set)
                    0                  // Layer value
                );
            }
        }

        // Perform initial build
        BuildAccelerationStructure();
        isInitialized = true;
    }

    private void UpdateAccelerationStructure()
    {
        // Update transform of all instances
        foreach (var renderer in sceneRenderers)
        {
            if (renderer != null)
            {
                rtas.UpdateInstanceTransform(renderer);
            }
        }

        // Rebuild the structure
        BuildAccelerationStructure();
    }
}
```

Additional Resources:: [RayTracingAccelerationStructure.Build](/engine/6000.0/script-reference/unityengine/rendering/raytracingaccelerationstructure/build.md), [CommandBuffer.BuildRayTracingAccelerationStructure](/engine/6000.0/script-reference/unityengine/rendering/commandbuffer/buildraytracingaccelerationstructure.md).

## Properties

| Property                                                                                                                                | Description                                                                                                                                                                                                                                                              |
| --------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [buildFlags](/engine/6000.0/script-reference/unityengine/rendering/raytracingaccelerationstructure/buildsettings/buildflags.md)         | The [build flags](/engine/6000.0/script-reference/unityengine/rendering/raytracingaccelerationstructurebuildflags.md) Unity uses to build a [RayTracingAccelerationStructure](/engine/6000.0/script-reference/unityengine/rendering/raytracingaccelerationstructure.md). |
| [relativeOrigin](/engine/6000.0/script-reference/unityengine/rendering/raytracingaccelerationstructure/buildsettings/relativeorigin.md) | The relative origin of ray tracing instances.                                                                                                                                                                                                                            |
