title: Unity - Improve Mesh generation and rendering performance
body: <p>since I just recently started looking into meshes, how they work, what they do and so on, I decided to use my own calculations to create a mesh of a circle. Unfortunately though, this is really, really slow! </p>
  
  <p>So I am looking for tips on improvements, to make it slow only (because that's probably the best it will get...)</p>
  
  <p>Here is the code I use to generate a circle:</p>
  
  <pre><code>public static void createCircle(MeshFilter meshFilter, float innerRadius, float outerRadius, Color color, float xPosition = 0, float yPosition = 0, float startDegree = 0, float endDegree = 360, int points = 100)
           {
               Mesh mesh = meshFilter.mesh;
               mesh.Clear();
  
               //These values will result in no (or very ugly in the case of points &lt; 10) circle, so let's safe calculation and just return an empty mesh!
               if (startDegree == endDegree || points &lt; 10 || innerRadius &gt;= outerRadius || innerRadius &lt; 0 || outerRadius &lt;= 0)
               {
                   return;
               }
  
               //The points for the full circle shall be whatever is given but if its not the full circle we dont need all the points!
               points = (int)(Mathf.Abs(endDegree - startDegree) / 360f * points);
  
               //We always need an uneven number of points!
               if (points % 2 != 0) { points++; }
  
               Vector3[] vertices = new Vector3[points];
               float degreeStepSize = (endDegree - startDegree) * 2 / (points - 3);
               float halfRadStepSize = (degreeStepSize) * Mathf.Deg2Rad / 2f;
               float startRad = Mathf.Deg2Rad * startDegree;
               float endRad = Mathf.Deg2Rad * endDegree;
  
               //Let's save the vector at the beginning and the one on the end to make a perfectly straight line
               vertices[0] = new Vector3(Mathf.Sin(startRad) * outerRadius + xPosition, Mathf.Cos(startRad) * outerRadius + yPosition, 0);
               vertices[vertices.Length - 1] = new Vector3(Mathf.Sin(endRad) * innerRadius + xPosition, Mathf.Cos(endRad) * innerRadius + yPosition, 0);
  
               for (int i = 1; i &lt; vertices.Length - 1; i++)
               {
                   //Pure coinsidence that saved some calculatons. Half Step Size is the same as what would needed to be calculated here!
                   float rad = (i - 1) * halfRadStepSize + startRad;
                   if (i % 2 == 0)
                   {
                       vertices[i] = new Vector3(Mathf.Sin(rad) * outerRadius + xPosition, Mathf.Cos(rad) * outerRadius + yPosition, 0);
                   }
                   else
                   {
                       vertices[i] = new Vector3(Mathf.Sin(rad) * innerRadius + xPosition, Mathf.Cos(rad) * innerRadius + yPosition, 0);
                   }
               }
               mesh.vertices = vertices;
  
               int[] tri = new int[(vertices.Length - 2) * 3];
               for (int i = 0; i &lt; (vertices.Length - 2); i++)
               {
                   int index = i * 3;
                   if (i % 2 == 0)
                   {
                       tri[index + 0] = i + 0;
                       tri[index + 1] = i + 2;
                       tri[index + 2] = i + 1;
                   }
                   else
                   {
                       tri[index + 0] = i + 0;
                       tri[index + 1] = i + 1;
                       tri[index + 2] = i + 2;
                   }
               }
  
               mesh.triangles = tri;
               Vector3[] normals = new Vector3[vertices.Length];
               Color[] colors = new Color[vertices.Length];
               for (int i = 0; i &lt; vertices.Length; i++)
               {
                   normals[i] = Vector3.forward;
                   colors[i] = color;
               }
               mesh.normals = normals;
               mesh.colors = colors;
  
               meshFilter.mesh = mesh;
           }
  </code></pre>
  
  <p>I know I "could just use the LineRenderer shipped with Unity, it is faster then anything you'll ever write", but that's not the point here. 
  I am trying to <strong>understand meshes</strong> and see where I can tweak my code to <strong>improve it's performance</strong>.</p>
  
  <p>Thanks for your help in advance! </p>