Example #1
0
int main()
{
    // Create a log target that outputs to stderr, and binds it to the renderer's global logger.
    // Eventually you will probably want to redirect log messages to your own target. For this
    // you will need to subclass foundation::LogTargetBase (foundation/utility/log/logtargetbase.h).
    std::auto_ptr<asf::LogTargetBase> log_target(asf::create_console_log_target(stderr));
    asr::global_logger().add_target(log_target.get());

    // Build the project.
    asf::auto_release_ptr<asr::Project> project(build_project());

    // Create the master renderer.
    asr::DefaultRendererController renderer_controller;
    asr::MasterRenderer renderer(
        project.ref(),
        project->configurations().get_by_name("final")->get_inherited_parameters(),
        &renderer_controller);

    // Render the frame.
    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.ref(), "output/test.appleseed");

    return 0;
}
Example #2
0
int main()
{
    // Create a log target that outputs to stderr, and binds it to the renderer's global logger.
    // Eventually you will probably want to redirect log messages to your own target. For this
    // you will need to implement foundation::ILogTarget (foundation/utility/log/ilogtarget.h).
    std::auto_ptr<asf::ILogTarget> log_target(asf::create_console_log_target(stderr));
    asr::global_logger().add_target(log_target.get());

    // Print appleseed's version string.
    RENDERER_LOG_INFO("%s", asf::Appleseed::get_synthetic_version_string());

    // Build the project.
    asf::auto_release_ptr<asr::Project> project(build_project());

    // Create the master renderer.
    asr::DefaultRendererController renderer_controller;
    std::auto_ptr<asr::MasterRenderer> renderer(
        new asr::MasterRenderer(
            project.ref(),
            project->configurations().get_by_name("final")->get_inherited_parameters(),
            &renderer_controller));

    // Render the frame.
    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.ref(), "output/test.appleseed");

    // Make sure to delete the master renderer before the project and the logger / log target.
    renderer.reset();

    return 0;
}
int AppleseedRenderer::Render(
    TimeValue               time,
    Bitmap*                 bitmap,
    FrameRendParams&        frame_rend_params,
    HWND                    hwnd,
    RendProgressCallback*   progress_cb,
    ViewParams*             view_params)
{
    SuspendAll suspend(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE);

    m_time = time;

    if (view_params)
        m_view_params = *view_params;

    if (m_view_node)
        get_view_params_from_view_node(m_view_params, m_view_node, time);

    // Retrieve and tweak renderer settings.
    RendererSettings renderer_settings = m_settings;
    if (m_rend_params.inMtlEdit)
    {
        renderer_settings.m_pixel_samples = m_rend_params.mtlEditAA ? 32 : 4;
        renderer_settings.m_passes = 1;
        renderer_settings.m_gi = true;
        renderer_settings.m_background_emits_light = false;
    }

    // Collect the entities we're interested in.
    if (progress_cb)
        progress_cb->SetTitle(_T("Collecting Entities..."));
    m_entities.clear();
    MaxSceneEntityCollector collector(m_entities);
    collector.collect(m_scene);

    // Call RenderBegin() on all object instances.
    render_begin(m_entities.m_objects, m_time);

    // Build the project.
    if (progress_cb)
        progress_cb->SetTitle(_T("Building Project..."));
    asf::auto_release_ptr<asr::Project> project(
        build_project(
            m_entities,
            m_default_lights,
            m_view_params,
            m_rend_params,
            frame_rend_params,
            renderer_settings,
            bitmap,
            time));

    if (m_rend_params.inMtlEdit)
    {
        // Write the project to disk, useful to debug material previews.
        // asr::ProjectFileWriter::write(project.ref(), "MaterialEditor.appleseed");

        // Render the project.
        if (progress_cb)
            progress_cb->SetTitle(_T("Rendering..."));
        render(project.ref(), m_settings, bitmap, progress_cb);
    }
    else
    {
        // Write the project to disk.
        if (m_settings.m_output_mode == RendererSettings::OutputMode::SaveProjectOnly ||
            m_settings.m_output_mode == RendererSettings::OutputMode::SaveProjectAndRender)
        {
            if (progress_cb)
                progress_cb->SetTitle(_T("Writing Project To Disk..."));
            asr::ProjectFileWriter::write(
                project.ref(),
                wide_to_utf8(m_settings.m_project_file_path).c_str());
        }

        // Render the project.
        if (m_settings.m_output_mode == RendererSettings::OutputMode::RenderOnly ||
            m_settings.m_output_mode == RendererSettings::OutputMode::SaveProjectAndRender)
        {
            if (progress_cb)
                progress_cb->SetTitle(_T("Rendering..."));
            if (m_settings.m_low_priority_mode)
            {
                asf::ProcessPriorityContext background_context(
                    asf::ProcessPriority::ProcessPriorityLow,
                    &asr::global_logger());
                render(project.ref(), m_settings, bitmap, progress_cb);
            }
            else
            {
                render(project.ref(), m_settings, bitmap, progress_cb);
            }
        }
    }

    if (progress_cb)
        progress_cb->SetTitle(_T("Done."));

    // Success.
    return 1;
}