public static void Pool(SgtCoronaOuter outer)
    {
        if (outer != null)
        {
            outer.Corona = null;

            SgtComponentPool<SgtCoronaOuter>.Add(outer);
        }
    }
    public static void MarkForDestruction(SgtCoronaOuter outer)
    {
        if (outer != null)
        {
            outer.Corona = null;

            outer.gameObject.SetActive(true);
        }
    }
    public static void MarkForDestruction(SgtCoronaOuter outer)
    {
        if (outer != null)
        {
            outer.Corona = null;

            outer.gameObject.SetActive(true);
        }
    }
    public static void Pool(SgtCoronaOuter outer)
    {
        if (outer != null)
        {
            outer.Corona = null;

            SgtComponentPool <SgtCoronaOuter> .Add(outer);
        }
    }
    private void UpdateOuters()
    {
        outers.RemoveAll(o => o == null);

        if (OuterMeshes.Count != outers.Count)
        {
            SgtHelper.ResizeArrayTo(ref outers, OuterMeshes.Count, i => SgtCoronaOuter.Create(this), o => SgtCoronaOuter.Pool(o));
        }

        var outerScale = SgtHelper.Divide(OuterRadius, OuterMeshRadius);

        for (var i = OuterMeshes.Count - 1; i >= 0; i--)
        {
            outers[i].ManualUpdate(OuterMeshes[i], outerMaterial, outerScale);
        }
    }
    protected virtual void OnDestroy()
    {
        for (var i = InnerRenderers.Count - 1; i >= 0; i--)
        {
            var innerRenderer = InnerRenderers[i];

            SgtHelper.RemoveMaterial(innerRenderer, innerMaterial);
        }

        SgtHelper.Destroy(atmosphereLut);
        SgtHelper.Destroy(outerMaterial);
        SgtHelper.Destroy(innerMaterial);

        for (var i = outers.Count - 1; i >= 0; i--)
        {
            SgtCoronaOuter.MarkForDestruction(outers[i]);
        }

        outers.Clear();
    }