Rasagar/Library/PackageCache/com.unity.render-pipelines.high-definition/Editor/Lighting/Reflection/HDReflectionProbeEditor.Gizmos.cs
2024-08-26 23:07:20 +03:00

69 lines
2.8 KiB
C#

using UnityEngine;
using UnityEngine.Rendering.HighDefinition;
namespace UnityEditor.Rendering.HighDefinition
{
sealed partial class HDReflectionProbeEditor
{
static Mesh sphere;
static Material material;
[DrawGizmo(GizmoType.Selected)]
static void DrawSelectedGizmo(ReflectionProbe reflectionProbe, GizmoType gizmoType)
{
var e = (HDReflectionProbeEditor)GetEditorFor(reflectionProbe);
if (e == null)
return;
var mat = Matrix4x4.TRS(reflectionProbe.transform.position, reflectionProbe.transform.rotation, Vector3.one);
var hdprobe = reflectionProbe.GetComponent<HDAdditionalReflectionData>();
InfluenceVolumeUI.DrawGizmos(
hdprobe.influenceVolume,
mat,
InfluenceVolumeUI.HandleType.None,
InfluenceVolumeUI.HandleType.Base | InfluenceVolumeUI.HandleType.Influence
);
if (e.showChromeGizmo)
Gizmos_CapturePoint(reflectionProbe);
}
static void Gizmos_CapturePoint(ReflectionProbe target)
{
if (sphere == null)
sphere = Resources.GetBuiltinResource<Mesh>("New-Sphere.fbx");
if (material == null)
material = new Material(Shader.Find("Hidden/Debug/ReflectionProbePreview"));
var probe = target.GetComponent<HDAdditionalReflectionData>();
var probePositionSettings = ProbeCapturePositionSettings.ComputeFrom(probe, null);
HDRenderUtilities.ComputeCameraSettingsFromProbeSettings(
probe.settings, probePositionSettings,
out _, out var cameraPositionSettings, 0
);
var capturePosition = cameraPositionSettings.position;
material.SetTexture("_Cubemap", probe.texture);
material.SetPass(0);
Graphics.DrawMeshNow(sphere, Matrix4x4.TRS(capturePosition, Quaternion.identity, Vector3.one * capturePointPreviewSize));
var ray = new Ray(capturePosition, Vector3.down);
if (Physics.Raycast(ray, out RaycastHit hit))
{
var startPoint = capturePosition - 0.5f * capturePointPreviewSize * Vector3.up;
var c = InfluenceVolumeUI.k_GizmoThemeColorBase;
c.a = 0.8f;
Handles.color = c;
Handles.zTest = UnityEngine.Rendering.CompareFunction.LessEqual;
Handles.DrawLine(startPoint, hit.point);
Handles.DrawWireDisc(hit.point, hit.normal, 0.5f);
c.a = 0.25f;
Handles.color = c;
Handles.zTest = UnityEngine.Rendering.CompareFunction.Greater;
Handles.DrawLine(capturePosition, hit.point);
Handles.DrawWireDisc(hit.point, hit.normal, 0.5f);
}
}
}
}