示例#1
0
ShaderGroup::ShaderGroup(const char* name)
  : ConnectableEntity(g_class_uid, ParamArray())
  , impl(new Impl())
{
    set_name(name);
    clear();
}
示例#2
0
void AssemblyItem::slot_instantiate()
{
    const string instance_name_suggestion =
        get_name_suggestion(
            string(m_assembly.get_name()) + "_inst",
            m_parent.assembly_instances());

    const string instance_name =
        get_entity_name_dialog(
            treeWidget(),
            "Instantiate Assembly",
            "Assembly Instance Name:",
            instance_name_suggestion);

    if (!instance_name.empty())
    {
        auto_release_ptr<AssemblyInstance> assembly_instance(
            AssemblyInstanceFactory::create(
                instance_name.c_str(),
                ParamArray(),
                m_assembly.get_name()));

        m_parent_item->get_assembly_instance_collection_item().add_item(assembly_instance.get());

        m_parent.assembly_instances().insert(assembly_instance);

        m_project_builder.get_project().get_scene()->bump_version_id();
        m_project_builder.notify_project_modification();
    }
}
示例#3
0
auto_release_ptr<Configuration> BaseConfigurationFactory::create_base_final()
{
    auto_release_ptr<Configuration> configuration(new Configuration("base_final"));

    ParamArray& parameters = configuration->get_parameters();

    parameters.insert("spectrum_mode", "rgb");
    parameters.insert("sampling_mode", "qmc");

    parameters.insert("passes", 1);

    parameters.insert("frame_renderer", "generic");
    parameters.insert("tile_renderer", "generic");

    parameters.insert("pixel_renderer", "uniform");
    parameters.dictionaries().insert(
        "uniform_pixel_renderer",
        ParamArray()
            .insert("samples", "64"));

    parameters.insert("sample_renderer", "generic");
    parameters.insert("lighting_engine", "pt");

    return configuration;
}
示例#4
0
DisneyLayeredBRDF::DisneyLayeredBRDF(const DisneyMaterial* parent)
  : BSDF("disney_layered_brdf", Reflective, BSDFSample::Diffuse | BSDFSample::Glossy, ParamArray())
  , m_parent(parent)
  , m_brdf(DisneyBRDFFactory().create("disney_brdf", ParamArray()))
{
    assert(parent);
}
void AssemblyCollectionItem::slot_create()
{
    const string assembly_name =
        get_entity_name_dialog(
            treeWidget(),
            "Create Assembly",
            "Assembly Name:",
            make_unique_name("assembly", m_parent.assemblies()));

    // todo: schedule creation of assembly when rendering.
    if (!assembly_name.empty())
    {
        auto_release_ptr<Assembly> assembly(
            AssemblyFactory().create(assembly_name.c_str(), ParamArray()));

        AssemblyItem* assembly_item =
            static_cast<AssemblyItem*>(m_parent_item->add_item(assembly.get()));

        m_parent.assemblies().insert(assembly);

        const string assembly_instance_name =
            make_unique_name(
                assembly_name + "_inst",
                m_parent.assembly_instances());

        assembly_item->instantiate(assembly_instance_name);

        m_editor_context.m_project_builder.slot_notify_project_modification();
    }
}
示例#6
0
TestFixtureBaseProjectHolder::TestFixtureBaseProjectHolder()
    : m_project(ProjectFactory::create("project"))
{
    m_project->set_scene(SceneFactory::create());

    m_project->get_scene()->assemblies().insert(
        AssemblyFactory().create("assembly", ParamArray()));
};
示例#7
0
auto_release_ptr<Project> DefaultProjectFactory::create()
{
    // Create a project.
    auto_release_ptr<Project> project(ProjectFactory::create("default"));

    // Add default configurations to the project.
    project->add_default_configurations();

    // Create a scene.
    auto_release_ptr<Scene> scene(SceneFactory::create());

    // Create an assembly.
    auto_release_ptr<Assembly> assembly(AssemblyFactory().create("assembly"));

    // Create an instance of the assembly and insert it into the scene.
    scene->assembly_instances().insert(
        AssemblyInstanceFactory::create(
            "assembly_inst",
            ParamArray(),
            "assembly"));

    // Insert the assembly into the scene.
    scene->assemblies().insert(assembly);

    // Create a pinhole camera and attach it to the scene.
    scene->set_camera(
        PinholeCameraFactory().create(
            "camera",
            ParamArray()
                .insert("film_dimensions", "0.01024 0.00576")
                .insert("focal_length", "0.035")));

    // Create a frame (quarter 2K resolution) and attach it to the project.
    project->set_frame(
        FrameFactory::create(
            "beauty",
            ParamArray()
                .insert("camera", scene->get_camera()->get_name())
                .insert("resolution", "1024 576")));

    // Attach the scene to the project.
    project->set_scene(scene);

    // Return the newly created project.
    return project;
}
示例#8
0
 explicit Impl(Entity* parent)
   : m_environment_edfs(parent)
   , m_environment_shaders(parent)
   , m_default_surface_shader(
         PhysicalSurfaceShaderFactory().create(
             "default_surface_shader",
             ParamArray()))
 {
 }
