Files
VR-WuKong/Packages/PICO Unity Integration SDK-3.3.2-20251111/Editor/PXR_ARCameraEffectManagerEditor.cs

107 lines
4.6 KiB
C#
Raw Normal View History

2025-11-13 17:40:28 +08:00
using Unity.XR.PXR;
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(PXR_ARCameraEffectManager))]
public class PXR_ARCameraEffectManagerEditor : Editor
{
public override void OnInspectorGUI()
{
PXR_ARCameraEffectManager manager = (PXR_ARCameraEffectManager)target;
PXR_ProjectSetting projectConfig = PXR_ProjectSetting.GetProjectConfig();
var guiContent = new GUIContent();
EditorGUILayout.Space();
EditorGUILayout.BeginHorizontal();
// camera effect
guiContent.text = "Camera Effect";
manager.enableCameraEffect = EditorGUILayout.Toggle(guiContent, manager.enableCameraEffect);
EditorGUILayout.EndHorizontal();
if (manager.enableCameraEffect)
{
EditorGUI.indentLevel++;
guiContent.text = "Colortemp";
manager.colortempValue = EditorGUILayout.Slider(guiContent, manager.colortempValue, -50, 50);
guiContent.text = "Brightness";
manager.brightnessValue = EditorGUILayout.Slider(guiContent, manager.brightnessValue, -50, 50);
guiContent.text = "Saturation";
manager.saturationValue = EditorGUILayout.Slider(guiContent, manager.saturationValue, -50, 50);
guiContent.text = "Contrast";
manager.contrastValue = EditorGUILayout.Slider(guiContent, manager.contrastValue, -50, 50);
EditorGUILayout.LabelField("LUT");
var textureControlRect = EditorGUILayout.GetControlRect(GUILayout.Width(100), GUILayout.Height(100));
manager.lutTex1 = (Texture2D)EditorGUI.ObjectField(new Rect(textureControlRect.x, textureControlRect.y, 100, textureControlRect.height), manager.lutTex1, typeof(Texture), false);
ValidateTexture(manager.lutTex1);
manager.lutTex2 = (Texture2D)EditorGUI.ObjectField(new Rect(textureControlRect.x + textureControlRect.width, textureControlRect.y, textureControlRect.width, textureControlRect.height), manager.lutTex2, typeof(Texture), false);
ValidateTexture(manager.lutTex2);
manager.lutTex3 = (Texture2D)EditorGUI.ObjectField(new Rect(textureControlRect.x + 2*textureControlRect.width, textureControlRect.y, textureControlRect.width, textureControlRect.height), manager.lutTex3, typeof(Texture), false);
ValidateTexture(manager.lutTex3);
manager.lutTex4 = (Texture2D)EditorGUI.ObjectField(new Rect(textureControlRect.x + 3 * textureControlRect.width, textureControlRect.y, textureControlRect.width, textureControlRect.height), manager.lutTex4, typeof(Texture), false);
ValidateTexture(manager.lutTex4);
manager.lutTex5 = (Texture2D)EditorGUI.ObjectField(new Rect(textureControlRect.x + 4 * textureControlRect.width, textureControlRect.y, textureControlRect.width, textureControlRect.height), manager.lutTex5, typeof(Texture), false);
ValidateTexture(manager.lutTex5);
EditorGUI.indentLevel--;
}
Camera camera = manager.gameObject.GetComponent<Camera>();
if (camera)
{
camera.clearFlags = CameraClearFlags.SolidColor;
camera.backgroundColor = new Color(0, 0, 0, 0);
}
if (GUI.changed)
{
EditorUtility.SetDirty(projectConfig);
EditorUtility.SetDirty(manager);
}
serializedObject.ApplyModifiedProperties();
if (GUI.changed)
{
UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(UnityEngine.SceneManagement.SceneManager.GetActiveScene());
}
}
private static void ValidateTexture(Texture2D lutTex)
{
if (lutTex != null)
{
// Validate texture format
if (lutTex.format != TextureFormat.RGBA32)
{
Debug.LogError("Unsupported texture format! Please provide a texture in RGBA32 format.");
lutTex = null; // Reset texture if format is incorrect
}
// Validate texture size
if (lutTex.width > 512 || lutTex.height > 512)
{
Debug.LogError("The texture size must not exceed 512x512 pixels!");
lutTex = null; // Reset texture if size is incorrect
}
// Set read/write flag
if (!lutTex.isReadable)
{
string assetPath = AssetDatabase.GetAssetPath(lutTex);
TextureImporter importer = AssetImporter.GetAtPath(assetPath) as TextureImporter;
if (importer != null)
{
importer.isReadable = true;
AssetDatabase.ImportAsset(assetPath);
}
}
}
}
}