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; }
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 ---"); }