Exemplo n.º 1
0
    def render(self, scene):

        self.preview = (scene.name == "preview")

        self.update_stats("", "Setting up render")

        if not self.preview:
            scene.frame_set(scene.frame_current)

        self.scene = scene
        r = scene.render

        [sizeX, sizeY, bStartX, bStartY, bsizeX, bsizeY,
         camDummy] = yaf_scene.getRenderCoords(scene)

        if r.use_border:
            x = bsizeX
            y = bsizeY
        else:
            x = sizeX
            y = sizeY

        self.setInterface(yafrayinterface.yafrayInterface_t())

        if scene.gs_type_render == "file":
            outputFile, output, file_type = self.decideOutputFileName(
                r.filepath, r.file_format)
            self.yi.paramsClearAll()
            self.yi.paramsSetString("type", file_type)
            self.yi.paramsSetBool("alpha_channel", r.color_mode == "RGBA")
            self.yi.paramsSetBool("z_channel", scene.gs_z_channel)
            self.yi.paramsSetInt("width", x + bStartX)
            self.yi.paramsSetInt("height", y + bStartY)
            ih = self.yi.createImageHandler("outFile")
            co = yafrayinterface.imageOutput_t(ih, str(outputFile), 0, 0)

        self.yi.startScene()
        self.exportScene()
        self.yaf_integrator.exportIntegrator(self.scene)
        self.yaf_integrator.exportVolumeIntegrator(self.scene)

        yaf_scene.exportRenderSettings(
            self.yi, self.scene
        )  # must be called last as the params from here will be used by render()

        if scene.gs_type_render == "file":

            self.yi.printInfo("Exporter: Rendering to file " + outputFile)

            self.update_stats("", "Rendering to %s" % outputFile)

            self.yi.render(co)

            result = self.begin_result(bStartX, bStartY, x + bStartX,
                                       y + bStartY)

            lay = result.layers[0]

            if scene.gs_z_channel:
                lay.load_from_file(output + '_zbuffer.' + file_type)
            else:
                lay.load_from_file(outputFile)

            self.end_result(result)

        elif scene.gs_type_render == "into_blender":

            import threading

            def progressCallback(command, *args):
                if not self.test_break():
                    if command == "tag":
                        self.tag = args[0]
                    elif command == "progress":
                        self.prog = args[0]
                    self.update_stats("",
                                      "%s - %.2f %%" % (self.tag, self.prog))

            def drawAreaCallback(*args):
                x, y, w, h, tile = args
                res = self.begin_result(x, y, w, h)
                try:
                    res.layers[0].rect = tile
                except:
                    pass
                self.update_result(res)

            def flushCallback(*args):
                w, h, tile = args
                res = self.begin_result(0, 0, w, h)
                try:
                    res.layers[0].rect = tile
                except BaseException as e:
                    pass
                self.end_result(res)

            t = threading.Thread(target=self.yi.render,
                                 args=(sizeX, sizeY, 0, 0, self.preview,
                                       drawAreaCallback, flushCallback,
                                       progressCallback))
            t.start()

            while t.isAlive() and not self.test_break():
                time.sleep(0.2)

            if t.isAlive():
                self.update_stats("", "Aborting...")
                self.yi.abort()
                t.join()
                self.yi.clearAll()
                del self.yi
                self.update_stats("", "Render is aborted")
                return

        self.update_stats("", "Done!")

        self.yi.clearAll()
        del self.yi
    def render(self, scene):

        self.preview = (scene.name == "preview")
        self.bl_use_postprocess = False
        self.update_stats("", "Setting up render")

        if not self.preview:
            scene.frame_set(scene.frame_current)

        self.scene = scene
        r = scene.render

        [sizeX, sizeY, bStartX, bStartY, bsizeX, bsizeY, camDummy] = yaf_scene.getRenderCoords(scene)

        if r.use_border:
            x = bsizeX
            y = bsizeY
        else:
            x = sizeX
            y = sizeY

        self.setInterface(yafrayinterface.yafrayInterface_t())

        self.yi.setInputGamma(scene.gs_gamma_input, True)

        rfilepath = bpy.path.abspath(r.filepath)
        rfilepath = os.path.realpath(rfilepath)
        rfilepath = os.path.normpath(rfilepath)

        if bpy.types.YAFA_RENDER.render_Animation:
            absolute_outpath = os.path.abspath(os.path.join(rfilepath, 'yaf_ani'))  # output folder for animation imagefiles saving from yafaray
        else:
            absolute_outpath = os.path.abspath(os.path.join(rfilepath, 'yaf_tmp'))  # output folder for tmp imagefile saving from yafaray

        if scene.gs_type_render == "file":
            outputFile, output, file_type = self.decideOutputFileName(absolute_outpath, scene.img_output)
            self.yi.paramsClearAll()
            self.yi.paramsSetString("type", file_type)
            self.yi.paramsSetBool("alpha_channel", r.color_mode == "RGBA")
            self.yi.paramsSetBool("z_channel", scene.gs_z_channel)
            self.yi.paramsSetInt("width", x + bStartX)
            self.yi.paramsSetInt("height", y + bStartY)
            ih = self.yi.createImageHandler("outFile")
            co = yafrayinterface.imageOutput_t(ih, str(outputFile), 0, 0)

        if scene.gs_type_render == "xml":  # Export the Scene to XML File
            absolute_outpath = os.path.abspath(os.path.join(rfilepath, 'yaf_xml'))  # output folder for xml file saving from yafaray
            outputFile, output, file_type = self.decideOutputFileName(absolute_outpath, 'XML')
            self.setInterface(yafrayinterface.xmlInterface_t())
            co = yafrayinterface.imageOutput_t()
            self.yi.setOutfile(outputFile)

        self.yi.startScene()
        self.exportScene()
        self.yaf_integrator.exportIntegrator(self.scene)
        self.yaf_integrator.exportVolumeIntegrator(self.scene)

        yaf_scene.exportRenderSettings(self.yi, self.scene)  # must be called last as the params from here will be used by render()

        if scene.gs_type_render == "file":
            self.yi.printInfo("Exporter: Rendering to file " + outputFile)
            self.update_stats("", "Rendering to %s" % outputFile)
            self.yi.render(co)
            result = self.begin_result(bStartX, bStartY, x + bStartX, y + bStartY)
            lay = result.layers[0]

            if scene.gs_z_channel and not scene.img_output == 'OPEN_EXR':  # exr format has z-buffer included, so no need to load '_zbuffer' - file
                lay.load_from_file(output + '_zbuffer.' + file_type)
            else:
                lay.load_from_file(outputFile)

            self.end_result(result)

        if scene.gs_type_render == "xml":  # Export the Scene to XML File
            self.yi.printInfo("Exporter: Writing XML to file " + outputFile)
            self.yi.render(co)

        elif scene.gs_type_render == "into_blender":
            import threading

            def progressCallback(command, *args):
                if not self.test_break():
                    if command == "tag":
                        self.tag = args[0]
                    elif command == "progress":
                        self.prog = args[0]
                    self.update_stats("YafaRay Rendering... ", "%s - %.2f %%" % (self.tag, self.prog))

            def drawAreaCallback(*args):
                x, y, w, h, tile = args
                res = self.begin_result(x, y, w, h)
                try:
                    res.layers[0].rect = tile
                    #res.layers[0].passes[0].rect = tile
                except:
                    pass
                self.end_result(res)

            def flushCallback(*args):
                w, h, tile = args
                res = self.begin_result(0, 0, w, h)
                try:
                    res.layers[0].rect = tile
                    #res.layers[0].passes[0].rect = tile
                except BaseException as e:
                    pass
                self.end_result(res)

            t = threading.Thread(target = self.yi.render,
                                 args = (sizeX, sizeY, 0, 0,
                                 self.preview,
                                 drawAreaCallback,
                                 flushCallback,
                                 progressCallback)
                                 )
            t.start()

            while t.isAlive() and not self.test_break():
                time.sleep(0.2)

            if t.isAlive():
                self.update_stats("", "Aborting...")
                self.yi.abort()
                t.join()
                self.yi.clearAll()
                del self.yi
                self.update_stats("", "Render is aborted")
                self.bl_use_postprocess = True
                return

        self.update_stats("", "Done!")
        self.yi.clearAll()
        del self.yi

        self.bl_use_postprocess = True
    def render(self, scene):

        self.preview = (scene.name == "preview")
        self.bl_use_postprocess = False
        self.update_stats("", "Setting up render")

        if not self.preview:
            scene.frame_set(scene.frame_current)

        self.scene = scene
        r = scene.render

        [sizeX, sizeY, bStartX, bStartY, bsizeX, bsizeY,
         camDummy] = yaf_scene.getRenderCoords(scene)

        if r.use_border:
            x = bsizeX
            y = bsizeY
        else:
            x = sizeX
            y = sizeY

        self.setInterface(yafrayinterface.yafrayInterface_t())

        self.yi.setInputGamma(scene.gs_gamma_input, True)

        rfilepath = bpy.path.abspath(r.filepath)
        rfilepath = os.path.realpath(rfilepath)
        rfilepath = os.path.normpath(rfilepath)

        if bpy.types.YAFA_RENDER.render_Animation:
            absolute_outpath = os.path.abspath(
                os.path.join(rfilepath, 'yaf_ani')
            )  # output folder for animation imagefiles saving from yafaray
        else:
            absolute_outpath = os.path.abspath(
                os.path.join(rfilepath, 'yaf_tmp')
            )  # output folder for tmp imagefile saving from yafaray

        if scene.gs_type_render == "file":
            outputFile, output, file_type = self.decideOutputFileName(
                absolute_outpath, scene.img_output)
            self.yi.paramsClearAll()
            self.yi.paramsSetString("type", file_type)
            self.yi.paramsSetBool("alpha_channel", r.color_mode == "RGBA")
            self.yi.paramsSetBool("z_channel", scene.gs_z_channel)
            self.yi.paramsSetInt("width", x + bStartX)
            self.yi.paramsSetInt("height", y + bStartY)
            ih = self.yi.createImageHandler("outFile")
            co = yafrayinterface.imageOutput_t(ih, str(outputFile), 0, 0)

        if scene.gs_type_render == "xml":  # Export the Scene to XML File
            absolute_outpath = os.path.abspath(
                os.path.join(rfilepath, 'yaf_xml')
            )  # output folder for xml file saving from yafaray
            outputFile, output, file_type = self.decideOutputFileName(
                absolute_outpath, 'XML')
            self.setInterface(yafrayinterface.xmlInterface_t())
            co = yafrayinterface.imageOutput_t()
            self.yi.setOutfile(outputFile)

        self.yi.startScene()
        self.exportScene()
        self.yaf_integrator.exportIntegrator(self.scene)
        self.yaf_integrator.exportVolumeIntegrator(self.scene)

        yaf_scene.exportRenderSettings(
            self.yi, self.scene
        )  # must be called last as the params from here will be used by render()

        if scene.gs_type_render == "file":
            self.yi.printInfo("Exporter: Rendering to file " + outputFile)
            self.update_stats("", "Rendering to %s" % outputFile)
            self.yi.render(co)
            result = self.begin_result(bStartX, bStartY, x + bStartX,
                                       y + bStartY)
            lay = result.layers[0]

            if scene.gs_z_channel and not scene.img_output == 'OPEN_EXR':  # exr format has z-buffer included, so no need to load '_zbuffer' - file
                lay.load_from_file(output + '_zbuffer.' + file_type)
            else:
                lay.load_from_file(outputFile)

            self.end_result(result)

        if scene.gs_type_render == "xml":  # Export the Scene to XML File
            self.yi.printInfo("Exporter: Writing XML to file " + outputFile)
            self.yi.render(co)

        elif scene.gs_type_render == "into_blender":
            import threading

            def progressCallback(command, *args):
                if not self.test_break():
                    if command == "tag":
                        self.tag = args[0]
                    elif command == "progress":
                        self.prog = args[0]
                    self.update_stats("YafaRay Rendering... ",
                                      "%s - %.2f %%" % (self.tag, self.prog))

            def drawAreaCallback(*args):
                x, y, w, h, tile = args
                res = self.begin_result(x, y, w, h)
                try:
                    res.layers[0].rect = tile
                    #res.layers[0].passes[0].rect = tile
                except:
                    pass
                self.end_result(res)

            def flushCallback(*args):
                w, h, tile = args
                res = self.begin_result(0, 0, w, h)
                try:
                    res.layers[0].rect = tile
                    #res.layers[0].passes[0].rect = tile
                except BaseException as e:
                    pass
                self.end_result(res)

            t = threading.Thread(target=self.yi.render,
                                 args=(sizeX, sizeY, 0, 0, self.preview,
                                       drawAreaCallback, flushCallback,
                                       progressCallback))
            t.start()

            while t.isAlive() and not self.test_break():
                time.sleep(0.2)

            if t.isAlive():
                self.update_stats("", "Aborting...")
                self.yi.abort()
                t.join()
                self.yi.clearAll()
                del self.yi
                self.update_stats("", "Render is aborted")
                self.bl_use_postprocess = True
                return

        self.update_stats("", "Done!")
        self.yi.clearAll()
        del self.yi

        self.bl_use_postprocess = True