ParamArray& ParamArray::push(const char* name)
{
    assert(name);

    if (!dictionaries().exist(name))
        dictionaries().insert(name, ParamArray());

    return static_cast<ParamArray&>(dictionaries().get(name));
}
示例#10
0
BSSRDF::BSSRDF(
    const char*             name,
    const ParamArray&       params)
  : ConnectableEntity(g_class_uid, params)
  , impl(new Impl())
{
    impl->m_brdf =
        LambertianBRDFFactory().create(
            (string(name) + "_brdf").c_str(),
            ParamArray().insert("reflectance", "1.0"));

    set_name(name);
}
示例#11
0
void AssemblyItem::do_instantiate(const string& name)
{
    auto_release_ptr<AssemblyInstance> assembly_instance(
        AssemblyInstanceFactory::create(
            name.c_str(),
            ParamArray(),
            m_assembly.get_name()));

    m_parent_item->get_assembly_instance_collection_item().add_item(assembly_instance.get());
    m_parent.assembly_instances().insert(assembly_instance);

    m_editor_context.m_project.get_scene()->bump_version_id();
    m_editor_context.m_project_builder.slot_notify_project_modification();
}
const Material& MaterialCollectionItem::create_default_disney_material(const string& material_name)
{
    auto_release_ptr<Material> material =
        DisneyMaterialFactory().create(material_name.c_str(), ParamArray());

    static_cast<DisneyMaterial*>(material.get())->add_new_default_layer();

    Material* material_ptr = material.get();
    add_item(material_ptr);

    EntityTraits<Material>::insert_entity(material, m_parent);
    m_editor_context.m_project_builder.notify_project_modification();

    return *material_ptr;
}
示例#13
0
void ObjectItem::do_instantiate(const string& name)
{
    auto_release_ptr<ObjectInstance> object_instance(
        ObjectInstanceFactory::create(
            name.c_str(),
            ParamArray(),
            m_entity->get_name(),
            Transformd::identity(),
            StringDictionary()));

    m_parent_item->add_item(object_instance.get());
    m_parent.object_instances().insert(object_instance);

    m_parent.bump_version_id();
    m_project_builder.notify_project_modification();
}
void ObjectCollectionItem::insert_objects(const string& path) const
{
    const string base_object_name =
        bf::path(path).replace_extension().filename().string();

    ParamArray params;
    params.insert("filename", path);

    SearchPaths search_paths;
    MeshObjectArray mesh_objects;

    if (!MeshObjectReader().read(
            search_paths,
            base_object_name.c_str(),
            params,
            mesh_objects))
        return;

    for (size_t i = 0; i < mesh_objects.size(); ++i)
    {
        MeshObject* object = mesh_objects[i];

        m_parent_item->add_item(object);

        m_parent.objects().insert(auto_release_ptr<Object>(object));

        const string object_instance_name = string(object->get_name()) + "_inst";

        auto_release_ptr<ObjectInstance> object_instance(
            ObjectInstanceFactory::create(
                object_instance_name.c_str(),
                ParamArray(),
                object->get_name(),
                Transformd::identity(),
                StringDictionary()));

        m_parent_item->add_item(object_instance.get());

        m_parent.object_instances().insert(object_instance);
    }

    if (!mesh_objects.empty())
    {
        m_parent.bump_version_id();
        m_editor_context.m_project_builder.slot_notify_project_modification();
    }
}
示例#15
0
ShaderConnection::ShaderConnection(
    const char* src_layer,
    const char* src_param,
    const char* dst_layer,
    const char* dst_param)
  : Entity(g_class_uid, ParamArray())
  , impl(new Impl)
{
    impl->m_src_layer = src_layer;
    impl->m_src_param = src_param;
    impl->m_dst_layer = dst_layer;
    impl->m_dst_param = dst_param;

    const string entity_name = 
        string(get_src_layer()) + ":" + get_src_param() + "->" + get_dst_layer() + ":" + get_dst_param();

    set_name(entity_name.c_str());
}
示例#16
0
// Create a new instance of the default project.
auto_release_ptr<Project> DefaultProjectFactory::create()
{
    // Create a project.
    auto_release_ptr<Project> project(ProjectFactory::create("default"));

    // Add default configurations to the project.
    project->add_default_configurations();

    // Create a scene.
    auto_release_ptr<Scene> scene(SceneFactory::create());

    // Create an assembly.
    auto_release_ptr<Assembly> assembly(
        AssemblyFactory::create("assembly", ParamArray()));

    // Create an instance of the assembly and insert it into the scene.
    scene->assembly_instances().insert(
        AssemblyInstanceFactory::create(
            "assembly_inst",
            ParamArray(),
            *assembly,
            Transformd(Matrix4d::identity())));

    // Insert the assembly into the scene.
    scene->assemblies().insert(assembly);

    //
    // Camera.
    //

    {
        // Create a pinhole camera.
        // Film dimensions are 0.980 in × 0.735 in (24.892 mm x 18.669 mm).
        // Reference: http://en.wikipedia.org/wiki/Aspect_ratio_(image).
        ParamArray params;
        params.insert("film_dimensions", "0.024892 0.018669");
        params.insert("focal_length", "0.035");
        auto_release_ptr<Camera> camera(
            PinholeCameraFactory().create("camera", params));

        // Attach the camera to the scene.
        scene->set_camera(camera);
    }

    //
    // Frame.
    //

    {
        // Create a frame.
        ParamArray params;
        params.insert("camera", scene->get_camera()->get_name());
        params.insert("resolution", "640 480");
        params.insert("color_space", "srgb");
        auto_release_ptr<Frame> frame(FrameFactory::create("beauty", params));

        // Attach the frame to the project.
        project->set_frame(frame);
    }

    // Attach the scene to the project.
    project->set_scene(scene);

    // Return the newly created project.
    return project;
}
示例#17
0
BoundingBoxObject::BoundingBoxObject(const char* name, const GAABB3& bbox)
    : Object(name, ParamArray())
    , m_bbox(bbox)
    , m_lazy_region_kit(&m_region_kit)
{
}