Ejemplo n.º 1
0
    def __start_interactive_render(self, context, depsgraph):
        """
        Start an interactive rendering session.
        """

        # Preconditions.
        assert (self.__interactive_scene_translator is None)
        assert (self.__renderer is None)
        assert (self.__renderer_controller is None)
        assert (self.__tile_callback is None)
        assert (self.__render_thread is None)

        logger.debug("appleseed: Starting interactive rendering")
        
        logger.debug("appleseed: Translating scene for interactive rendering")

        self.__interactive_scene_translator = SceneTranslator.create_interactive_render_translator(depsgraph)
        self.__interactive_scene_translator.translate_scene(self, depsgraph, context)

        project = self.__interactive_scene_translator.as_project

        self.__renderer_controller = InteractiveRendererController()
        self.__tile_callback = asr.BlenderProgressiveTileCallback(self.tag_redraw)

        self.__renderer = asr.MasterRenderer(
            project,
            project.configurations()['interactive'].get_inherited_parameters(),
            [get_stdosl_render_paths()],
            self.__tile_callback)

        self.__restart_interactive_render()
Ejemplo n.º 2
0
    def __start_interactive_render(self, context):
        """
        Start an interactive rendering session.
        """

        # Preconditions.
        assert(self.__interactive_scene_translator is None)
        assert(self.__renderer is None)
        assert(self.__renderer_controller is None)
        assert(self.__tile_callback is None)
        assert(self.__render_thread is None)

        logger.debug("Starting interactive rendering")
        self.__is_interactive = True
        RenderAppleseed.__interactive_session = True

        logger.debug("Translating scene for interactive rendering")

        self.__interactive_scene_translator = SceneTranslator.create_interactive_render_translator(context)
        self.__interactive_scene_translator.translate_scene()

        self.__camera = self.__interactive_scene_translator.camera_translator

        project = self.__interactive_scene_translator.as_project

        self.__renderer_controller = InteractiveRendererController(self.__camera)
        self.__tile_callback = asr.BlenderProgressiveTileCallback(self.tag_redraw)

        self.__renderer = asr.MasterRenderer(project,
                                             project.configurations()['interactive'].get_inherited_parameters(),
                                             [],
                                             self.__renderer_controller,
                                             self.__tile_callback)

        self.__restart_interactive_render()
Ejemplo n.º 3
0
def main():
    # Create a log target that outputs to stderr, and binds it to the renderer's global logger.
    # Eventually you will want to redirect log messages to your own target.
    # For this you will need to subclass appleseed.ILogTarget.
    log_target = asr.ConsoleLogTarget(sys.stderr)

    # It is important to keep log_target alive, as the global logger does not
    # take ownership of it. In this example, we do that by removing the log target
    # when no longer needed, at the end of this function.
    asr.global_logger().add_target(log_target)

    # Build the project.
    project = build_project()

    # Create the master renderer.
    renderer_controller = RendererController()

    # Catch Control-C.
    signal.signal(signal.SIGINT, lambda signal, frame: renderer_controller.abort_rendering())

    resource_search_paths = []
    tile_callback = TileCallback()
    renderer = asr.MasterRenderer(project,
                                  project.configurations()['final'].get_inherited_parameters(),
                                  resource_search_paths,
                                  renderer_controller,
                                  tile_callback)

    # Render the frame.
    if RENDER_ON_THREAD:
        render_thread = RenderThread(renderer)
        render_thread.start()

        while render_thread.isAlive():
            render_thread.join(0.5)  # seconds
    else:
        renderer.render()

    # Save the frame to disk.
    project.get_frame().write_main_image("output/test.png")

    # Save the project to disk.
    asr.ProjectFileWriter().write(project, "output/test.appleseed")

    # Remove the log target we added previosly.
    asr.global_logger().remove_target(log_target)
Ejemplo n.º 4
0
    def __start_final_render(self, scene, project):
        """
        Start a final render.
        """

        # Preconditions.
        assert (self.__renderer is None)
        assert (self.__renderer_controller is None)
        assert (self.__tile_callback is None)
        assert (self.__render_thread is None)

        self.__tile_callback = FinalTileCallback(self, scene)

        self.__renderer_controller = FinalRendererController(
            self, self.__tile_callback)

        self.__renderer = asr.MasterRenderer(
            project,
            project.configurations()['final'].get_inherited_parameters(),
            self.__renderer_controller, self.__tile_callback)

        self.__render_thread = RenderThread(self.__renderer)

        # While debugging, log to the console. This should be configurable.
        log_target = asr.ConsoleLogTarget(sys.stderr)
        asr.global_logger().add_target(log_target)

        # Start render thread and wait for it to finish.
        self.__render_thread.start()

        while self.__render_thread.isAlive():
            self.__render_thread.join(0.5)  # seconds

        # Cleanup.
        asr.global_logger().remove_target(log_target)

        if scene.appleseed.denoise_mode == 'write_outputs':
            project.get_frame().write_main_image(
                os.path.join(scene.appleseed.denoise_output_dir, "output.exr"))

        self.__stop_rendering()