Exemplo n.º 4
0
    def render(self, scene):

        self.preview = (scene.name == "preview")

        self.update_stats("", "Setting up render")

        if not self.preview:
            scene.frame_set(scene.frame_current)

        self.scene = scene
        r = scene.render
        
        [sizeX, sizeY, bStartX, bStartY, bsizeX, bsizeY, camDummy] = yaf_scene.getRenderCoords(scene)
        
        if r.use_border:
            x = bsizeX
            y = bsizeY
        else:
            x = sizeX
            y = sizeY
        
        self.setInterface(yafrayinterface.yafrayInterface_t())

        if scene.gs_type_render == "file":
            outputFile, output, file_type = self.decideOutputFileName(r.filepath, r.file_format)
            self.yi.paramsClearAll()
            self.yi.paramsSetString("type", file_type)
            self.yi.paramsSetBool("alpha_channel", r.color_mode == "RGBA")
            self.yi.paramsSetBool("z_channel", scene.gs_z_channel)
            self.yi.paramsSetInt("width", x + bStartX)
            self.yi.paramsSetInt("height", y + bStartY)
            ih = self.yi.createImageHandler("outFile")
            co = yafrayinterface.imageOutput_t(ih, str(outputFile), 0, 0)


        self.yi.startScene()
        self.exportScene()
        self.yaf_integrator.exportIntegrator(self.scene)
        self.yaf_integrator.exportVolumeIntegrator(self.scene)

        yaf_scene.exportRenderSettings(self.yi, self.scene) # must be called last as the params from here will be used by render()

        if scene.gs_type_render == "file":
            
            self.yi.printInfo("Exporter: Rendering to file " + outputFile)

            self.update_stats("", "Rendering to %s" % outputFile)

            self.yi.render(co)

            result = self.begin_result(bStartX, bStartY, x + bStartX, y + bStartY)

            lay = result.layers[0]
            
            if scene.gs_z_channel:
                lay.load_from_file(output + '_zbuffer.' + file_type)
            else:
                lay.load_from_file(outputFile)

            self.end_result(result)

        elif scene.gs_type_render == "into_blender":
            
            import threading

            def progressCallback(command, *args):
                if not self.test_break():
                    if command == "tag":
                        self.tag = args[0]
                    elif command == "progress":
                        self.prog = args[0]
                    self.update_stats("", "%s - %.2f %%" % (self.tag, self.prog))

            def drawAreaCallback(*args):
                x, y, w, h, tile = args
                res = self.begin_result(x, y, w, h)
                try:
                    res.layers[0].rect = tile
                except:
                    pass
                self.update_result(res)

            def flushCallback(*args):
                w, h, tile = args
                res = self.begin_result(0, 0, w, h)
                try:
                    res.layers[0].rect = tile
                except BaseException as e:
                    pass
                self.end_result(res)

            t = threading.Thread( target=self.yi.render,
                                  args=( sizeX, sizeY, 0, 0,
                                  self.preview,
                                  drawAreaCallback,
                                  flushCallback,
                                  progressCallback )
                                 )
            t.start()

            while t.isAlive() and not self.test_break():
                time.sleep(0.2)

            if t.isAlive():
                self.update_stats("", "Aborting...")
                self.yi.abort()
                t.join()
                self.yi.clearAll()
                del self.yi
                self.update_stats("", "Render is aborted")
                return

        self.update_stats("", "Done!")
        
        self.yi.clearAll()
        del self.yi