Ejemplo n.º 1
0
        private void btnViewIndependentDLE_Click(object sender, EventArgs e)
        {
            // Parameters
            Scene = new TestScenes.SceneCreatorSobolevEx().CreateScene(); // Сцена

            int   maxDivideDeep = 10;                                     // Максимальная глубина разбиения грани, больше 14 лучше не задавать даже для Соболева
            int   nTheta        = 8;                                      // Число углов разбиения для расчета яркости по зенитному углу
            int   nPhi          = 16;                                     // Число углов разбиения для расчета яркости по азимутальному углу
            int   nSH           = 8;                                      // Число гармоник при аппроксимации через СГ (MVertexIlluminanceApproximationMode.SphericalHarmonics)
            int   nRays         = 100;                                    // Число лучей для двойной локальной
            float wMin          = 0.1f;                                   // Минимульный вес луча марковской цепи для локальной

            // Create MScene
            var mscene = new MScene(Scene, new MeshSettings(maxDivideDeep, nTheta, nPhi, nSH));

            sceneViewer.MScene = mscene;

            MScene.BuildStaticMinimalMesh(mscene);

            FormRenderLog formLog = new FormRenderLog();

            formLog.Show();
            Application.DoEvents();

            using (IRayTracer rayTracer = new RayTracerEmbree(Scene))
            {
                formLog.Message("Render direct");
                var renderDirect = new MRenderDirectLight(mscene, rayTracer, formLog);
                renderDirect.Calculate();

                formLog.Message("Render indirect");
                var renderIndirect = new MRenderDoubleLocalEst(mscene, rayTracer, nRays, wMin, formLog);
                renderIndirect.Calculate();

                formLog.Message("Start update statistics", 0);
                mscene.UpdateStatistics();
                formLog.Message("End update statistics", 0);
            }

            sceneViewer.IlluminanceApproximationMode = MVertexIlluminanceApproximationMode.Spline;
            sceneViewer.IlluminanceMode = MVertexIlluminanceMode.Full;
            sceneViewer.DrawMode        = DrawMode.CalculatedMScene;
        }
Ejemplo n.º 2
0
        private void btnRenderDLE_Click(object sender, EventArgs e)
        {
            // Parameters
            Scene = new TestScenes.SceneCreatorCornellBox().CreateScene(); // Сцена
            int   nPackets = 3;                                            // Число пакетов
            int   nRays    = 100;                                          // Число лучей внутри пакета для двойной локальной
            float wMin     = 0.1f;                                         // Минимульный вес луча марковской цепи для локальной


            FormRenederResultView formImageView = new FormRenederResultView();
            FormRenderLog         formLog       = new FormRenderLog();

            formLog.Show();
            Application.DoEvents();

            formLog.Message("--- Start render ---");
            using (IRayTracer rayTracer = new RayTracerEmbree(this.Scene))
            {
                var       ticks    = Environment.TickCount;
                IRenderer renderer = new SimpleRenderer(rayTracer);
                renderer.GlobalIllumination = new DoubleLocalEstimation(rayTracer, nPackets, nRays, wMin, formLog);

                renderer.Log = formLog;

                formLog.Message("Strart render");

                var renderResult = renderer.GenerateRenderPoints(this.sceneViewer.Camera, this.sceneViewer.Width, this.sceneViewer.Height);
                renderer.RenderDirectIllumination(renderResult);
                renderer.RenderGlobalIllumination(renderResult);
                renderer.FinalGathering(renderResult);

                formLog.Message("Strart display image");
                formImageView.RenderPointsStructure = renderResult;
            }
            formImageView.Show();
            formLog.Message("--- Render complete ---");
        }