Revision 5347aa4 by Bastien Montagne June 19, 2017, 12:43 (GMT) |
Fix compiler warnings from own recent rB0d5c7e5e36b9. |
Revision 1addac8 by Bastien Montagne June 19, 2017, 12:43 (GMT) |
Fix (unreported) bad copying of Ocean modifier. Was needlessly complicated code, forgot to copy a value (foam_fade), and was utterly leaking memory! |
Revision fbff09b by Sergey Sharybin June 19, 2017, 11:23 (GMT) |
Depsgraph: Synchronize selection from original scene to copied-on-write one This makes it possible to select objects in the viewport. Selection in edit mode is still tricky, mainly because currently such update would require tagging batch as updated, which is not possible with using just and original object because it will never have batch. Possible solution here would be to introduce some "batch" or "render" component to depsgraph ID node for objects, so we can tag batch for update via depsgraph tagging API. |
Revision 802027f by Sergey Sharybin June 19, 2017, 11:21 (GMT) |
Depsgraph: Initial groundwork for copy-on-write support < Dependency graph Copy-on-Write > -------------------------------- ^__^ (oo)_______ (__) )/ ||----w | || || This is an initial commit of Copy-on-write support added to dependency graph. Main priority for now: get playback (Alt-A) and all operators (selection, transform etc) to work with the new concept of clear separation between evaluated data coming from dependency graph and original data coming from .blend file (and stored in bmain). = How does this work? = The idea is to support Copy-on-Write on the ID level. This means, we duplicate the whole ID before we cann it's evaluaiton function. This is currently done in the following way: - At the depsgraph construction time we create "shallow" copy of the ID datablock, just so we know it's pointer in memory and can use for function bindings. - At the evaluaiton time, the copy of ID get's "expanded" (needs a better name internally, so it does not conflict with expanding datablocks during library linking), which means the content of the datablock is being copied over and all IDs are getting remapped to the copied ones. Currently we do the whole copy, in the future we will support some tricks here to prevent duplicating geometry arrays (verts, edges, loops, faces and polys) when we don't need that. - Evaluation functions are operating on copied datablocks and never touching original datablock. - There are some cases when we need to know non-ID pointers for function bindings. This mainly applies to scene collections and armatures. The idea of dealing with this is to "expand" copy-on-write datablock at the dependency graph build time. This might introduce some slowdown to the dependency graph construction time, but allows us to have minimal changes in the code and avoid any hash look-up from evaluation function (one of the ideas to avoid using pointers as function bindings is to pass name of layer or a bone to the evaluation function and look up actual data based on that name). Currently there is a special function in depsgraph which does such a synchronization, in the future we might want to make it more generic. At some point we need to synchronize copy-on-write version of datablock with the original version. This happens, i.e., when we change active object or change selection. We don't want any actual evaluation of update flush happening for such thins, so now we have a special update tag: DEG_id_tag_update((id, DEG_TAG_COPY_ON_WRITE) - For the render engines we now have special call for the dependency graph to give evaluated datablock for the given original one. This isn't fully ideal but allows to have Cycles viewport render. This is definitely a subject for further investigation / improvement. This call will tag copy-on-write component tagged for update without causing updates to be flushed to any other objects, causing chain reaction of updates. This tag is handy when selection in the scene changes. This basically summarizes ideas underneath this commit. The code should be reasonably documented. Here is a demo of dependency graph with all copy-on-write stuff in it: https://developer.blender.org/F635468 = What to expect to (not) work? = - Only meshes are properly-ish aware of copy-on-write currently, Non-mesh geometry will probably crash or will not work at all. - Armatures will need similar depsgraph built-time expansion of the copied datablock. - There are some extra tags / relations added, to keep things demo-able but which are slowing things down for evaluation. - Edit mode works for until click selection is used (due to the selection code using EditDerivedMesh created ad-hoc). - Lots of tools will lack tagging synchronization of copied datablock for sync with original ID. = How to move forward? = There is some tedious work related on going over all the tools, checking whether they need to work with original or final evaluated object and make the required changes. Additionally, there need synchronization tag done in fair amount of tools and operators as well. For example, currently it's not possible to change render engine without re-opening the file or forcing dependency graph for re-build via python console. There is also now some thoughts required about copying evaluated properties between objects or from collection to a new object. Perhaps easiest way would be to move base flag flush to Object ID node and tag new objects for update instead of doing manual copy. here is some WIP patch which moves such evaluaiton / flush: https://developer.blender.org/F635479 Lots of TODOs in the code, with possible optimization. = How to test? = This is a feature under heavy development, so obviously it is disabled by default. The only reason it goes to 2.8 branch is to avoid possible merge hell. In order to enable this feature use WITH_DEPSGRAPH_COPY_ON_WRITE CMake configuration option. |
Revision e917bc5 by Bastien Montagne June 19, 2017, 10:55 (GMT) |
Fix (unreported) bad copying code in Mesh Deform modifier. |
Revision 0d5c7e5 by Bastien Montagne June 19, 2017, 10:25 (GMT) |
Fix (unreported) Dynamic Paint modifier not increasing ID usercount in copy function. *Sigh* One more example of why we should keep ID management handling in as few places as possible! It's impossible to keep more than a few places in sync regarding which ID pointer is refcounted etc. |
Revision e9aaf5e by Bastien Montagne June 19, 2017, 10:21 (GMT) |
Fix (unreported) memory leak in Fluid modifier copying. Also generally simplify/sanitize this copy code. |
Revision b4d053e by Campbell Barton June 19, 2017, 10:18 (GMT) |
Gawain API naming refactor Use consistent prefix for gawain API names as well as some abbreviations to avoid over-long names, see: D2678 |
Revision 349946b by Campbell Barton June 19, 2017, 10:09 (GMT) |
Cleanup: quiet warnings |
Revision 33e5163 by Sergey Sharybin June 19, 2017, 09:14 (GMT) |
CMake: Remove unused legacy depsgraph option We don't have legacy depsgraph anymore, no reason to keep the option. |
Revision 4046f3a by Campbell Barton June 19, 2017, 09:01 (GMT) |
Manipulator: use ui-scale for widgets |
Revision 5a029d7 by Clément Foucault June 19, 2017, 08:47 (GMT) |
Eevee: Add data display for planar reflection. Maybe not very useful but it's here for feature parity with the other probes. The fragment shader clipping is here because I'm lazy and don't want to creating a proper quad Batch. |
Revision bd9a328 by Clément Foucault June 19, 2017, 08:47 (GMT) |
Eevee: Fix Planar Probe offset changing influence calculation. |
Revision 0993af5 by Clément Foucault June 19, 2017, 08:47 (GMT) |
Planar Probe: Add UI, 3d view Display and change defaults. |
Revision 3e4b9d2 by Clément Foucault June 19, 2017, 08:47 (GMT) |
Eevee: Initial implementation of planar reflections. Still pretty barebone: No roughness support, No normal distortion support. |
Revision 5c67ac2 by Clément Foucault June 19, 2017, 08:47 (GMT) |
Eevee: Add special shader for depth prespass. This way we can extend it to output more data (like motion vectors). Add a variation that uses clip distances. |
Revision 539225d by Clément Foucault June 19, 2017, 08:47 (GMT) |
DrwManager: Remove the need for buffers to be available. This way we can just avoid binding a texture by setting it's ref to NULL. |
Revision 6dbe2b0 by Clément Foucault June 19, 2017, 08:47 (GMT) |
DrwManager: Remove unnecessary ifs. |
Revision 83a0012 by Clément Foucault June 19, 2017, 08:47 (GMT) |
Probe: Add planar type. |
Revision 9a5cb2e by Clément Foucault June 19, 2017, 08:47 (GMT) |
DrwManager: Add support for Custom Clipping Planes |
|
|
|


Master Commits
MiikaH:n Sivut a.k.a. MiikaHweb | 2003-2021