public void Execute(int p) { int i = fluidParticles[p]; if (smoothPositions[i].w > 0) { float3 singularValues; float3x3 u; BurstMath.EigenSolve(anisotropies[i] / smoothPositions[i].w, out singularValues, out u); //TODO: smoothPositions.w is always 1? we divided it all by w in AverageSmoothPositionsJob... float max = singularValues[0]; float3 s = math.max(singularValues, new float3(max / maxAnisotropy)) / max * principalRadii[i].x; principalAxes[i * 3] = new float4(u.c0, s.x); principalAxes[i * 3 + 1] = new float4(u.c1, s.y); principalAxes[i * 3 + 2] = new float4(u.c2, s.z); } else { float radius = principalRadii[i].x / maxAnisotropy; principalAxes[i * 3] = new float4(1, 0, 0, radius); principalAxes[i * 3 + 1] = new float4(0, 1, 0, radius); principalAxes[i * 3 + 2] = new float4(0, 0, 1, radius); } renderablePositions[i] = smoothPositions[i]; }