72 lines
2.9 KiB
C#
72 lines
2.9 KiB
C#
// SPDX-License-Identifier: MIT
|
|
|
|
using GaussianSplatting.Runtime;
|
|
using Unity.Collections.LowLevel.Unsafe;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace GaussianSplatting.Editor
|
|
{
|
|
[CustomEditor(typeof(GaussianSplatAsset))]
|
|
[CanEditMultipleObjects]
|
|
public class GaussianSplatAssetEditor : UnityEditor.Editor
|
|
{
|
|
public override void OnInspectorGUI()
|
|
{
|
|
var gs = target as GaussianSplatAsset;
|
|
if (!gs)
|
|
return;
|
|
|
|
using var _ = new EditorGUI.DisabledScope(true);
|
|
|
|
if (targets.Length == 1)
|
|
SingleAssetGUI(gs);
|
|
else
|
|
{
|
|
int totalCount = 0;
|
|
foreach (var tgt in targets)
|
|
{
|
|
var gss = tgt as GaussianSplatAsset;
|
|
if (gss)
|
|
{
|
|
totalCount += gss.splatCount;
|
|
}
|
|
}
|
|
EditorGUILayout.TextField("Total Splats", $"{totalCount:N0}");
|
|
}
|
|
}
|
|
|
|
static void SingleAssetGUI(GaussianSplatAsset gs)
|
|
{
|
|
var splatCount = gs.splatCount;
|
|
EditorGUILayout.TextField("Splats", $"{splatCount:N0}");
|
|
var prevBackColor = GUI.backgroundColor;
|
|
if (gs.formatVersion != GaussianSplatAsset.kCurrentVersion)
|
|
GUI.backgroundColor *= Color.red;
|
|
EditorGUILayout.IntField("Version", gs.formatVersion);
|
|
GUI.backgroundColor = prevBackColor;
|
|
|
|
long sizePos = gs.posData != null ? gs.posData.dataSize : 0;
|
|
long sizeOther = gs.otherData != null ? gs.otherData.dataSize : 0;
|
|
long sizeCol = gs.colorData != null ? gs.colorData.dataSize : 0;
|
|
long sizeSH = GaussianSplatAsset.CalcSHDataSize(gs.splatCount, gs.shFormat);
|
|
long sizeChunk = gs.chunkData != null ? gs.chunkData.dataSize : 0;
|
|
|
|
EditorGUILayout.TextField("Memory", EditorUtility.FormatBytes(sizePos + sizeOther + sizeSH + sizeCol + sizeChunk));
|
|
EditorGUI.indentLevel++;
|
|
EditorGUILayout.TextField("Positions", $"{EditorUtility.FormatBytes(sizePos)} ({gs.posFormat})");
|
|
EditorGUILayout.TextField("Other", $"{EditorUtility.FormatBytes(sizeOther)} ({gs.scaleFormat})");
|
|
EditorGUILayout.TextField("Base color", $"{EditorUtility.FormatBytes(sizeCol)} ({gs.colorFormat})");
|
|
EditorGUILayout.TextField("SHs", $"{EditorUtility.FormatBytes(sizeSH)} ({gs.shFormat})");
|
|
EditorGUILayout.TextField("Chunks",
|
|
$"{EditorUtility.FormatBytes(sizeChunk)} ({UnsafeUtility.SizeOf<GaussianSplatAsset.ChunkInfo>()} B/chunk)");
|
|
EditorGUI.indentLevel--;
|
|
|
|
EditorGUILayout.Vector3Field("Bounds Min", gs.boundsMin);
|
|
EditorGUILayout.Vector3Field("Bounds Max", gs.boundsMax);
|
|
|
|
EditorGUILayout.TextField("Data Hash", gs.dataHash.ToString());
|
|
}
|
|
}
|
|
}
|