Alembic procedural: remove Generated attribute creation
The main reason for this is to speed up updates by avoid unnecessary copies as the Generated coordinates are a copy of the vertices. Creating this attribute may become optional in the future, with UI parameters to select which attribute to use from the Alembic archive as reference.
This commit is contained in:
parent
6b041ad3d0
commit
55f9014616
|
@ -959,14 +959,6 @@ void AlembicProcedural::read_mesh(AlembicObject *abc_object, Abc::chrono_t frame
|
|||
|
||||
update_attributes(mesh->attributes, cached_data, frame_time);
|
||||
|
||||
/* we don't yet support arbitrary attributes, for now add vertex
|
||||
* coordinates as generated coordinates if requested */
|
||||
if (mesh->need_attribute(scene_, ATTR_STD_GENERATED)) {
|
||||
Attribute *attr = mesh->attributes.add(ATTR_STD_GENERATED);
|
||||
memcpy(
|
||||
attr->data_float3(), mesh->get_verts().data(), sizeof(float3) * mesh->get_verts().size());
|
||||
}
|
||||
|
||||
if (mesh->is_modified()) {
|
||||
bool need_rebuild = mesh->triangles_is_modified();
|
||||
mesh->tag_update(scene_, need_rebuild);
|
||||
|
@ -1053,14 +1045,6 @@ void AlembicProcedural::read_subd(AlembicObject *abc_object, Abc::chrono_t frame
|
|||
|
||||
update_attributes(mesh->subd_attributes, cached_data, frame_time);
|
||||
|
||||
/* we don't yet support arbitrary attributes, for now add vertex
|
||||
* coordinates as generated coordinates if requested */
|
||||
if (mesh->need_attribute(scene_, ATTR_STD_GENERATED)) {
|
||||
Attribute *attr = mesh->attributes.add(ATTR_STD_GENERATED);
|
||||
memcpy(
|
||||
attr->data_float3(), mesh->get_verts().data(), sizeof(float3) * mesh->get_verts().size());
|
||||
}
|
||||
|
||||
if (mesh->is_modified()) {
|
||||
bool need_rebuild = (mesh->triangles_is_modified()) ||
|
||||
(mesh->subd_num_corners_is_modified()) ||
|
||||
|
@ -1110,17 +1094,6 @@ void AlembicProcedural::read_curves(AlembicObject *abc_object, Abc::chrono_t fra
|
|||
|
||||
update_attributes(hair->attributes, cached_data, frame_time);
|
||||
|
||||
/* we don't yet support arbitrary attributes, for now add first keys as generated coordinates if
|
||||
* requested */
|
||||
if (hair->need_attribute(scene_, ATTR_STD_GENERATED)) {
|
||||
Attribute *attr_generated = hair->attributes.add(ATTR_STD_GENERATED);
|
||||
float3 *generated = attr_generated->data_float3();
|
||||
|
||||
for (size_t i = 0; i < hair->num_curves(); i++) {
|
||||
generated[i] = hair->get_curve_keys()[hair->get_curve(i).first_key];
|
||||
}
|
||||
}
|
||||
|
||||
const bool rebuild = (hair->curve_keys_is_modified() || hair->curve_radius_is_modified());
|
||||
hair->tag_update(scene_, rebuild);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue