Basis3 basis = Basis3.fromW(w);
do {
SphericalCoordinates perturb = new SphericalCoordinates(
Math.acos(Math.pow(1.0 - ru, 1.0 / (specularity + 1.0))),
2.0 * Math.PI * rv);
w = perturb.toCartesian(basis);
} while ((w.dot(N) > 0.0) != toSide);
}
return new ScatteredRay(new Ray3(x.getPosition(), w),
lambda.getColorModel().getWhite(lambda),