public Vector3 Sample(Triangle triangle, float u, float v)
 {
     Vector3 normal = triangle.SurfaceNormal(u, v);
     if (!_isRough) return normal;
     return new Vector3(normal.x + (float) (_rng.NextDouble() - 0.5) * _twoRoughness,
         normal.y + (float) (_rng.NextDouble() - 0.5) * _twoRoughness,
         normal.z + (float) (_rng.NextDouble() - 0.5) * _twoRoughness).Normalized();
 }