Rasagar/Library/PackageCache/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Settings.md
2024-08-26 23:07:20 +03:00

68 lines
2.5 KiB
Markdown

# Set global ray-tracing parameters
1. In the Scene or Hierarchy view, select a GameObject that contains a Volume component to view it in the Inspector.
2. In the Inspector, navigate to **Add Override > Ray Tracing** and click on **Ray Tracing Settings**.
For more information about the ray tracing settings properties, refer to [Ray Tracing Settings reference](reference-ray-tracing-settings.md).
## Add objects to the Ray Tracing Acceleration Structure
HDRP provides a utility function that adds objects to the ray tracing acceleration structure.
The function is `AddInstanceToRAS` and it takes a [Renderer](https://docs.unity3d.com/ScriptReference/Renderer.html)) a `HDEffectsParameters` parameter and two a booleans that tracks changes in the transform and material properties of the included game objects.
```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Experimental.Rendering;
using UnityEngine.Rendering;
using UnityEngine.Rendering.HighDefinition;
public class ManualRTASManager : MonoBehaviour
{
RayTracingAccelerationStructure rtas = null;
public List<GameObject> gameObjects = new List<GameObject>();
void Update()
{
HDRenderPipeline hdrp = RenderPipelineManager.currentPipeline is HDRenderPipeline ? (HDRenderPipeline)RenderPipelineManager.currentPipeline : null;
if (hdrp != null && rtas != null)
{
// Get the HDCamera for the current camera
var hdCamera = HDCamera.GetOrCreate(GetComponent<Camera>());
// Evaluate the effect params
HDEffectsParameters hdEffectParams = HDRenderPipeline.EvaluateEffectsParameters(hdCamera, true, false);
// Clear the contents of rtas from the previous frame
rtas.ClearInstances();
// Add all the objects individually
int numGameObjects = gameObjects.Count;
for (int i = 0; i < numGameObjects; ++i)
HDRenderPipeline.AddInstanceToRAS(rtas, gameObjects[i].GetComponent<Renderer>(), hdEffectParams, ref hdCamera.transformsDirty, ref hdCamera.materialsDirty);
// Build the RTAS
rtas.Build(transform.position);
// Assign it to the camera
hdCamera.rayTracingAccelerationStructure = rtas;
}
}
void Start()
{
if (rtas == null)
rtas = new RayTracingAccelerationStructure();
}
void OnDestroy()
{
if (rtas != null)
rtas.Dispose();
}
}
```