/// <inheritdoc /> public override Spectrum Sample_Wi( Interaction it, Point2D u, out Vector3D wi, out double pdf, out Point2D pRaster, out VisibilityTester vis) { // Uniformly sample a lens interaction _lensIntr_ Point2D pLens = LensRadius * Sampling.ConcentricSampleDisk(u); Point3D pLensWorld = CameraToWorld.ExecuteTransform(it.Time, new Point3D(pLens.X, pLens.Y, 0.0)); Interaction lensIntr = new Interaction(pLensWorld, it.Time, new MediumInterface(Medium)); lensIntr.N = (CameraToWorld.ExecuteTransform(it.Time, new Point3D(0.0, 0.0, 1.0))).ToVector3D().ToNormal3D(); // Populate arguments and compute the importance value vis = new VisibilityTester(it, lensIntr); wi = (lensIntr.P - it.P).ToVector3D(); double dist = wi.Length(); wi /= dist; // Compute PDF for importance arriving at _ref_ // Compute lens area of perspective camera double lensArea = LensRadius != 0.0 ? (Math.PI * LensRadius * LensRadius) : 1.0; pdf = (dist * dist) / (lensIntr.N.AbsDot(wi) * lensArea); return(We(lensIntr.SpawnRay(-wi), out pRaster)); }
public override Spectrum Sample_Li(Interaction inter, Point2 <float> u, out Vector3 <float> wi, out float pdf, out VisibilityTester vis) { Interaction interShape = Shape.Sample(u); wi = (interShape.P - inter.P).Normalized(); pdf = Shape.Pdf(inter, wi); vis = new VisibilityTester(inter, interShape); return(L(interShape, -wi)); }
public override SampledSpectrum Sample(ref Vector3 point, Scene scene, out Vector3 incomingVector, out VisibilityTester visibilityTester) { var direction = point - Position; incomingVector = direction.Normalized(); visibilityTester = new VisibilityTester(Position, point, scene); return(Spectrum / direction.LengthSquared); }
public override Spectrum Sample_Li(Interaction inter, Point2 <float> u, out Vector3 <float> wi, out float pdf, out VisibilityTester visTester) { var lightToPoint = position - inter.P; wi = lightToPoint.Normalized(); pdf = 1.0f; visTester = new VisibilityTester(inter, new SurfaceInteraction(position)); return(intensity / lightToPoint.LengthSquared()); }
public override Spectrum Sample_Li(Interaction reference, Point2D u, out Vector wi, out float pdf, out VisibilityTester visibility) { wi = (_pLight - reference.P).Normalize(); pdf = 1f; visibility = new VisibilityTester(reference, new Interaction(_pLight, MediumInterface)); return(_I * Falloff(-wi) / Point.DistanceSqr(_pLight, reference.P)); }
public override Spectrum Sample_Li(Interaction reference, Point2D u, out Vector wi, out float pdf, out VisibilityTester visibility) { wi = (_pLight - reference.P).Normalize(); pdf = 1f; visibility = new VisibilityTester(reference, new Interaction(_pLight)); var d2 = Point.DistanceSqr(_pLight, reference.P); return(I / d2); }
public override SampledSpectrum Sample(ref Vector3 point, Scene scene, out Vector3 incomingVector, out VisibilityTester visibilityTester) { var r1 = StaticRandom.NextFloat() * 2 - 1; var r2 = StaticRandom.NextFloat() * 2 - 1; var pointInDiskLocal = new Vector3(r1 * _radius, 0, r2 * _radius); var pointInDiskWorld = ObjectToWorld.TransformPoint(ref pointInDiskLocal); incomingVector = point - pointInDiskWorld; var cosangle = Vector3.Dot(incomingVector.Normalized(), _normal); visibilityTester = new VisibilityTester(pointInDiskWorld, point, scene); return(Spectrum * cosangle / incomingVector.Length); }