public void LoadFrameDescription(FrameDescription frame) { this.Configuration.Merge(frame); this.OutputSettings = new OutputSettingsInfo(frame); this.QualitySettings = new QualitySettingsInfo(frame); this.FrameName = frame.FrameName; var width = frame.Get<int>("ImageWidth"); var height = frame.Get<int>("ImageHeight"); Directory.SetCurrentDirectory(frame.WorkingDir); /* foreach (var frameElement in frame.Elements.Where(frameElement => frameParsers.ContainsKey(frameElement.GetType()))) { frameParsers[frameElement.GetType()](frameElement); }*/ if (Scene == null) { SceneGraphService svc = new SceneGraphService(); svc.Populate(new GlobalIndexObjLoader(), new MaterialLoader()); //svc.OpenFrame(frame); _builder = new SceneBuilder() { SGService = svc }; _builder.Setup(); this.Scene = _builder.OpenFrame(frame, AreaLightAsMeshLight); this.Scene.DefaultLightGain = Configuration.Get("LightGain", new RgbSpectrum(1.0f)); this.Scene.MaxPathDepth = Configuration.Get("MaxPathDepth", 5); this.Scene.RussianRuletteImportanceCap = Configuration.Get("RRImportanceCap", 0.75f); this.Scene.MaxPaths = Configuration.Get("PathBufferSize", 65536 >> 10); this.Scene.ShadowRayCount = Configuration.Get("ShadowRayCount", 1); this.Scene.TextureSamplingQuality = this.QualitySettings.TextureSamplingQuality; this.Scene.LightSamplingStrategy = LightSamplingStrategy.UniformOneLight; var scene = _builder.SceneGeo; var sceneBound = new AABB(scene.BoundingSphereCenter - scene.BoundingSphereRadius, scene.BoundingSphereCenter + scene.BoundingSphereRadius); sceneBound.Expand(1f); //var viewBound = new AABB(Scene.Camera.Target - 5f, Scene.Camera.Target + 5f); var c = new Point(Scene.Camera.Target); var bb = new AABB(c - 1f, c + 1f); var volumeBound = sceneBound; Scene.VolumeIntegrator = new SingleScatteringIntegrator(volumeBound, volumeBound.Size.Length / 10f, //step 0.005f, //Probability RgbSpectrum.UnitSpectrum() * 0.095f, //Inscatering new RgbSpectrum(0.00005f) //Emission ); } this.Context = new EngineContext() { RenderThreads = Configuration.Get("RenderThreadsCount", 1), FrameConfiguration = frame, Scene = this.Scene }; this.Initialize(); }
public FrameManager(IRendererOutputSettings outputSettings, IRendererQualitySettings qualitySettings, RayEngineScene scene, RenderingMode mode = RenderingMode.StillFrame ) { this.output = (OutputSettingsInfo)outputSettings; this.quality = (QualitySettingsInfo)qualitySettings; this.renderingComplete = false; this.samplesPerFrame = quality.SamplesPerPixel * quality.SuperSamplingSize; this.RenderJob = new RendererJobInfo(output, quality) { JobFramesCount = 1, FramesPerSecond = 1, NameTemplate = "frame_{0}.png", OutputDirectory = @"G:\RenderOutput\" }; this.Mode = mode; this.startTime = DateTime.UtcNow; this.renderingTime = new TimeSpan(0, 5, 0); this.endless = this.Mode == RenderingMode.StillFrame; this.maxFrames = this.RenderJob.JobFramesCount * this.RenderJob.FramesPerSecond; this.animationManager = new AnimationManager(scene, this.TotalFramesToRender); }