Quick answer: Unity Mesh.RecalculateNormals taking 50ms on a 100k-vertex mesh? Built-in version is single-threaded - implement in a Burst job or pre-compute normals at authoring.

Procedural cave system regenerates meshes. RecalculateNormals consumes 60% of the regen budget.

Burst job implementation

Custom IJobParallelFor that computes per-triangle normals, then averages per-vertex. ~10x faster than RecalculateNormals.

Or precompute

If the mesh deforms but topology is fixed, precompute the normals; transform in shader. No CPU cost.

Use SetNormals bulk

Avoid vertices[i].normal = .... Build a NativeArray; call SetNormals(arr) once.

“RecalculateNormals is built-in convenience. Convenience scales until it doesn't.”

For procedural mesh work, build a Mesh utility library with Burst-jobbed versions of RecalculateNormals, RecalculateTangents, RecalculateBounds. One-time investment; permanent payoff.

Related reading