Files
Zombie/Assets/MeshBaker/scripts/core/MB_IMeshBakerSettings.cs

89 lines
4.7 KiB
C#

using UnityEngine;
namespace DigitalOpus.MB.Core
{
public enum MB_MeshCombineAPIType
{
simpleMeshAPI,
betaNativeArrayAPI
}
public interface MB_IMeshBakerSettingsHolder
{
MB_IMeshBakerSettings GetMeshBakerSettings();
/// <summary>
/// A settings holder could store settings in one of several places. We can't return a
/// SerializedProperty because that would be editor only. Instead we return the parameters
/// needed to construct a serialized property.
/// </summary>
void GetMeshBakerSettingsAsSerializedProperty(out string propertyName, out UnityEngine.Object targetObj);
}
public interface MB_IMeshBakerSettings
{
bool doBlendShapes { get; set; }
bool doCol { get; set; }
bool doNorm { get; set; }
bool doTan { get; set; }
bool doUV { get; set; }
bool doUV3 { get; set; }
bool doUV4 { get; set; }
bool doUV5 { get; set; }
bool doUV6 { get; set; }
bool doUV7 { get; set; }
bool doUV8 { get; set; }
MB2_LightmapOptions lightmapOption { get; set; }
float uv2UnwrappingParamsHardAngle { get; set; }
float uv2UnwrappingParamsPackMargin { get; set; }
bool optimizeAfterBake { get; set; }
MB_MeshPivotLocation pivotLocationType { get; set; }
Vector3 pivotLocation { get; set; }
bool clearBuffersAfterBake { get; set; }
MB_RenderType renderType { get; set; }
bool smrNoExtraBonesWhenCombiningMeshRenderers { get; set; }
bool smrMergeBlendShapesWithSameNames { get; set; }
IAssignToMeshCustomizer assignToMeshCustomizer { get; set; }
MB_MeshCombineAPIType meshAPI { get; set; }
}
public static class MeshBakerSettingsUtility
{
public static MB_MeshVertexChannelFlags GetMeshChannelsAsFlags(MB_IMeshBakerSettings settings, bool doVerts, bool uvsSliceIdx_w)
{
MB_MeshVertexChannelFlags outFlags = (doVerts ? MB_MeshVertexChannelFlags.vertex : MB_MeshVertexChannelFlags.none) |
(settings.doNorm ? MB_MeshVertexChannelFlags.normal : MB_MeshVertexChannelFlags.none) |
(settings.doTan ? MB_MeshVertexChannelFlags.tangent : MB_MeshVertexChannelFlags.none) |
(settings.doCol ? MB_MeshVertexChannelFlags.colors : MB_MeshVertexChannelFlags.none) |
(settings.doUV ? MB_MeshVertexChannelFlags.uv0 : MB_MeshVertexChannelFlags.none) |
(uvsSliceIdx_w ? MB_MeshVertexChannelFlags.nuvsSliceIdx : MB_MeshVertexChannelFlags.none) |
(DoUV2getDataFromSourceMeshes(ref settings) ? MB_MeshVertexChannelFlags.uv2 : MB_MeshVertexChannelFlags.none) |
(settings.doUV3 ? MB_MeshVertexChannelFlags.uv3 : MB_MeshVertexChannelFlags.none) |
(settings.doUV4 ? MB_MeshVertexChannelFlags.uv4 : MB_MeshVertexChannelFlags.none) |
(settings.doUV5 ? MB_MeshVertexChannelFlags.uv5 : MB_MeshVertexChannelFlags.none) |
(settings.doUV6 ? MB_MeshVertexChannelFlags.uv6 : MB_MeshVertexChannelFlags.none) |
(settings.doUV7 ? MB_MeshVertexChannelFlags.uv7 : MB_MeshVertexChannelFlags.none) |
(settings.doUV8 ? MB_MeshVertexChannelFlags.uv8 : MB_MeshVertexChannelFlags.none) |
(settings.renderType == MB_RenderType.skinnedMeshRenderer ? MB_MeshVertexChannelFlags.blendWeight : MB_MeshVertexChannelFlags.none) |
(settings.renderType == MB_RenderType.skinnedMeshRenderer ? MB_MeshVertexChannelFlags.blendIndices : MB_MeshVertexChannelFlags.none);
return outFlags;
}
/// <summary>
/// UV2 channel has different ways to process based on: MB_IMeshBakerSettings
/// Some of these options generate a completely new channel in the combined mesh. In these cases we don't want
/// to get data from the sourceMeshes.
/// </summary>
public static bool DoUV2getDataFromSourceMeshes(ref MB_IMeshBakerSettings settings)
{
// For some UV2 settings like generateNewUV2Layout, there is no point in doing any copying data from source meshes from buffers because everything is getting re-generated
bool result = (settings.lightmapOption == MB2_LightmapOptions.copy_UV2_unchanged) ||
(settings.lightmapOption == MB2_LightmapOptions.preserve_current_lightmapping) ||
(settings.lightmapOption == MB2_LightmapOptions.copy_UV2_unchanged_to_separate_rects);
return result;
}
}
}