Пример #1
0
bool Material::on_frame_begin(
    const Project&      project,
    const Assembly&     assembly)
{
    m_surface_shader = get_uncached_surface_shader();
    m_bsdf = get_uncached_bsdf();
    m_edf = get_uncached_edf();
    m_alpha_map = get_uncached_alpha_map();

    const Source* displacement_source = m_inputs.source("displacement_map");

    if (displacement_source)
    {
        if (dynamic_cast<const TextureSource*>(displacement_source) == 0)
        {
            RENDERER_LOG_ERROR(
                "while defining material \"%s\": a texture instance must be bound "
                "to the \"displacement_map\" input; disabling displacement map for this material.",
                get_name());
        }
        else
        {
            const TextureSource* displacement_map = static_cast<const TextureSource*>(displacement_source);
            const Texture& texture = displacement_map->get_texture_instance().get_texture();

            if (texture.get_color_space() != ColorSpaceLinearRGB)
            {
                RENDERER_LOG_WARNING(
                    "while defining material \"%s\": color space for displacement map \"%s\" "
                    "should be \"%s\" but is \"%s\" instead; expect artifacts and/or slowdowns.",
                    get_name(),
                    texture.get_name(),
                    color_space_name(ColorSpaceLinearRGB),
                    color_space_name(texture.get_color_space()));
            }

            // Retrieve the displacement method and create the normal modifier.
            const string displacement_method =
                m_params.get_required<string>("displacement_method", "bump");
            if (displacement_method == "bump")
            {
                const double amplitude = m_params.get_optional<double>("bump_amplitude", 1.0);
                m_normal_modifier = new BumpMappingModifier(displacement_map, 2.0, amplitude);
            }
            else if (displacement_method == "normal")
                m_normal_modifier = new NormalMappingModifier(displacement_map);
            else
            {
                RENDERER_LOG_ERROR(
                    "while defining material \"%s\": invalid value \"%s\" for parameter "
                    "\"displacement_method\"; disabling displacement map for this material.",
                    get_name(),
                    displacement_method.c_str());
            }
        }
    }

    return true;
}
Пример #2
0
bool Material::on_frame_begin(
    const Project&      project,
    const Assembly&     assembly,
    AbortSwitch*        abort_switch)
{
    m_shade_alpha_cutouts = m_params.get_optional<bool>("shade_alpha_cutouts", false);

    m_surface_shader = get_uncached_surface_shader();
    m_alpha_map = get_uncached_alpha_map();

    return true;
}
Пример #3
0
bool Material::on_frame_begin(
    const Project&      project,
    const Assembly&     assembly,
    IAbortSwitch*       abort_switch)
{
    assert(!m_has_render_data);

    m_render_data.m_surface_shader = get_uncached_surface_shader();
    if (m_render_data.m_surface_shader == 0)
        m_render_data.m_surface_shader = project.get_scene()->get_default_surface_shader();
    m_render_data.m_bsdf = 0;
    m_render_data.m_bssrdf = 0;
    m_render_data.m_edf = 0;
    m_render_data.m_alpha_map = get_uncached_alpha_map();
#ifdef APPLESEED_WITH_OSL
    m_render_data.m_shader_group = 0;
#endif
    m_render_data.m_basis_modifier = 0;
    m_has_render_data = true;

    return true;
}
Пример #4
0
bool Material::on_frame_begin(
    const Project&          project,
    const BaseGroup*        parent,
    OnFrameBeginRecorder&   recorder,
    IAbortSwitch*           abort_switch)
{
    assert(!m_has_render_data);

    if (!ConnectableEntity::on_frame_begin(project, parent, recorder, abort_switch))
        return false;

    m_render_data.m_surface_shader = get_uncached_surface_shader();
    if (m_render_data.m_surface_shader == 0)
        m_render_data.m_surface_shader = project.get_scene()->get_default_surface_shader();
    m_render_data.m_bsdf = 0;
    m_render_data.m_bssrdf = 0;
    m_render_data.m_edf = 0;
    m_render_data.m_alpha_map = get_uncached_alpha_map();
    m_render_data.m_shader_group = 0;
    m_render_data.m_basis_modifier = 0;
    m_has_render_data = true;

    return true;
}