void ComputeSmoothedNormalByJob(Mesh smoothedMesh, Mesh originalMesh, int maxOverlapvertices = 50) { int svc = smoothedMesh.vertexCount, ovc = originalMesh.vertexCount; // CollectNormalJob Data NativeArray <float3> normals = new NativeArray <float3>(smoothedMesh.normals.ToF3(), Allocator.Persistent), vertrx = new NativeArray <float3>(smoothedMesh.vertices.ToF3(), Allocator.Persistent), smoothedNormals = new NativeArray <float3>(svc, Allocator.Persistent); var result = new NativeArray <UnsafeHashMap <float3, float3> >(maxOverlapvertices, Allocator.Persistent); var resultParallel = new NativeArray <UnsafeHashMap <float3, float3> .ParallelWriter>(result.Length, Allocator.Persistent); // NormalBakeJob Data NativeArray <float3> normalsO = new NativeArray <float3>(originalMesh.normals.ToF3(), Allocator.Persistent), vertrxO = new NativeArray <float3>(originalMesh.vertices.ToF3(), Allocator.Persistent); var tangents = new NativeArray <float4>(originalMesh.tangents.ToF4(), Allocator.Persistent); var uv8 = new NativeArray <float2>(ovc, Allocator.Persistent); for (int i = 0; i < result.Length; i++) { result[i] = new UnsafeHashMap <float3, float3>(svc, Allocator.Persistent); resultParallel[i] = result[i].AsParallelWriter(); } CollectNormalJob collectNormalJob = new CollectNormalJob(normals, vertrx, resultParallel); BakeNormalJob normalBakeJob = new BakeNormalJob(vertrxO, normalsO, tangents, result, uv8); normalBakeJob.Schedule(ovc, 8, collectNormalJob.Schedule(svc, 100)).Complete(); var _uv8 = new float2[ovc]; uv8.CopyTo(_uv8); originalMesh.uv8 = _uv8.ToV2(); normals.Dispose(); vertrx.Dispose(); result.Dispose(); smoothedNormals.Dispose(); resultParallel.Dispose(); normalsO.Dispose(); vertrxO.Dispose(); tangents.Dispose(); uv8.Dispose(); }