March 17, 2015, 16:05 (GMT) |
Removed the now redundant "Read" toggle from cache libraries. At this point the reading is toggled on the side of group duplicators. |
March 17, 2015, 15:38 (GMT) |
Removed the explicit duplicache rebuild operator. The cache is now updated on frame changes automatically, the operator should no longer be needed. |
March 17, 2015, 15:33 (GMT) |
Removed unused deprecated functions for cache library. |
March 17, 2015, 15:28 (GMT) |
Sanity check for dupligroup caching functions. |
March 17, 2015, 15:17 (GMT) |
Use a new flag in duplicator objects to enable cache reading and avoid unnecessary dependencies. This flag will replace the current "read" mode on cache libraries. Beside enabling cache reading, it also disables the current "fake" dependencies between duplicators and their group objects. This is exploiting the layer visibility mechanism in depsgraph to ensure that animated group objects get evaluated when used by a visible duplicator, even when they are not themselves visible. These dependencies cause group object updates even if the duplicator is using cached results. To avoid this unnecessary overhead and make caching worthwhile we rebuild depsgraph without these relations when using the cache instead. |
March 17, 2015, 08:36 (GMT) |
Enable frame updates of duplicache through use of an invalidation flag. |
March 16, 2015, 17:48 (GMT) |
Disable additional depsgraph tagging through cache libraries. This code is outdated due to changes in reading code and obscures some genuine depsgraph behavior. |
March 16, 2015, 11:15 (GMT) |
Mesh overrides for duplis from cached Alembic data. If a duplicator has cached data it will now replace the derivedFinal mesh of objects with the cached version for drawing. This is a compromise atm: It would be better to actually draw derived meshes directly, so that we don't have to modify objects. Then we could also have multiple different instances of the same orignal object (in whatever way these might be defined). DNA Objects would then be totally separate from duplis, but at this point the drawing and render code makes this unfeasible. |
March 16, 2015, 10:13 (GMT) |
Mesh storage and reading in child objects for dupligroups. The layout of the Alembic files resembles the DNA structure in Blender: - On the top level (under the top/root node) there are Abc::Objects for Blender ID datablocks (currently Object and Group) - Objects store final data (DerivedMesh) and later simulation results etc. - Groups store their full duplilists for instancing. Currently there is no recursive nesting of groups, since this would limit duplis to dupligroups and exclude e.g. duplifaces. On reading the duplilist gets reconstructed and stored in the DupliCache for a duplicator empty (the group instance). DerivedMesh data is stored in a hash table for each instanciated object and can later replace finalDM in drawing and rendering. |
March 16, 2015, 08:43 (GMT) |
Simplification of the archive init functions in writers and readers. Now the base types for readers/writers are not nominally forming the interface any more (they may be removed entirely later). This makes possible a cleaner init method directly in the Abc Writer/Reader classes. Further work may be required in this area. |
March 14, 2015, 16:39 (GMT) |
Moved the dupli cache reading code into a AbcDupligroupReader class. This is more in line with how readers work in the Blender Alembic implementation elsewhere. Generally, readers are less persistent than writers: they are created whenever cache results need to be updated (e.g. on frame changes) and discarded afterward. Writers OTOH stay alive during the whole baking job, since they keep the references to Alembic Writer instances and can only be deleted once the writing for that part is done. |
March 14, 2015, 14:58 (GMT) |
Store and apply dupli object transforms in the Alembic cache. Note that the cache stores dupli matrices without the final parent transform, since it only knows about the group itself. The duplicator obmat is applied to the duplis after reading the cache. |
March 14, 2015, 14:04 (GMT) |
Handle dupli cache on object copy and freeing. |
March 14, 2015, 13:41 (GMT) |
Updated cache reading function for the new duplilist structure. Now we store duplilists entirely inside a single alembic object for the group. This allows using all the generated duplis, which would be difficult if the alembic file had to define all the possible recursive dupli relations that Blender allows, beside straightforward Group duplis. |
March 14, 2015, 12:48 (GMT) |
Merge branch 'master' into alembic_pointcache |
March 13, 2015, 17:04 (GMT) |
Use a nested Object writer to store the Object ID blocks used by dupli lists. |
March 13, 2015, 16:34 (GMT) |
Better dupligroup Alembic writer. Uses the duplilist generated by Blender to define instances, instead of recreating the group layout. This omits some information about actual structure of the DNA, which might be useful later on. The main problem is that the duplilist itself does not encode this, so it's a tradeoff between either including the Group structure or omitting the other dupli types, like face, vertex, particle duplis. |
March 13, 2015, 15:40 (GMT) |
Alternative dupli generator function for creating duplis in a group without a specific parent. |
March 12, 2015, 17:03 (GMT) |
Some disabled code to enable automatic cache updates on every duplilist creation call. This is executed *a lot* (even for simple things such as viewport panning), so the code is probably not suitable in this form. At least it could do a frame comparison to avoid unnecessary updates. |
March 12, 2015, 16:54 (GMT) |
Use a cached group only when a CacheLibrary is actually available. Otherwise the regular duplilist generator is used. |
|