public override void Build() { vp = ViewPlane.Create(1024, 768, SystemOfCoordinates.SSC_INT); vp.NumSamples = 4; backgroundColor = ColorUtils.BLACK; tracer = new AreaLighting(this); MultiJittered sampler = new MultiJittered(vp.NumSamples); sampler.Generate(); AmbientOccluder occluder = new AmbientOccluder(ColorUtils.WHITE, 0.0); occluder.Sampler = sampler; //occluder.ScaleRadiance = 1.0; //occluder.Color = ColorUtils.WHITE; //occluder.SetMinAmount(0.0f); AmbientLight = occluder; Pinhole pinhole = new Pinhole(new Vec3(0.0, 0.0, 500.0), new Vec3(0.0, 0.0, 0.0), new Vec3(0.0, 1.0, 0.0), 2000.0f); Camera = pinhole; Emissive emissive = new Emissive(ColorUtils.WHITE, 20.0f); //emissive.ScaleRadiance = 1.0f; //emissive.Ce = new Vec3(1.0, 1.0, 1.0); sampler = new MultiJittered(256); sampler.Generate(); ConcaveSphere sphere = new ConcaveSphere(new Vec3(), 10000.0); //sphere.Radius = 10000.0; sphere.Sampler = sampler; sphere.Material = emissive; sphere.EmissiveMaterial = emissive; sphere.Shadows = false; AddObject(sphere); sampler = new MultiJittered(256); sampler.Generate(); EnvironmentLight l = new EnvironmentLight(); l.Material = emissive; l.Sampler = sampler; l.Sampler.MapSamplesToHemisphere(10); l.Shadows = true; AddLight(l); //Rectangle rectangle = new Rectangle(new Vec3(0.0, 100.0, 0.0), // new Vec3(216.0, 0.0, 0.0), // new Vec3(0.0, 0.0, 216.0)); //emissive = new Emissive(); //emissive.ScaleRadiance = 1.0f; //emissive.Ce = ColorUtils.WHITE; //rectangle.Material = emissive; //rectangle.Sampler = sampler; //rectangle.Shadows = false; //AddObject(rectangle); AreaLight areaLight = new AreaLight(); areaLight.Object = sphere; areaLight.Shadows = true; AddLight(areaLight); Vec3 lightGreen = new Vec3(0.65f, 1.0f, 0.30f); Vec3 green = new Vec3(0.0f, 0.6f, 0.3f); Vec3 darkGreen = new Vec3(0.0f, 0.41f, 0.41f); Vec3 yellow = new Vec3(1.0f, 1.0f, 0.0f); Vec3 darkYellow = new Vec3(0.61f, 0.61f, 0.0f); Vec3 lightPurple = new Vec3(0.65f, 0.3f, 1.0f); Vec3 darkPurple = new Vec3(0.5f, 0.0f, 1.0f); Vec3 brown = new Vec3(0.71f, 0.40f, 0.16f); Vec3 orange = new Vec3(1.0f, 0.75f, 0.0f); Matte matte = new Matte(); matte.SetKa(0.2f); matte.SetKd(0.5f); matte.SetColor(ColorUtils.WHITE); Plane p = new Plane(new Vec3(0, -85, 0), new Vec3(0, 1, 0)); p.Material = matte; AddObject(p); Phong m = new Phong(); m.SetKa(0.2f); m.SetKd(0.65f); m.SetKs(0.1f); m.SetExp(8.0f); m.SetColor(ColorUtils.WHITE); Sphere s = new Sphere(new Vec3(5, 3, 0), 30); s.Material = m; AddObject((Sphere)s.Clone()); s.SetCenter(45, -7, -60); s.Radius = 20; m.SetColor(brown); AddObject((Sphere)s.Clone()); s.SetCenter(40, 43, -100); s.Radius = 17; m.SetColor(darkGreen); AddObject((Sphere)s.Clone()); s.SetCenter(-20, 28, -15); s.Radius = 20; m.SetColor(orange); AddObject((Sphere)s.Clone()); s.SetCenter(-25, -7, -35); s.Radius = 27; m.SetColor(green); AddObject((Sphere)s.Clone()); s.SetCenter(20, -27, -35); s.Radius = 25; m.SetColor(lightGreen); AddObject((Sphere)s.Clone()); s.SetCenter(35, 18, -35); s.Radius = 22; m.SetColor(green); AddObject((Sphere)s.Clone()); s.SetCenter(-57, -17, -50); s.Radius = 15; m.SetColor(brown); AddObject((Sphere)s.Clone()); s.SetCenter(-47, 16, -80); s.Radius = 23; m.SetColor(lightGreen); AddObject((Sphere)s.Clone()); s.SetCenter(-15, -32, -60); s.Radius = 22; m.SetColor(darkGreen); AddObject((Sphere)s.Clone()); s.SetCenter(-35, -37, -80); s.Radius = 22; m.SetColor(darkYellow); AddObject((Sphere)s.Clone()); s.SetCenter(10, 43, -80); s.Radius = 22; m.SetColor(darkYellow); AddObject((Sphere)s.Clone()); s.SetCenter(30, -7, -80); s.Radius = 10; m.SetColor(darkYellow); AddObject((Sphere)s.Clone()); s.SetCenter(-40, 48, -110); s.Radius = 18; m.SetColor(darkGreen); AddObject((Sphere)s.Clone()); s.SetCenter(-10, 53, -120); s.Radius = 18; m.SetColor(brown); AddObject((Sphere)s.Clone()); s.SetCenter(-55, -52, -100); s.Radius = 10; m.SetColor(lightPurple); AddObject((Sphere)s.Clone()); s.SetCenter(5, -52, -100); s.Radius = 15; m.SetColor(brown); AddObject((Sphere)s.Clone()); s.SetCenter(-20, -57, -120); s.Radius = 15; m.SetColor(darkPurple); AddObject((Sphere)s.Clone()); s.SetCenter(55, -27, -100); s.Radius = 17; m.SetColor(darkGreen); AddObject((Sphere)s.Clone()); s.SetCenter(50, -47, -120); s.Radius = 15; m.SetColor(brown); AddObject((Sphere)s.Clone()); s.SetCenter(70, -42, -150); s.Radius = 10; m.SetColor(lightPurple); AddObject((Sphere)s.Clone()); s.SetCenter(5, 73, -130); s.Radius = 12; m.SetColor(lightPurple); AddObject((Sphere)s.Clone()); s.SetCenter(66, 21, -130); s.Radius = 13; m.SetColor(darkPurple); AddObject((Sphere)s.Clone()); s.SetCenter(72, -12, -140); s.Radius = 12; m.SetColor(lightPurple); AddObject((Sphere)s.Clone()); s.SetCenter(64, 5, -160); s.Radius = 11; m.SetColor(green); AddObject((Sphere)s.Clone()); s.SetCenter(55, 38, -160); s.Radius = 12; m.SetColor(lightPurple); AddObject((Sphere)s.Clone()); s.SetCenter(-73, -2, -160); s.Radius = 12; m.SetColor(lightPurple); AddObject((Sphere)s.Clone()); s.SetCenter(30, -62, -140); s.Radius = 15; m.SetColor(darkPurple); AddObject((Sphere)s.Clone()); s.SetCenter(25, 63, -140); s.Radius = 15; m.SetColor(darkPurple); AddObject((Sphere)s.Clone()); s.SetCenter(-60, 46, -140); s.Radius = 15; m.SetColor(darkPurple); AddObject((Sphere)s.Clone()); s.SetCenter(-30, 68, -130); s.Radius = 12; m.SetColor(lightPurple); AddObject((Sphere)s.Clone()); s.SetCenter(58, 56, -180); s.Radius = 11; m.SetColor(green); AddObject((Sphere)s.Clone()); s.SetCenter(-63, -39, -180); s.Radius = 11; m.SetColor(green); AddObject((Sphere)s.Clone()); s.SetCenter(46, 68, -200); s.Radius = 10; m.SetColor(lightPurple); AddObject((Sphere)s.Clone()); s.SetCenter(-3, -72, -130); s.Radius = 12; m.SetColor(lightPurple); AddObject(s); }
public override void Build() { vp = ViewPlane.Create(1920, 1080, SystemOfCoordinates.SSC_INT); vp.NumSamples = 100; vp.MaxDepth = 5; backgroundColor = ColorUtils.BLACK; tracer = new PathTrace(this); Ambient a = new Ambient(); a.ScaleRadiance = 0.0f; AmbientLight = a; Pinhole pinhole = new Pinhole(new Vec3(100, 45, 100), new Vec3(-10, 40, 0), new Vec3(0.0, 1.0, 0.0), 800, 1.5f); Camera = pinhole; Emissive emissive = new Emissive(ColorUtils.WHITE, 1.5f); ConcaveSphere sphere = new ConcaveSphere(); sphere.Radius = 1000000; sphere.Shadows = false; sphere.Material = emissive; AddObject(sphere); float ka = 0.2f; Matte m1 = new Matte(); m1.SetKa(ka); m1.SetKd(0.60f); m1.SetColor(ColorUtils.WHITE); m1.SetSampler(new MultiJittered(vp.NumSamples)); Sphere largeSphere = new Sphere(new Vec3(38, 20, -24), 20); largeSphere.Material = m1; AddObject(largeSphere); Matte m2 = new Matte(); m2.SetKa(ka); m2.SetKd(0.5f); m2.SetColor(0.85f); m2.SetSampler(new MultiJittered(vp.NumSamples)); Sphere smallSphere = new Sphere(new Vec3(34, 12, 13), 12); smallSphere.Material = m2; AddObject(smallSphere); Matte m3 = new Matte(); m3.SetKa(ka); m3.SetKd(0.75f); m3.SetColor(0.73f, 0.22f, 0.0f); m3.SetSampler(new MultiJittered(vp.NumSamples)); Sphere mediumSphere = new Sphere(new Vec3(-7, 15, 42), 16); mediumSphere.Material = m3; AddObject(mediumSphere); Matte m4 = new Matte(); m4.SetKa(ka); m4.SetKd(0.75f); m4.SetColor(0.60f); m4.SetSampler(new MultiJittered(vp.NumSamples)); float b = 0; float t = 85; float r = 22; SolidCylinder cylinder = new SolidCylinder(b, t, r, m4); AddObject(cylinder); Matte m5 = new Matte(); m5.SetKa(ka); m5.SetKd(0.75f); m5.SetColor(0.95f); m5.SetSampler(new MultiJittered(vp.NumSamples)); Box box = new Box(new Vec3(-55, 0, -110), new Vec3(-25, 60, 65), m5); AddObject(box); Matte m6 = new Matte(); m6.SetKa(0.15f); m6.SetKd(0.95f); m6.SetColor(0.37f, 0.43f, 0.08f); m6.SetSampler(new MultiJittered(vp.NumSamples)); Plane plane = new Plane(new Vec3(0, 0.01, 0), new Vec3(0, 1, 0), m6); AddObject(plane); }