public void SetupSunflow(SunflowAPI a) { a.parameter("threads", Environment.ProcessorCount); // parameter ("threads", 1); a.options(SunflowAPI.DEFAULT_OPTIONS); //The render's resolution. 1920 by 1080 is full HD. int resolutionX = 3840; int resolutionY = 1920; // resolutionX = 1920; // resolutionY = 1920; resolutionX = 384 * 4; resolutionY = 192 * 4; // int resolutionX = 3840; // int resolutionY = 960; a.parameter("resolutionX", resolutionX); a.parameter("resolutionY", resolutionY); //The anti-aliasing. Negative is subsampling and positive is supersampling. a.parameter("aa.min", 1); a.parameter("aa.max", 2); //Number of samples. a.parameter("aa.samples", 1); //The contrast needed to increase anti-aliasing. a.parameter("aa.contrast", .016f); //Subpixel jitter. a.parameter("aa.jitter", true); //The filter. a.parameter("filter", "mitchell"); a.options(SunflowAPI.DEFAULT_OPTIONS); // Point3 eye = new Point3(7.0f, -7.0f, -7.0f); // Point3 target = new Point3(0.0f, -7.0f, 0.0f); Point3 target = new Point3(7.0f, -7.0f, -7.0f); Point3 eye = new Point3(-6.0f, -10.0f, 2.0f); Vector3 up = new Vector3(0, 1, 0); a.parameter("transform", Matrix4.lookAt(eye, target, up)); String name = "Camera"; /* thinlens camera */ /* * //Aspect Ratio. * float aspect = ((float)resolutionX) / ((float)resolutionY); * a.parameter("aspect", aspect); * a.camera(name, "thinlens"); */ /* 360 3D VR camera */ /* * * a.parameter("lens.eyegap", 0.5f); * // a.camera(name, "spherical3d"); * * a.camera(name, "spherical1803d"); * * */ a.parameter("lens.eyegap", 0.1f); a.camera(name, "vr180fisheye"); a.parameter("camera", name); a.options(SunflowAPI.DEFAULT_OPTIONS); //Trace depths. Higher numbers look better. a.parameter("depths.diffuse", 3); a.parameter("depths.reflection", 2); a.parameter("depths.refraction", 2); a.options(SunflowAPI.DEFAULT_OPTIONS); //Setting up the shader for the ground. a.parameter("diffuse", null, 0.4f, 0.4f, 0.4f); a.parameter("shiny", .1f); a.shader("ground", "shiny_diffuse"); a.options(SunflowAPI.DEFAULT_OPTIONS); //Setting up the shader for the big metal sphere. a.parameter("diffuse", null, 0.3f, 0.3f, 0.3f); a.parameter("shiny", .95f); a.shader("metal", "shiny_diffuse"); a.options(SunflowAPI.DEFAULT_OPTIONS); //Setting up the shader for the cube of spheres. a.parameter("diffuse", null, 1.0f, 0.0f, 0.0f); a.shader("sps", "diffuse"); a.options(SunflowAPI.DEFAULT_OPTIONS); //Instancing the floor. a.parameter("center", new Point3(0, -14.2f, 0)); a.parameter("normal", new Vector3(0, 1, 0)); a.geometry("floor", "plane"); a.parameter("shaders", "ground"); a.instance("FloorInstance", "floor"); a.options(SunflowAPI.DEFAULT_OPTIONS); //Creating the lighting system with the sun and sky. a.parameter("up", new Vector3(0, 1, 0)); a.parameter("east", new Vector3(1, 0, 0)); // double sunRad = (Math.PI * 1.05); // a.parameter("sundir", new Vector3((float)Math.Cos(sunRad), (float)Math.Sin(sunRad), (float)(.5 * Math.Sin(sunRad))).normalize()); a.parameter("sundir", new Vector3(0.8f, 0.8f, 0.5f).normalize()); a.parameter("turbidity", 4f); a.parameter("samples", 128); a.light("sunsky", "sunsky"); a.options(SunflowAPI.DEFAULT_OPTIONS); }
private void parseCamera(SunflowAPI api) { p.checkNextToken("{"); p.checkNextToken("type"); string type = p.getNextToken(); UI.printInfo(UI.Module.API, "Reading %s camera ...", type); parseCameraTransform(api); string name = api.getUniqueName("camera"); if (type == "pinhole") { p.checkNextToken("fov"); api.parameter("fov", p.getNextFloat()); p.checkNextToken("aspect"); api.parameter("aspect", p.getNextFloat()); api.camera(name, new PinholeLens()); } else if (type == "thinlens") { p.checkNextToken("fov"); api.parameter("fov", p.getNextFloat()); p.checkNextToken("aspect"); api.parameter("aspect", p.getNextFloat()); p.checkNextToken("fdist"); api.parameter("focus.distance", p.getNextFloat()); p.checkNextToken("lensr"); api.parameter("lens.radius", p.getNextFloat()); if (p.peekNextToken("sides")) api.parameter("lens.sides", p.getNextInt()); if (p.peekNextToken("rotation")) api.parameter("lens.rotation", p.getNextFloat()); api.camera(name, new ThinLens()); } else if (type == "spherical") { // no extra arguments api.camera(name, new SphericalLens()); } else if (type == "fisheye") { // no extra arguments api.camera(name, new FisheyeLens()); } else { UI.printWarning(UI.Module.API, "Unrecognized camera type: {0}", p.getNextToken()); p.checkNextToken("}"); return; } p.checkNextToken("}"); if (name != null) { api.parameter("camera", name); api.options(SunflowAPI.DEFAULT_OPTIONS); } }