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.