You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
210 lines
9.7 KiB
210 lines
9.7 KiB
using System;
|
|
#if UNITY_EDITOR
|
|
using UnityEditor;
|
|
#endif
|
|
|
|
namespace UnityEngine.Rendering.UnifiedRayTracing
|
|
{
|
|
[Scripting.APIUpdating.MovedFrom(
|
|
autoUpdateAPI: true,
|
|
sourceNamespace: "UnityEngine.Rendering.UnifiedRayTracing",
|
|
sourceAssembly: "Unity.Rendering.LightTransport.Runtime"
|
|
)]
|
|
[Serializable]
|
|
[SupportedOnRenderPipeline()]
|
|
[Categorization.CategoryInfo(Name = "R: Unified Ray Tracing", Order = 1000), HideInInspector]
|
|
internal class RayTracingRenderPipelineResources : IRenderPipelineResources
|
|
{
|
|
[SerializeField, HideInInspector] int m_Version = 1;
|
|
|
|
public int version
|
|
{
|
|
get => m_Version;
|
|
}
|
|
|
|
[SerializeField, ResourcePath("Runtime/UnifiedRayTracing/Common/GeometryPool/GeometryPoolKernels.compute")]
|
|
ComputeShader m_GeometryPoolKernels;
|
|
|
|
[SerializeField, ResourcePath("Runtime/UnifiedRayTracing/Common/Utilities/CopyBuffer.compute")]
|
|
ComputeShader m_CopyBuffer;
|
|
|
|
[SerializeField, ResourcePath("Runtime/UnifiedRayTracing/Compute/RadeonRays/kernels/copyPositions.compute")]
|
|
ComputeShader m_CopyPositions;
|
|
|
|
[SerializeField, ResourcePath("Runtime/UnifiedRayTracing/Compute/RadeonRays/kernels/bit_histogram.compute")]
|
|
ComputeShader m_BitHistogram;
|
|
|
|
[SerializeField, ResourcePath("Runtime/UnifiedRayTracing/Compute/RadeonRays/kernels/block_reduce_part.compute")]
|
|
ComputeShader m_BlockReducePart;
|
|
|
|
[SerializeField, ResourcePath("Runtime/UnifiedRayTracing/Compute/RadeonRays/kernels/block_scan.compute")]
|
|
ComputeShader m_BlockScan;
|
|
|
|
[SerializeField, ResourcePath("Runtime/UnifiedRayTracing/Compute/RadeonRays/kernels/build_hlbvh.compute")]
|
|
ComputeShader m_BuildHlbvh;
|
|
|
|
[SerializeField, ResourcePath("Runtime/UnifiedRayTracing/Compute/RadeonRays/kernels/restructure_bvh.compute")]
|
|
ComputeShader m_RestructureBvh;
|
|
|
|
[SerializeField, ResourcePath("Runtime/UnifiedRayTracing/Compute/RadeonRays/kernels/scatter.compute")]
|
|
ComputeShader m_Scatter;
|
|
|
|
public ComputeShader GeometryPoolKernels
|
|
{
|
|
get => m_GeometryPoolKernels;
|
|
set => this.SetValueAndNotify(ref m_GeometryPoolKernels, value, nameof(m_GeometryPoolKernels));
|
|
}
|
|
|
|
public ComputeShader CopyBuffer
|
|
{
|
|
get => m_CopyBuffer;
|
|
set => this.SetValueAndNotify(ref m_CopyBuffer, value, nameof(m_CopyBuffer));
|
|
}
|
|
|
|
public ComputeShader CopyPositions
|
|
{
|
|
get => m_CopyPositions;
|
|
set => this.SetValueAndNotify(ref m_CopyPositions, value, nameof(m_CopyPositions));
|
|
}
|
|
|
|
public ComputeShader BitHistogram
|
|
{
|
|
get => m_BitHistogram;
|
|
set => this.SetValueAndNotify(ref m_BitHistogram, value, nameof(m_BitHistogram));
|
|
}
|
|
|
|
public ComputeShader BlockReducePart
|
|
{
|
|
get => m_BlockReducePart;
|
|
set => this.SetValueAndNotify(ref m_BlockReducePart, value, nameof(m_BlockReducePart));
|
|
}
|
|
|
|
public ComputeShader BlockScan
|
|
{
|
|
get => m_BlockScan;
|
|
set => this.SetValueAndNotify(ref m_BlockScan, value, nameof(m_BlockScan));
|
|
}
|
|
|
|
public ComputeShader BuildHlbvh
|
|
{
|
|
get => m_BuildHlbvh;
|
|
set => this.SetValueAndNotify(ref m_BuildHlbvh, value, nameof(m_BuildHlbvh));
|
|
}
|
|
|
|
public ComputeShader RestructureBvh
|
|
{
|
|
get => m_RestructureBvh;
|
|
set => this.SetValueAndNotify(ref m_RestructureBvh, value, nameof(m_RestructureBvh));
|
|
}
|
|
|
|
public ComputeShader Scatter
|
|
{
|
|
get => m_Scatter;
|
|
set => this.SetValueAndNotify(ref m_Scatter, value, nameof(m_Scatter));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Utility shaders needed by a <see cref="RayTracingContext"/> to operate.
|
|
/// </summary>
|
|
public class RayTracingResources
|
|
{
|
|
internal ComputeShader geometryPoolKernels { get; set; }
|
|
internal ComputeShader copyBuffer { get; set; }
|
|
internal ComputeShader copyPositions { get; set; }
|
|
internal ComputeShader bitHistogram { get; set; }
|
|
internal ComputeShader blockReducePart { get; set; }
|
|
internal ComputeShader blockScan { get; set; }
|
|
internal ComputeShader buildHlbvh { get; set; }
|
|
internal ComputeShader restructureBvh { get; set; }
|
|
internal ComputeShader scatter { get; set; }
|
|
|
|
#if UNITY_EDITOR
|
|
/// <summary>
|
|
/// Intializes the RayTracingResources.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// This API works only in the Unity Editor, not at runtime.
|
|
/// </remarks>
|
|
public void Load()
|
|
{
|
|
const string path = "Packages/com.unity.render-pipelines.core/Runtime/";
|
|
|
|
geometryPoolKernels = AssetDatabase.LoadAssetAtPath<ComputeShader>(path + "UnifiedRayTracing/Common/GeometryPool/GeometryPoolKernels.compute");
|
|
copyBuffer = AssetDatabase.LoadAssetAtPath<ComputeShader>(path + "UnifiedRayTracing/Common/Utilities/CopyBuffer.compute");
|
|
|
|
copyPositions = AssetDatabase.LoadAssetAtPath<ComputeShader>(path + "UnifiedRayTracing/Compute/RadeonRays/kernels/copyPositions.compute");
|
|
bitHistogram = AssetDatabase.LoadAssetAtPath<ComputeShader>(path + "UnifiedRayTracing/Compute/RadeonRays/kernels/bit_histogram.compute");
|
|
blockReducePart = AssetDatabase.LoadAssetAtPath<ComputeShader>(path + "UnifiedRayTracing/Compute/RadeonRays/kernels/block_reduce_part.compute");
|
|
blockScan = AssetDatabase.LoadAssetAtPath<ComputeShader>(path + "UnifiedRayTracing/Compute/RadeonRays/kernels/block_scan.compute");
|
|
buildHlbvh = AssetDatabase.LoadAssetAtPath<ComputeShader>(path + "UnifiedRayTracing/Compute/RadeonRays/kernels/build_hlbvh.compute");
|
|
restructureBvh = AssetDatabase.LoadAssetAtPath<ComputeShader>(path + "UnifiedRayTracing/Compute/RadeonRays/kernels/restructure_bvh.compute");
|
|
scatter = AssetDatabase.LoadAssetAtPath<ComputeShader>(path + "UnifiedRayTracing/Compute/RadeonRays/kernels/scatter.compute");
|
|
}
|
|
#endif
|
|
|
|
#if ENABLE_ASSET_BUNDLE
|
|
/// <summary>
|
|
/// Intializes the RayTracingResources by loading its utility shaders from an AssetBundle.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// The necessary shaders are configured to belong to the unifiedraytracing AssetBundle which can be built by calling <see cref="UnityEditor.BuildPipeline.BuildAssetBundles"/>
|
|
/// </remarks>
|
|
/// <param name="assetBundle">The AssetBundle to load the shaders from.</param>
|
|
public void LoadFromAssetBundle(AssetBundle assetBundle)
|
|
{
|
|
const string path = "Packages/com.unity.render-pipelines.core/Runtime/";
|
|
|
|
geometryPoolKernels = assetBundle.LoadAsset<ComputeShader>(path + "UnifiedRayTracing/Common/GeometryPool/GeometryPoolKernels.compute");
|
|
copyBuffer = assetBundle.LoadAsset<ComputeShader>(path + "UnifiedRayTracing/Common/Utilities/CopyBuffer.compute");
|
|
|
|
copyPositions = assetBundle.LoadAsset<ComputeShader>(path + "UnifiedRayTracing/Compute/RadeonRays/kernels/copyPositions.compute");
|
|
bitHistogram = assetBundle.LoadAsset<ComputeShader>(path + "UnifiedRayTracing/Compute/RadeonRays/kernels/bit_histogram.compute");
|
|
blockReducePart = assetBundle.LoadAsset<ComputeShader>(path + "UnifiedRayTracing/Compute/RadeonRays/kernels/block_reduce_part.compute");
|
|
blockScan = assetBundle.LoadAsset<ComputeShader>(path + "UnifiedRayTracing/Compute/RadeonRays/kernels/block_scan.compute");
|
|
buildHlbvh = assetBundle.LoadAsset<ComputeShader>(path + "UnifiedRayTracing/Compute/RadeonRays/kernels/build_hlbvh.compute");
|
|
restructureBvh = assetBundle.LoadAsset<ComputeShader>(path + "UnifiedRayTracing/Compute/RadeonRays/kernels/restructure_bvh.compute");
|
|
scatter = assetBundle.LoadAsset<ComputeShader>(path + "UnifiedRayTracing/Compute/RadeonRays/kernels/scatter.compute");
|
|
}
|
|
#endif
|
|
|
|
/// <summary>
|
|
/// Intializes the RayTracingResources by loading its utility shaders via GraphicsSettings.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// This method only works in projects that use Scriptable Render Pipeline.
|
|
/// </remarks>
|
|
/// <returns>Whether the resources were successfully loaded.</returns>
|
|
public bool LoadFromRenderPipelineResources()
|
|
{
|
|
if (!GraphicsSettings.TryGetRenderPipelineSettings<RayTracingRenderPipelineResources>(out var rpResources))
|
|
return false;
|
|
|
|
Debug.Assert(rpResources.GeometryPoolKernels != null);
|
|
Debug.Assert(rpResources.CopyBuffer != null);
|
|
Debug.Assert(rpResources.CopyPositions != null);
|
|
Debug.Assert(rpResources.BitHistogram != null);
|
|
Debug.Assert(rpResources.BlockReducePart != null);
|
|
Debug.Assert(rpResources.BlockScan != null);
|
|
Debug.Assert(rpResources.BuildHlbvh != null);
|
|
Debug.Assert(rpResources.RestructureBvh != null);
|
|
Debug.Assert(rpResources.Scatter != null);
|
|
|
|
geometryPoolKernels = rpResources.GeometryPoolKernels;
|
|
copyBuffer = rpResources.CopyBuffer;
|
|
|
|
copyPositions = rpResources.CopyPositions;
|
|
bitHistogram = rpResources.BitHistogram;
|
|
blockReducePart = rpResources.BlockReducePart;
|
|
blockScan = rpResources.BlockScan;
|
|
buildHlbvh = rpResources.BuildHlbvh;
|
|
restructureBvh = rpResources.RestructureBvh;
|
|
scatter = rpResources.Scatter;
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|