Exemplo n.º 1
0
        static void Main(string[] args)
        {
            int xRes = 720;
            int yRes = 480;

            int runs = 10;


            IMaterial cyan  = new LambertianDiffuse(new Color3(0, 0.88, 0.88));
            IMaterial gray  = new LambertianDiffuse(new Color3(0.5, 0.5, 0.5));
            IMaterial red   = new LambertianDiffuse(new Color3(0.8, 0.2, 0.2));
            IMaterial metal = new Metal(new Color3(0.9, 0.9, 0.9), 0);

            Renderer raytracer = new()
            {
                // Define objects in the scene
                HittableObjects = new HittableList
                {
                    new Sphere(0, 1, 0, 0.5, gray),
                    new Sphere(1, 1, 0, 0.5, red),
                    new Sphere(0, 1, -100.5, 100, metal),
                    new Sphere(0, -2, 0, 1, cyan)
                }
            };

            // Define the camera
            Camera camera = new(xRes, yRes)
            {
                Origin = new Vector3(-1, 0, 0),
                MultithreadedRendering = true,
                SamplesPerPixel        = 100,
                MaxBounces             = 12
            };

            long[] frameTimes = new long[runs];

            for (int i = 0; i < runs; i++)
            {
                raytracer.RenderScene(camera, out long frameTime);

                frameTimes[i] = frameTime;

                Console.WriteLine("Run {0} | Time: {1} | Time Per Pixel: {2}", i, frameTime, (double)frameTime / (double)(xRes * yRes));
            }

            Console.WriteLine("------------------------------------------------------------------");
            Console.WriteLine("Total Runs: {0}\nResolution: {1}x{2}", runs, xRes, yRes);
            Console.WriteLine("------------------------------------------------------------------");

            long sum = 0;

            Array.ForEach(frameTimes, i => sum += i);
            Console.WriteLine("Total frametime:        {0} ms", sum);
            Console.WriteLine("Average frametime:      {0} ms", sum / runs);
            Console.WriteLine("Average time per pixel: {0} ms", (double)sum / (double)runs / (double)(xRes * yRes));
            Console.WriteLine("------------------------------------------------------------------");
        }
    }
}
Exemplo n.º 2
0
        static void Main()
        {
            bool writeDebugInfo = false;

            IMaterial groundMaterial = new LambertianDiffuse(Color3.FromRgb(255, 212, 216));
            IMaterial rightMaterial  = new Metal(Color3.FromRgb(220, 220, 220));
            IMaterial leftMaterial   = new Dielectric(1.5);
            IMaterial centerMaterial = new LambertianDiffuse(Color3.FromRgb(222, 133, 255));

            Renderer renderer = new()
            {
                // Define objects in the scene
                HittableObjects = new HittableList
                {
                    new Sphere(new Vector3(0, 1, -100.5), 100, groundMaterial),
                    new Sphere(new Vector3(0, 1, 0), 0.5, centerMaterial),
                    new Sphere(new Vector3(-1, 1, 0), 0.5, leftMaterial),
                    new Sphere(new Vector3(1, 1, 0), 0.5, rightMaterial),
                }
            };

            // Define the camera
            Camera camera = new(1280, 720)
            {
                Origin = new Vector3(0, 0, 0),
                MultithreadedRendering = true,
                SamplesPerPixel        = 100,
                MaxBounces             = 12
            };

            // Render
            RenderResult result = new();

            result.frameNumber = 0;
            result.camera      = camera;
            result.pixels      = renderer.RenderScene(camera, out result.frameTime);

            // Write to disk
            System.IO.Directory.CreateDirectory("./images/");
            Renderer.WriteFrame("./images/image_" + result.frameNumber + ".png", result.pixels, result.camera.ResolutionHeight, result.camera.ResolutionWidth, ImageFormat.Png, writeDebugInfo, result.frameTime, result.camera);
        }
    }