public Vector3?Sample(Vector3 outDir, bool isOnLightSubpath, Vector2 primarySample) { if (outDir.Z == 0) { return(null); } var halfVector = distribution.Sample(outDir, primarySample); if (Vector3.Dot(halfVector, outDir) < 0) { return(null); } var inDir = ShadingSpace.Reflect(outDir, halfVector); if (!ShadingSpace.SameHemisphere(outDir, inDir)) { return(null); } return(inDir); }