public override NativeList <Point> GetPointsResult(out Material[] targetMaterials) { targetMaterials = new Material[] { targetMats[(int)(matIndex % (uint)targetMats.Count)] }; NativeList <Point> allPoints = new NativeList <Point>(triangleBuffer.count * allMatrices.Length, Allocator.Temp); Vector3[] vertices, normals; Vector2[] uvs; Vector4[] tangents; PCGLibrary.GetTransformedMeshData(mesh, Matrix4x4.identity, out vertices, out tangents, out uvs, out normals); int[] triangles = mesh.triangles; for (int i = 0; i < allMatrices.Length; ++i) { float4x4 mat = allMatrices[i]; float4 tileOffset = tileOffsets[i]; foreach (var t in triangles) { float4 tan = tangents[t]; allPoints.Add(new Point { normal = mul(mat, float4(normals[t], 0)).xyz, tangent = float4(mul(mat, float4(tan.xyz, 0)).xyz, tan.w), uv0 = (float2)uvs[t] * tileOffset.xy + tileOffset.zw }); } } return(allPoints); }
public override NativeList <Point> GetPointsResult(out Material[] targetMaterials) { targetMaterials = new Material[] { mr.sharedMaterial }; Mesh targetMesh = GetComponent <MeshFilter>().sharedMesh; Vector3[] vertices, normals; Vector2[] uvs; Vector4[] tangents; PCGLibrary.GetTransformedMeshData(targetMesh, transform.localToWorldMatrix, out vertices, out tangents, out uvs, out normals); NativeList <Point> points = new NativeList <Point>(targetMesh.vertexCount * 2, Unity.Collections.Allocator.Temp); for (int i = 0; i < targetMesh.subMeshCount; ++i) { int[] triangles = targetMesh.GetTriangles(i); PCGLibrary.GetPointsWithArrays(points, vertices, normals, uvs, tangents, triangles, i); //TODO //Material Count } return(points); }