# keywordSpace

> The local keyword space of this ray tracing shader.

## Definition

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

```csharp
public LocalKeywordSpace keywordSpace { get; }
```

### Remarks

Shader keywords determine which shader variants Unity uses. For information on working with [local shader keywords](/engine/6000.7/script-reference/unityengine/rendering/localkeyword.md) and [global shader keywords](/engine/6000.7/script-reference/unityengine/rendering/globalkeyword.md) and how they interact, see [Using shader keywords with C# scripts](/engine/6000.7/manual/materials-and-shaders/shaders/writing-custom/shader-writing/sl-multiple-program-variants/shader-keywords-scripts.md).

`keywordSpace` represents all keywords declared in the source file for a ray tracing shader. For information about declaring and using shader keywords in shader source files, see [Shader keywords](/engine/6000.7/manual/materials-and-shaders/shaders/writing-custom/shader-writing/sl-multiple-program-variants/shader-keywords.md).

This example iterates over the local shader keywords in the local keyword space for a ray tracing shader. It determines whether they are overridden by a global shader keyword, and prints their state.

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

public class Example : MonoBehaviour
{
    public RayTracingShader rayTracingShader;

    void Start()
    {
        CheckShaderKeywordState();
    }

    void CheckShaderKeywordState()
    {
        // Get all the local keywords that affect the ray tracing shader
        var keywordSpace = rayTracingShader.keywordSpace;

        // Iterate over the local keywords
        foreach (var localKeyword in keywordSpace.keywords)
        {
            // If the local keyword is overridable,
            // and a global keyword with the same name exists and is enabled,
            // then Unity uses the global keyword state
            if (localKeyword.isOverridable && Shader.IsKeywordEnabled(localKeyword.name))
            {
                Debug.Log("Local keyword with name of " + localKeyword.name + " is overridden by a global keyword, and is enabled");
            }
            // Otherwise, Unity uses the local keyword state
            else
            {
                var state = rayTracingShader.IsKeywordEnabled(localKeyword) ? "enabled" : "disabled";
                Debug.Log("Local keyword with name of " + localKeyword.name + " is " + state);
            }
        }
    }
}
```

Additional Resources: Shader variants and keywords, [LocalKeyword](/engine/6000.7/script-reference/unityengine/rendering/localkeyword.md), [GlobalKeyword](/engine/6000.7/script-reference/unityengine/rendering/globalkeyword.md), [RayTracingShader.EnableKeyword](/engine/6000.7/script-reference/unityengine/rendering/raytracingshader/enablekeyword.md), [RayTracingShader.DisableKeyword](/engine/6000.7/script-reference/unityengine/rendering/raytracingshader/disablekeyword.md), [RayTracingShader.SetKeyword](/engine/6000.7/script-reference/unityengine/rendering/raytracingshader/setkeyword.md), [RayTracingShader.IsKeywordEnabled](/engine/6000.7/script-reference/unityengine/rendering/raytracingshader/iskeywordenabled.md), [RayTracingShader.enabledKeywords](/engine/6000.7/script-reference/unityengine/rendering/raytracingshader/enabledkeywords.md), [RayTracingShader.shaderKeywords](/engine/6000.7/script-reference/unityengine/rendering/raytracingshader/shaderkeywords.md).
