diff options
Diffstat (limited to 'source/blender/makesrna')
-rw-r--r-- | source/blender/makesrna/intern/rna_cachefile.c | 27 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_modifier.c | 92 |
2 files changed, 118 insertions, 1 deletions
diff --git a/source/blender/makesrna/intern/rna_cachefile.c b/source/blender/makesrna/intern/rna_cachefile.c index f9275ef1993..00cd95c4492 100644 --- a/source/blender/makesrna/intern/rna_cachefile.c +++ b/source/blender/makesrna/intern/rna_cachefile.c @@ -174,6 +174,33 @@ static void rna_def_cachefile(BlenderRNA *brna) RNA_def_property_ui_text( prop, "Object Paths", "Paths of the objects inside the Alembic archive"); + /* ----------------- Alembic Velocity Attribute ----------------- */ + + prop = RNA_def_property(srna, "velocity_name", PROP_STRING, PROP_NONE); + RNA_def_property_ui_text(prop, + "Velocity Attribute", + "Name of the Alembic attribute used for generating motion blur data"); + RNA_def_struct_name_property(srna, prop); + RNA_def_property_update(prop, 0, "rna_CacheFile_update"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + + static const EnumPropertyItem velocity_unit_items[] = { + {CACHEFILE_VELOCITY_UNIT_SECOND, "SECOND", 0, "Second", ""}, + {CACHEFILE_VELOCITY_UNIT_FRAME, "FRAME", 0, "Frame", ""}, + {0, NULL, 0, NULL, NULL}, + }; + + prop = RNA_def_property(srna, "velocity_unit", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "velocity_unit"); + RNA_def_property_enum_items(prop, velocity_unit_items); + RNA_def_property_ui_text( + prop, + "Velocity Unit", + "Define how the velocity vectors are interpreted with regard to time, 'frame' means " + "the delta time is 1 frame, 'second' means the delta time is 1 / FPS"); + RNA_def_property_update(prop, 0, "rna_CacheFile_update"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_define_lib_overridable(false); rna_def_cachefile_object_paths(brna, prop); diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index d4b1009df4d..ea33307060c 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -113,7 +113,7 @@ const EnumPropertyItem rna_enum_object_modifier_type_items[] = { {0, "", 0, N_("Generate"), ""}, {eModifierType_Array, "ARRAY", - ICON_MOD_ARRAY, + ICON_MOD_ARRAY, "Array", "Create copies of the shape with offsets"}, {eModifierType_Bevel, @@ -1699,6 +1699,51 @@ static bool rna_Modifier_show_expanded_get(PointerRNA *ptr) return md->ui_expand_flag & (1 << 0); } +static int rna_MeshSequenceCacheModifier_has_velocity_get(PointerRNA *ptr) +{ +# ifdef WITH_ALEMBIC + MeshSeqCacheModifierData *mcmd = (MeshSeqCacheModifierData *)ptr->data; + return ABC_has_vec3_array_property_named(mcmd->reader, mcmd->cache_file->velocity_name); +# else + return false; + UNUSED_VARS(ptr); +# endif +} + +static int rna_MeshSequenceCacheModifier_read_velocity_get(PointerRNA *ptr) +{ +# ifdef WITH_ALEMBIC + MeshSeqCacheModifierData *mcmd = (MeshSeqCacheModifierData *)ptr->data; + + if (mcmd->num_vertices == 0) { + return 0; + } + + if (mcmd->vertex_velocities) { + MEM_freeN(mcmd->vertex_velocities); + } + + mcmd->vertex_velocities = MEM_mallocN(sizeof(MeshCacheVertexVelocity) * mcmd->num_vertices, + "Mesh Cache Velocities"); + + int num_read = ABC_read_velocity_cache(mcmd->reader, + mcmd->cache_file->velocity_name, + mcmd->last_lookup_time, + mcmd->velocity_scale * mcmd->velocity_delta, + mcmd->num_vertices, + (float *)mcmd->vertex_velocities); + + if (num_read == -1 || num_read != mcmd->num_vertices) { + return false; + } + + return true; +# else + return false; + UNUSED_VARS(ptr); +# endif +} + #else /* NOTE: *MUST* return subdivision_type property. */ @@ -6066,6 +6111,22 @@ static void rna_def_modifier_meshcache(BlenderRNA *brna) RNA_define_lib_overridable(false); } +static void rna_def_mesh_cache_velocities(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna = RNA_def_struct(brna, "MeshCacheVertexVelocity", NULL); + RNA_def_struct_ui_text(srna, "Mesh Cache Velocity", "Velocity attribute of an Alembic mesh"); + RNA_def_struct_ui_icon(srna, ICON_VERTEXSEL); + + prop = RNA_def_property(srna, "velocity", PROP_FLOAT, PROP_VELOCITY); + RNA_def_property_array(prop, 3); + RNA_def_property_float_sdna(prop, NULL, "vel"); + RNA_def_property_ui_text(prop, "Velocity", ""); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); +} + static void rna_def_modifier_meshseqcache(BlenderRNA *brna) { StructRNA *srna; @@ -6108,6 +6169,35 @@ static void rna_def_modifier_meshseqcache(BlenderRNA *brna) RNA_def_property_update(prop, 0, "rna_Modifier_update"); + prop = RNA_def_property(srna, "velocity_scale", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "velocity_scale"); + RNA_def_property_range(prop, 0.0f, FLT_MAX); + RNA_def_property_ui_text( + prop, + "Velocity Scale", + "Multiplier used to control the magnitude of the velocity vectors for time effects"); + RNA_def_property_update(prop, 0, "rna_Modifier_update"); + + /* -------------------------- Velocity Vectors -------------------------- */ + + prop = RNA_def_property(srna, "vertex_velocities", PROP_COLLECTION, PROP_NONE); + RNA_def_property_collection_sdna(prop, NULL, "vertex_velocities", "num_vertices"); + RNA_def_property_struct_type(prop, "MeshCacheVertexVelocity"); + RNA_def_property_ui_text( + prop, "Fluid Mesh Vertices", "Vertices of the fluid mesh generated by simulation"); + + rna_def_mesh_cache_velocities(brna); + + prop = RNA_def_property(srna, "has_velocity", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_ui_text(prop, "Has Velocity Cache", ""); + RNA_def_property_boolean_funcs(prop, "rna_MeshSequenceCacheModifier_has_velocity_get", NULL); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + + prop = RNA_def_property(srna, "read_velocity", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_ui_text(prop, "Read Velocity Cache", ""); + RNA_def_property_boolean_funcs(prop, "rna_MeshSequenceCacheModifier_read_velocity_get", NULL); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_define_lib_overridable(false); } |