Files
Bombaleila/Library/PackageCache/com.unity.render-pipelines.universal@37e0d4fc2503/Editor/RendererFeatures/SurfaceCacheGlobalIlluminationEditor.cs
2026-03-03 00:39:30 +05:00

180 lines
12 KiB
C#

#if SURFACE_CACHE
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
namespace UnityEditor.Rendering.Universal
{
[CustomEditor(typeof(SurfaceCacheGlobalIlluminationRendererFeature))]
internal class SurfaceCacheGlobalIlluminationEditor : Editor
{
private bool m_IsInitialized;
private SerializedProperty _uniformEstimationSampleCount;
private SerializedProperty _restirEstimationConfidenceCap;
private SerializedProperty _restirEstimationSpatialSampleCount;
private SerializedProperty _restirEstimationSpatialFilterSize;
private SerializedProperty _restirEstimationValidationFrameInterval;
private SerializedProperty _risEstimationCandidateCount;
private SerializedProperty _risEstimationTargetFunctionUpdateWeight;
private SerializedProperty _multiBounce;
private SerializedProperty _estimationMethod;
private SerializedProperty _temporalSmoothing;
private SerializedProperty _spatialFilterEnabled;
private SerializedProperty _spatialFilterSampleCount;
private SerializedProperty _spatialFilterRadius;
private SerializedProperty _temporalPostFilterEnabled;
private SerializedProperty _lookupSampleCount;
private SerializedProperty _upsamplingKernelSize;
private SerializedProperty _upsamplingSampleCount;
private SerializedProperty _gridSize;
private SerializedProperty _voxelMinSize;
private SerializedProperty _cascadeCount;
private SerializedProperty _cascadeMovement;
private SerializedProperty _debugEnabled;
private SerializedProperty _debugViewMode;
private SerializedProperty _debugShowSamplePosition;
private struct TextContent
{
public static GUIContent UniformEstimationSampleCount = EditorGUIUtility.TrTextContent("Sample Count", "");
public static GUIContent RestirEstimationConfidenceCap = EditorGUIUtility.TrTextContent("Confidence Cap", "");
public static GUIContent RestirEstimationSpatialSampleCount = EditorGUIUtility.TrTextContent("Spatial Sample Count", "");
public static GUIContent RestirEstimationSpatialFilterSize = EditorGUIUtility.TrTextContent("Spatial Filter Size", "");
public static GUIContent RestirEstimationValidationFrameInterval = EditorGUIUtility.TrTextContent("Validation Frame Interval", "");
public static GUIContent RisEstimationCandidateCount = EditorGUIUtility.TrTextContent("Candidate Count", "");
public static GUIContent RisEstimationTargetFunctionUpdateWeight = EditorGUIUtility.TrTextContent("Target Function Update Weight", "");
public static GUIContent MultiBounce = EditorGUIUtility.TrTextContent("Multi Bounce", "");
public static GUIContent EstimationMethod = EditorGUIUtility.TrTextContent("Estimation Method", "");
public static GUIContent TemporalSmoothing = EditorGUIUtility.TrTextContent("Temporal Smoothing", "");
public static GUIContent SpatialFilterEnabled = EditorGUIUtility.TrTextContent("Spatial Filter Enabled", "");
public static GUIContent SpatialFilterSampleCount = EditorGUIUtility.TrTextContent("Spatial Sample Count", "");
public static GUIContent SpatialFilterRadius = EditorGUIUtility.TrTextContent("Spatial Radius", "");
public static GUIContent TemporalPostFilterEnabled = EditorGUIUtility.TrTextContent("Temporal Post Filter Enabled", "");
public static GUIContent LookupSampleCount = EditorGUIUtility.TrTextContent("Lookup Sample Count", "");
public static GUIContent UpsamplingKernelSize = EditorGUIUtility.TrTextContent("Upsampling Kernel Size", "");
public static GUIContent UpsamplingSampleCount = EditorGUIUtility.TrTextContent("Upsampling Sample Count", "");
public static GUIContent GridSize = EditorGUIUtility.TrTextContent("Grid Size", "");
public static GUIContent VoxelMinSize = EditorGUIUtility.TrTextContent("Voxel Min Size", "");
public static GUIContent CascadeCount = EditorGUIUtility.TrTextContent("Cascade Count", "");
public static GUIContent CascadeMovement = EditorGUIUtility.TrTextContent("Cascade Movement", "");
public static GUIContent DebugEnabled = EditorGUIUtility.TrTextContent("Debug Enabled", "");
public static GUIContent DebugViewMode = EditorGUIUtility.TrTextContent("Debug View Mode", "");
public static GUIContent DebugShowSamplePosition = EditorGUIUtility.TrTextContent("Debug Show Sample Position", "");
}
private void Init()
{
SerializedProperty paramSet = serializedObject.FindProperty("_parameterSet");
SerializedProperty uniformParamSet = paramSet.FindPropertyRelative("UniformEstimationParams");
SerializedProperty restirParamSet = paramSet.FindPropertyRelative("RestirEstimationParams");
SerializedProperty risParamSet = paramSet.FindPropertyRelative("RisEstimationParams");
SerializedProperty patchFilteringParamSet = paramSet.FindPropertyRelative("PatchFilteringParams");
SerializedProperty screenFilteringParamSet = paramSet.FindPropertyRelative("ScreenFilteringParams");
SerializedProperty gridParamSet = paramSet.FindPropertyRelative("GridParams");
_multiBounce = paramSet.FindPropertyRelative("MultiBounce");
_estimationMethod = paramSet.FindPropertyRelative("EstimationMethod");
_uniformEstimationSampleCount = uniformParamSet.FindPropertyRelative("SampleCount");
_restirEstimationConfidenceCap = restirParamSet.FindPropertyRelative("ConfidenceCap");
_restirEstimationSpatialSampleCount = restirParamSet.FindPropertyRelative("SpatialSampleCount");
_restirEstimationSpatialFilterSize = restirParamSet.FindPropertyRelative("SpatialFilterSize");
_restirEstimationValidationFrameInterval = restirParamSet.FindPropertyRelative("ValidationFrameInterval");
_risEstimationCandidateCount = risParamSet.FindPropertyRelative("CandidateCount");
_risEstimationTargetFunctionUpdateWeight = risParamSet.FindPropertyRelative("TargetFunctionUpdateWeight");
_temporalSmoothing = patchFilteringParamSet.FindPropertyRelative("TemporalSmoothing");
_spatialFilterEnabled = patchFilteringParamSet.FindPropertyRelative("SpatialFilterEnabled");
_spatialFilterSampleCount = patchFilteringParamSet.FindPropertyRelative("SpatialFilterSampleCount");
_spatialFilterRadius = patchFilteringParamSet.FindPropertyRelative("SpatialFilterRadius");
_temporalPostFilterEnabled = patchFilteringParamSet.FindPropertyRelative("TemporalPostFilterEnabled");
_lookupSampleCount = screenFilteringParamSet.FindPropertyRelative("LookupSampleCount");
_upsamplingKernelSize = screenFilteringParamSet.FindPropertyRelative("UpsamplingKernelSize");
_upsamplingSampleCount = screenFilteringParamSet.FindPropertyRelative("UpsamplingSampleCount");
_gridSize = gridParamSet.FindPropertyRelative("GridSize");
_voxelMinSize = gridParamSet.FindPropertyRelative("VoxelMinSize");
_cascadeCount = gridParamSet.FindPropertyRelative("CascadeCount");
_cascadeMovement = gridParamSet.FindPropertyRelative("CascadeMovement");
_debugEnabled = paramSet.FindPropertyRelative("DebugEnabled");
_debugViewMode = paramSet.FindPropertyRelative("DebugViewMode");
_debugShowSamplePosition = paramSet.FindPropertyRelative("DebugShowSamplePosition");
}
public override void OnInspectorGUI()
{
if (!m_IsInitialized)
Init();
if (SceneView.lastActiveSceneView && !SceneView.lastActiveSceneView.sceneViewState.alwaysRefreshEnabled)
{
EditorGUILayout.HelpBox("Enable \"Always Refresh\" in the Scene View to see realtime updates in the Scene View.", MessageType.Info);
}
EditorGUILayout.LabelField("Light Transport", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(_multiBounce, TextContent.MultiBounce);
EditorGUILayout.PropertyField(_estimationMethod, TextContent.EstimationMethod);
if (_estimationMethod.intValue == (int)SurfaceCacheEstimationMethod.Uniform)
{
EditorGUILayout.Space();
EditorGUILayout.LabelField("Uniform Estimation", EditorStyles.boldLabel);
EditorGUILayout.IntSlider(_uniformEstimationSampleCount, 1, 32, TextContent.UniformEstimationSampleCount);
}
else if (_estimationMethod.intValue == (int)SurfaceCacheEstimationMethod.Restir)
{
EditorGUILayout.Space();
EditorGUILayout.LabelField("Restir Estimation", EditorStyles.boldLabel);
EditorGUILayout.IntSlider(_restirEstimationConfidenceCap, 1, 64, TextContent.RestirEstimationConfidenceCap);
EditorGUILayout.IntSlider(_restirEstimationSpatialSampleCount, 0, 8, TextContent.RestirEstimationSpatialSampleCount);
EditorGUILayout.Slider(_restirEstimationSpatialFilterSize, 0.0f, 4.0f, TextContent.RestirEstimationSpatialFilterSize);
EditorGUILayout.IntSlider(_restirEstimationValidationFrameInterval, 2, 8, TextContent.RestirEstimationValidationFrameInterval);
}
else if (_estimationMethod.intValue == (int)SurfaceCacheEstimationMethod.Ris)
{
EditorGUILayout.Space();
EditorGUILayout.LabelField("SH-Guided Ris Estimation", EditorStyles.boldLabel);
EditorGUILayout.IntSlider(_risEstimationCandidateCount, 2, 64, TextContent.RisEstimationCandidateCount);
EditorGUILayout.Slider(_risEstimationTargetFunctionUpdateWeight, 0.0f, 1.0f, TextContent.RisEstimationTargetFunctionUpdateWeight);
}
EditorGUILayout.Space();
EditorGUILayout.LabelField("Patch Filtering", EditorStyles.boldLabel);
EditorGUILayout.Slider(_temporalSmoothing, 0.0f, 1.0f, TextContent.TemporalSmoothing);
EditorGUILayout.PropertyField(_spatialFilterEnabled, TextContent.SpatialFilterEnabled);
EditorGUILayout.IntSlider(_spatialFilterSampleCount, 1, 8, TextContent.SpatialFilterSampleCount);
EditorGUILayout.Slider(_spatialFilterRadius, 0.1f, 4.0f, TextContent.SpatialFilterRadius);
EditorGUILayout.PropertyField(_temporalPostFilterEnabled, TextContent.TemporalPostFilterEnabled);
EditorGUILayout.Space();
EditorGUILayout.LabelField("Screen Filtering", EditorStyles.boldLabel);
EditorGUILayout.IntSlider(_lookupSampleCount, 0, 8, TextContent.LookupSampleCount);
EditorGUILayout.Slider(_upsamplingKernelSize, 0.0f, 8.0f, TextContent.UpsamplingKernelSize);
EditorGUILayout.IntSlider(_upsamplingSampleCount, 1, 16, TextContent.UpsamplingSampleCount);
EditorGUILayout.Space();
EditorGUILayout.LabelField("Grid", EditorStyles.boldLabel);
EditorGUILayout.IntSlider(_gridSize, 16, 64, TextContent.GridSize);
EditorGUILayout.Slider(_voxelMinSize, 0.1f, 2.0f, TextContent.VoxelMinSize);
EditorGUILayout.IntSlider(_cascadeCount, 1, (int)SurfaceCache.CascadeMax, TextContent.CascadeCount);
EditorGUILayout.PropertyField(_cascadeMovement, TextContent.CascadeMovement);
EditorGUILayout.Space();
EditorGUILayout.LabelField("Debugging", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(_debugEnabled, TextContent.DebugEnabled);
EditorGUILayout.PropertyField(_debugViewMode, TextContent.DebugViewMode);
EditorGUILayout.PropertyField(_debugShowSamplePosition, TextContent.DebugShowSamplePosition);
}
}
}
#endif