void BakeMesh(bool needUpdateSpriteArrays)
        {
            if (needUpdateSpriteArrays)
            {
                UpdateSpriteArrays();
            }

            List <ShapeControlPointExperimental> shapePoints   = new List <ShapeControlPointExperimental>();
            List <SpriteShapeMetaData>           shapeMetaData = new List <SpriteShapeMetaData>();

            for (int i = 0; i < m_Spline.GetPointCount(); ++i)
            {
                ShapeControlPointExperimental shapeControlPoint;
                shapeControlPoint.position     = m_Spline.GetPosition(i);
                shapeControlPoint.leftTangent  = m_Spline.GetLeftTangent(i);
                shapeControlPoint.rightTangent = m_Spline.GetRightTangent(i);
                shapeControlPoint.mode         = (int)m_Spline.GetTangentMode(i);
                shapePoints.Add(shapeControlPoint);

                SpriteShapeMetaData metaData;
                metaData.bevelCutoff = m_Spline.GetBevelCutoff(i);
                metaData.bevelSize   = m_Spline.GetBevelSize(i);
                metaData.corner      = m_Spline.GetCorner(i);
                metaData.height      = m_Spline.GetHeight(i);
                metaData.spriteIndex = (uint)m_Spline.GetSpriteIndex(i);
                shapeMetaData.Add(metaData);
            }

            if (spriteShapeRenderer != null && ValidatePoints(shapePoints))
            {
                SpriteShapeUtility.GenerateSpriteShape(spriteShapeRenderer, m_CurrentShapeParameters,
                                                       shapePoints.ToArray(), shapeMetaData.ToArray(), m_AngleRangeInfoArray, m_EdgeSpriteArray,
                                                       m_CornerSpriteArray);
            }

            if (m_DynamicOcclusionOverriden)
            {
                spriteShapeRenderer.allowOcclusionWhenDynamic = m_DynamicOcclusionLocal;
                m_DynamicOcclusionOverriden = false;
            }
        }