예제 #1
0
 public CorrectorRenderThread(int index,
                                IIntersectionEngine device,
                                RayEngineScene scn,
                                bool lowLatency,
                                CorrectorImageFilm pixelDevice,
                                GlobalSamplingContext sc, IFrameManager fM)
     : base(index, scn)
 {
     this.pixelDevice = pixelDevice;
     this.frameManager = fM;
     Init(device, lowLatency, pixelDevice, sc);
 }
예제 #2
0
        private void Init(IIntersectionEngine device, bool lowLatency, CorrectorImageFilm pixelDevice, GlobalSamplingContext sc)
        {
            this.samplers = sc;
            intersectionDevice = device;
            width = pixelDevice.Width;
            height = pixelDevice.Height;
            var rayBufferSize = lowLatency ? (RayBuffer.RayBufferSize / 8) : RayBuffer.RayBufferSize;
            rayBuffers = new RayBuffer[DeviceRenderBufferCount];
            this.pixelDevice = pixelDevice;
            for (int i = 0; i < DeviceRenderBufferCount; i++)
            {
                rayBuffers[i] = new RayBuffer(rayBufferSize);
                rayBuffers[i].UserData = threadIndex;
            }
            _pathRayProcessors = new PathSampleProcessor(scene.MaxPaths, (RayEngineScene)scene, pixelDevice, samplers);
            //_pathRayProcessors.RequestSamplesFunc = (f)=>{ GenerateIm}


            renderThread = null;
        }
        public virtual void Initialize()
        {

            this.deviceManager = new DeviceManager();
            this.frameManager = new FrameManager(this.OutputSettings, this.QualitySettings, Scene);
            this.deviceManager.Init(lowLatency, Scene);
            //this.frameManager.SetDevices(deviceManager, Film);
            this.film = new CorrectorImageFilm(Width, Height);
            this.engine = new CorrectorRenderer(CurrentFrame, film);
            this.deviceManager.RenderThreads = engine.CreateThreads(this.RenderThreadsCount, deviceManager.IntersectionDevice, frameManager);



            Tracer.TraceLine("Starting Corrector [Renderer type : {0}] ( Preprocessing : {1} )", engineType, false);
            //Tracer.TraceLine("..Sampler Type [{0}]", deviceManager.RenderThreads.First().sampler.GetType().Name);
            Tracer.TraceLine("..Image Film Type [{0}]", film.GetType().Name);
            CommandManager.Instance.OnExecuteCommand += command =>
            {
                if (command.Name == "init.config")
                {

                }

                return new EngineCommandContext() { Success = true };
            };
        }
예제 #4
0
        public void Merge(CorrectorImageFilm b)
        {
            if (b.pixelData.Length != pixelData.Length)
            {
                throw new ArgumentException("Invalid film size");
            }

            for (int index = 0; index < b.pixelData.Length; index++)
            {
                var pixelA = pixelData[index];
                var pixelB = b.pixelData[index];


                pixelData[index] = new SamplePixel()
                {
                    Radiance = (pixelA.Radiance + pixelB.Radiance) * 0.5f,
                    Weight = (pixelA.Weight + pixelB.Weight) * 0.5f,
                };
            }
        }