def main(): parser = argparse.ArgumentParser( description="convert Mitsuba scenes to appleseed format.") parser.add_argument("input_file", metavar="input-file", help="Mitsuba scene (*.xml)") parser.add_argument("output_file", metavar="output-file", help="appleseed scene (*.appleseed)") args = parser.parse_args() # 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) asr.global_logger().set_verbosity_level(asr.LogMessageCategory.Warning) tree = ElementTree() try: tree.parse(args.input_file) except IOError: fatal("Failed to load {0}".format(args.input_file)) project = convert(tree) asr.ProjectFileWriter().write( project, args.output_file, asr.ProjectFileWriterOptions.OmitHandlingAssetFiles)
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)
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()