Commit: 699c280a3f474ed47c7fc861a41a01b9c8641381 Author: Lukas Tönne Date: Sun May 3 19:19:43 2015 +0200 Branches: alembic https://developer.blender.org/rB699c280a3f474ed47c7fc861a41a01b9c8641381
Added a new "Modifiers" display mode for cache libraries, which reads the source cache and then applies modifiers afterward. This only performs non-iterative modifiers, which don't require the passage of time to work (e.g. shrinkwrap). =================================================================== M source/blender/blenkernel/BKE_cache_library.h M source/blender/blenkernel/intern/cache_library.c M source/blender/blenkernel/intern/object_dupli.c M source/blender/makesdna/DNA_cache_library_types.h M source/blender/makesrna/intern/rna_cache_library.c =================================================================== diff --git a/source/blender/blenkernel/BKE_cache_library.h b/source/blender/blenkernel/BKE_cache_library.h index 86dd1dc..435cd7b 100644 --- a/source/blender/blenkernel/BKE_cache_library.h +++ b/source/blender/blenkernel/BKE_cache_library.h @@ -98,7 +98,7 @@ typedef struct CacheProcessContext { } CacheProcessContext; typedef struct CacheProcessData { - int lay; + unsigned int lay; float mat[4][4]; struct DupliCache *dupcache; } CacheProcessData; diff --git a/source/blender/blenkernel/intern/cache_library.c b/source/blender/blenkernel/intern/cache_library.c index cbb68e7..cbb3cbf 100644 --- a/source/blender/blenkernel/intern/cache_library.c +++ b/source/blender/blenkernel/intern/cache_library.c @@ -86,7 +86,7 @@ CacheLibrary *BKE_cache_library_add(Main *bmain, const char *name) BLI_snprintf(cachelib->output_filepath, sizeof(cachelib->output_filepath), "//cache/%s.%s", basename, PTC_get_default_archive_extension()); cachelib->source_mode = CACHE_LIBRARY_SOURCE_SCENE; - cachelib->display_mode = CACHE_LIBRARY_DISPLAY_RESULT; + cachelib->display_mode = CACHE_LIBRARY_DISPLAY_MODIFIERS; cachelib->display_flag = CACHE_LIBRARY_DISPLAY_MOTION | CACHE_LIBRARY_DISPLAY_CHILDREN; cachelib->render_flag = CACHE_LIBRARY_RENDER_MOTION | CACHE_LIBRARY_RENDER_CHILDREN; cachelib->eval_mode = CACHE_LIBRARY_EVAL_REALTIME | CACHE_LIBRARY_EVAL_RENDER; @@ -321,7 +321,7 @@ static bool has_active_cache(CacheLibrary *cachelib) } } - if (cachelib->source_mode == CACHE_LIBRARY_SOURCE_CACHE) { + if (ELEM(cachelib->source_mode, CACHE_LIBRARY_SOURCE_CACHE, CACHE_LIBRARY_DISPLAY_MODIFIERS)) { return true; } @@ -344,7 +344,7 @@ static struct PTCReaderArchive *find_active_cache(Scene *scene, CacheLibrary *ca } } - if (!archive && cachelib->source_mode == CACHE_LIBRARY_SOURCE_CACHE) { + if (!archive && ELEM(cachelib->source_mode, CACHE_LIBRARY_SOURCE_CACHE, CACHE_LIBRARY_DISPLAY_MODIFIERS)) { BKE_cache_archive_input_path(cachelib, filename, sizeof(filename)); archive = PTC_open_reader_archive(scene, filename); } @@ -1179,10 +1179,6 @@ static void shrinkwrap_process(ShrinkWrapCacheModifier *smd, CacheProcessContext ShrinkWrapCacheData shrinkwrap; - /* skip first step and potential backward steps */ - if (frame <= frame_prev) - return; - if (!BKE_cache_modifier_find_strands(data->dupcache, ob, smd->hair_system, NULL, &strands)) return; if (!BKE_cache_modifier_find_object(data->dupcache, smd->target, &target_data)) diff --git a/source/blender/blenkernel/intern/object_dupli.c b/source/blender/blenkernel/intern/object_dupli.c index 1574c4a..b652128 100644 --- a/source/blender/blenkernel/intern/object_dupli.c +++ b/source/blender/blenkernel/intern/object_dupli.c @@ -1717,12 +1717,26 @@ void BKE_dupli_cache_from_group(Scene *scene, Group *group, CacheLibrary *cachel /* ------------------------------------------------------------------------- */ +static void object_dupli_cache_apply_modifiers(Object *ob, Scene *scene, eCacheLibrary_EvalMode eval_mode) +{ + CacheLibrary *cachelib = ob->cache_library; + int frame = scene->r.cfra; + CacheProcessData process_data; + + process_data.lay = ob->lay; + copy_m4_m4(process_data.mat, ob->obmat); + process_data.dupcache = ob->dup_cache; + + BKE_cache_process_dupli_cache(cachelib, &process_data, scene, ob->dup_group, (float)frame, (float)frame, eval_mode); +} + void BKE_object_dupli_cache_update(Scene *scene, Object *ob, EvaluationContext *eval_ctx, float frame) { const eCacheLibrary_EvalMode eval_mode = eval_ctx->mode == DAG_EVAL_RENDER ? CACHE_LIBRARY_EVAL_RENDER : CACHE_LIBRARY_EVAL_REALTIME; bool is_dupligroup = (ob->transflag & OB_DUPLIGROUP) && ob->dup_group; bool is_cached = ob->cache_library && (ob->cache_library->source_mode == CACHE_LIBRARY_SOURCE_CACHE || ob->cache_library->display_mode == CACHE_LIBRARY_DISPLAY_RESULT); + bool do_modifiers = ob->cache_library && ob->cache_library->display_mode == CACHE_LIBRARY_DISPLAY_MODIFIERS; /* cache is a group duplicator feature only */ if (is_dupligroup && is_cached) { @@ -1745,6 +1759,10 @@ void BKE_object_dupli_cache_update(Scene *scene, Object *ob, EvaluationContext * if (!(ob->cache_library->flag & CACHE_LIBRARY_BAKING)) { /* TODO at this point we could apply animation offset */ BKE_cache_read_dupli_cache(ob->cache_library, ob->dup_cache, scene, ob->dup_group, frame, eval_mode, true); + + if (do_modifiers) { + object_dupli_cache_apply_modifiers(ob, scene, eval_mode); + } } ob->dup_cache->flag &= ~DUPCACHE_FLAG_DIRTY; diff --git a/source/blender/makesdna/DNA_cache_library_types.h b/source/blender/makesdna/DNA_cache_library_types.h index 02d73a7..bf15a4c 100644 --- a/source/blender/makesdna/DNA_cache_library_types.h +++ b/source/blender/makesdna/DNA_cache_library_types.h @@ -46,6 +46,7 @@ typedef enum eCacheLibrary_SourceMode { typedef enum eCacheLibrary_DisplayMode { CACHE_LIBRARY_DISPLAY_SOURCE = 0, /* display source data */ CACHE_LIBRARY_DISPLAY_RESULT = 1, /* display result data */ + CACHE_LIBRARY_DISPLAY_MODIFIERS = 2, /* display input with modifiers */ } eCacheLibrary_DisplayMode; typedef enum eCacheLibrary_EvalMode { diff --git a/source/blender/makesrna/intern/rna_cache_library.c b/source/blender/makesrna/intern/rna_cache_library.c index 86d7b3c..8120b4c 100644 --- a/source/blender/makesrna/intern/rna_cache_library.c +++ b/source/blender/makesrna/intern/rna_cache_library.c @@ -750,6 +750,7 @@ static void rna_def_cache_library(BlenderRNA *brna) static EnumPropertyItem display_mode_items[] = { {CACHE_LIBRARY_DISPLAY_SOURCE, "SOURCE", 0, "Source", "Display source data unmodified"}, + {CACHE_LIBRARY_DISPLAY_MODIFIERS, "MODIFIERS", 0, "Modifiers", "Display source data with modifiers applied"}, {CACHE_LIBRARY_DISPLAY_RESULT, "RESULT", 0, "Result", "Display resulting data"}, {0, NULL, 0, NULL, NULL} }; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs