private void DrawCircleSmooth()
    {
        var anchors = new List <Vector2>();

        var screenOffset = new Vector2(MyGameWindow.main.Width / 2f, MyGameWindow.main.Height / 2f);

        for (int i = 0; i < SAMPLE_SIZE / 3f; ++i)
        {
            var startPercent = i / (SAMPLE_SIZE / 3f);

            var start = CalculatePoint(startPercent, INNER_MIN_RADIUS + m_RadiusValue, screenOffset);

            var barValue = OUTER_MAX_RADIUS * (m_SpectrumTotal[i] / m_MaxValue);

            if (m_SpectrumTotal[i] <= SPECTRUM_MIN)
            {
                barValue = OUTER_MIN_RADIUS;
            }

            if (barValue >= m_CurrentBarValue[i])
            {
                if (m_SpectrumTotal[i] - m_OldSpectrumTotal[i] > 0.0025f && m_OldSpectrumTotal[i] < 0.005f)
                {
                    barValue *= 2f;
                }
                m_CurrentBarValue[i] = barValue;
            }
            else
            {
                m_CurrentBarValue[i] -= SPECTRUM_DECAY * Time.deltaTime;
            }

            if (m_CurrentBarValue[i] < OUTER_MIN_RADIUS)
            {
                m_CurrentBarValue[i] = OUTER_MIN_RADIUS;
            }

            var endPercent = (i + 0.5f) / (SAMPLE_SIZE / 3f);
            var end        = CalculatePoint(
                endPercent, INNER_MIN_RADIUS + m_RadiusValue + m_CurrentBarValue[i], screenOffset);
            anchors.Add(end);
        }

        var vertexes = new List <Vector2>();
        var colors   = new List <Color4>();

        for (var i = 0; i < anchors.Count; ++i)
        {
            var startAnchor = i - 1 >= 0 ? anchors[i - 1] : anchors.Last();

            var startBarValue = i - 1 >= 0 ? m_CurrentBarValue[i - 1] : m_CurrentBarValue.Last();
            var controlPoint  =
                startBarValue > m_CurrentBarValue[i] ?
                CalculatePoint((float)i / anchors.Count,
                               INNER_MIN_RADIUS + m_RadiusValue + startBarValue, screenOffset) :
                CalculatePoint((float)i / anchors.Count,
                               INNER_MIN_RADIUS + m_RadiusValue + m_CurrentBarValue[i], screenOffset);

            var bezier = new BezierCurveQuadric(startAnchor, anchors[i], controlPoint);

            var endColor =
                new Color4(
                    Color4.White.R + m_CurrentBarValue[i] / 100f
                    * (Color4.BlueViolet.R - Color4.White.R),
                    Color4.White.G + m_CurrentBarValue[i] / 100f
                    * (Color4.BlueViolet.G - Color4.White.G),
                    Color4.White.B + m_CurrentBarValue[i] / 100f
                    * (Color4.BlueViolet.B - Color4.White.B),
                    1f);
            for (var j = 0f; j < 1f; j += 0.005f)
            {
                colors.Add(endColor);
                vertexes.Add(bezier.CalculatePoint(j));
                colors.Add(Color4.White);
                vertexes.Add(screenOffset);
            }
        }
        colors.Add(colors.First());
        vertexes.Add(vertexes.First());

        Gizmos.DrawCustomShape(vertexes, colors, PrimitiveType.TriangleStrip);
    }