WuhuIslandTesting/Library/PackageCache/com.stresslevelzero.static-batching@1.0.1/editor/EditorMeshSettings.cs
2025-01-07 02:06:59 +01:00

103 lines
4.3 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.Build;
using UnityEngine;
using static SLZ.CustomStaticBatching.PackedChannel;
namespace SLZ.CustomStaticBatching
{
[Serializable]
public class EditorCombineRendererSettings
{
public string buildTarget;
public bool overrideBuildTarget;
public CombineRendererSettings settings;
public EditorCombineRendererSettings(string target = "Default")
{
this.buildTarget = target;
overrideBuildTarget = false;
settings = new CombineRendererSettings(false);
}
static SerializedObject GetProjectSettingsAsset()
{
const string projectSettingsAssetPath = "ProjectSettings/ProjectSettings.asset";
UnityEngine.Object projSettingsObj = AssetDatabase.LoadMainAssetAtPath(projectSettingsAssetPath);
if (projSettingsObj == null)
{
return null;
}
else
{
SerializedObject projectSettings = new SerializedObject(AssetDatabase.LoadMainAssetAtPath(projectSettingsAssetPath));
return projectSettings;
}
}
public static CombineRendererSettings ApplyProjectSettingsCompression(EditorCombineRendererSettings crs)
{
SerializedObject projectSettings = GetProjectSettingsAsset();
CombineRendererSettings outp = crs.settings;
int vertexCompressionFlags = 0;
if (projectSettings == null)
{
Debug.LogError("Custom Static Batching: Could not find ProjectSettings.asset, will assume all channels are uncompressed");
}
else
{
SerializedProperty vertexCompression = projectSettings.FindProperty("VertexChannelCompressionMask");
if (vertexCompression == null)
{
Debug.LogError("Custom Static Batching: Could not find VertexChannelCompressionMask in ProjectSettings.asset, will assume all channels are uncompressed");
}
else
{
vertexCompressionFlags = vertexCompression.intValue;
}
}
outp.serializedVtxFormats = new byte[NUM_VTX_CHANNELS];
outp.altStream = new bool[NUM_VTX_CHANNELS];
crs.settings.altStream.CopyTo(outp.altStream, 0);
outp.serializedVtxFormats[0] = crs.settings.serializedVtxFormats[0] != 0 ?
crs.settings.serializedVtxFormats[0] :
(vertexCompressionFlags & (int)VertexChannelCompressionFlags.Position) == 0 ? (byte)VtxFormats.Float32 : (byte)VtxFormats.Float16;
outp.serializedVtxFormats[1] = crs.settings.serializedVtxFormats[1] != 0 ?
crs.settings.serializedVtxFormats[1] :
(vertexCompressionFlags & (int)VertexChannelCompressionFlags.Normal) == 0 ? (byte)VtxFormats.Float32 : (byte)VtxFormats.Float16;
outp.serializedVtxFormats[2] = crs.settings.serializedVtxFormats[2] != 0 ?
crs.settings.serializedVtxFormats[2] :
(vertexCompressionFlags & (int)VertexChannelCompressionFlags.Tangent) == 0 ? (byte)VtxFormats.Float32 : (byte)VtxFormats.Float16;
outp.serializedVtxFormats[3] = crs.settings.serializedVtxFormats[3] != 0 ?
crs.settings.serializedVtxFormats[3] :
(vertexCompressionFlags & (int)VertexChannelCompressionFlags.Color) == 0 ? (byte)VtxFormats.Float32 : (byte)VtxFormats.UNorm8;
outp.serializedVtxFormats[4] = crs.settings.serializedVtxFormats[4] != 0 ?
crs.settings.serializedVtxFormats[4] :
(vertexCompressionFlags & (int)VertexChannelCompressionFlags.TexCoord0) == 0 ? (byte)VtxFormats.Float32 : (byte)VtxFormats.Float16;
outp.serializedVtxFormats[5] = crs.settings.serializedVtxFormats[5] != 0 ?
crs.settings.serializedVtxFormats[5] :
(vertexCompressionFlags & (int)VertexChannelCompressionFlags.TexCoord1) == 0 ? (byte)VtxFormats.Float32 : (byte)VtxFormats.Float16;
outp.serializedVtxFormats[6] = crs.settings.serializedVtxFormats[6] != 0 ?
crs.settings.serializedVtxFormats[6] :
(vertexCompressionFlags & (int)VertexChannelCompressionFlags.TexCoord2) == 0 ? (byte)VtxFormats.Float32 : (byte)VtxFormats.Float16;
outp.serializedVtxFormats[7] = crs.settings.serializedVtxFormats[7] != 0 ?
crs.settings.serializedVtxFormats[7] :
(vertexCompressionFlags & (int)VertexChannelCompressionFlags.TexCoord3) == 0 ? (byte)VtxFormats.Float32 : (byte)VtxFormats.Float16;
int numVtxChannels = outp.serializedVtxFormats.Length;
for (int i = 8; i < numVtxChannels; i++)
{
outp.serializedVtxFormats[i] = crs.settings.serializedVtxFormats[i] != 0 ?
crs.settings.serializedVtxFormats[i] : (byte)VtxFormats.Float32;
}
return outp;
}
}
}