Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2020-02-10Cleanup: sort file, struct listsCampbell Barton
2020-01-24Depsgraph: Report FPS when running with --debug-depsgraph-timeSergey Sharybin
The FPS here is measured based on a timestamp from when depsgraph was previously evaluated. Allows to ease investigating performance improvements/regressions which are not related on animation system but on modifications on a single frame (such as transforming vertex in edit mode).
2020-01-24Depsgrapg: Refactor, move Relation to own fileSergey Sharybin
2020-01-10Fix T71908: Animated properties are lost after frame-post handlerSergey Sharybin
The issue was caused by special handling of animation update after manual edits in frame_post handler: to avid loss of manual edits done on top of animated property. This was done as a separate pass for non-animation update after frame_post did modifications. This caused some other side-effect: non-modified animated property was re-setting to the value which is used in the viewport. Idea of this solution is simple: preserve values which came from animation update through copy-on-write process. The actual process of this is a bit involved: need to decode RNA path and do it twice since f-curve might point to a sub-data which pointer will change. Since this is only done for non-active depsgraph (aka depsgraph used for render pipeline) this is probably fine since all this extra overhead is just a fraction of overall render process. Differential Revision: https://developer.blender.org/D6330
2019-11-29Depsgraph: Refactor, split runtime backup into smaller filesSergey Sharybin
It started to be a long code of all various cases in a single file, which started to be really confusing.
2019-09-11Depsgraph: Introduce depsgraph registrySergey Sharybin
Allows to access dependency graphs created for render engines to inform them about changes in .blend file structure from the Python handlers. Reviewers: brecht Differential Revision: https://developer.blender.org/D5724
2019-07-31Cleanup: remove unused boost codeBrecht Van Lommel
2019-05-23Depsgraph: Allow building scene propertiesSergey Sharybin
This is used by driers and this is a first step towards support of scenes used for only compositor or sequencer. Fixes T61014: Assert adding a driver that uses a single property of a scene ID
2019-05-03Depsgraph: Remove filtering APISergey Sharybin
This was an attempt to speed up motion path calculation, which didn't really work in real world animation files, where animators already hide and disable all the heavy collections. Filtering approach also doesn't allow to have multiple frames evaluated in multiple threads easily. Filtering also adds extra complexity on keeping the graph in a correct and consistent state. Fixes T64057: Blender crash when use motion paths
2019-04-30Depsgraph: Add generic animated properties cacheSergey Sharybin
Allows to speed up lookups like "is property FOO of data BAR animated". Can be used to optimize object's visibility check, but also allows to check animation on bones without too much of time penalty. The cache is shared between both nodes and relations builder. Currently is not used, just a boilerplate for an upcoming changes in an actual logic.
2019-04-17ClangFormat: apply to source, most of internCampbell Barton
Apply clang format as proposed in T53211. For details on usage and instructions for migrating branches without conflicts, see: https://wiki.blender.org/wiki/Tools/ClangFormat
2019-04-14CMake: prepare for BLENDER_SORTED_LIBS removalCampbell Barton
No functional change, this adds LIB definition and args to cmake files. Without this it's difficult to migrate away from 'BLENDER_SORTED_LIBS' since there are many platforms/configurations that could break when changing linking order. Manually add and enable WITHOUT_SORTED_LIBS to try building without sorted libs (currently fails since all variables are empty). This check will eventually be removed. See T46725.
2019-02-15Depsgraph: Move RNA lookup to an own query classSergey Sharybin
Currently should have no functional changes, but allows to implement runction optimizations more localized and easily.
2019-02-05Cleanup: remove contributors for CMake filesCampbell Barton
Following removal from C source code. See: 8c68ed6df16d8893
2019-01-31Depsgraph: Comb code to a better state all overSergey Sharybin
Some summary of changes: - Don't use DEG prefix for types and enumerator values: the code is already inside DEG namespace. - Put code where it locally belongs to: avoid having one single header file with all sort of definitions in it. - Take advantage of modern C++11 enabled by default.
2018-08-23Depsgraph: First draft of graph filtering API implementationJoshua Leung
When this works correctly, we should be able to feed in an existing depsgraph instance, and get out a "filtered" copy of it that contains only the subset of nodes needed to evaluate what we're interested in. The current implementation only filters on ID blocks/nodes, and starts by building a full new depsgraph instance first. I'd originally intended to do it per operation instead, copying over individual nodes as appropriate to have the smallest and least memory intensive graph possible. However, I ended up running into into problems with function binding + COW arguments, hence the current slow solution.
2018-08-13Depsgraph: Remove obscure code which was only needed for old OSD implementationSergey Sharybin
2018-07-30Merge branch 'master' into blender2.8Brecht Van Lommel
2018-07-30Build: require C11/C++11 for all operating systems in master.Brecht Van Lommel
This is in preparation of upgrading our library dependencies, some of which need C++11. We already use C++11 in blender2.8 and for Windows and macOS, so this just affects Linux. On many distributions this will not require any changes, on some install_deps.sh will need to be run again to rebuild libraries. Differential Revision: https://developer.blender.org/D3568
2018-07-10DrawData: Change drawdata to a generic struct shared accross ID typesClément Foucault
This makes tagging much more generic and make the world updates more in line with the new tagging system (Depsgraph).
2018-06-22Depsgraph: cache effector relations, for performance and stability.Brecht Van Lommel
To find all effectors in the scene, we need to loop over all objects. Doing this during depsgraph evaluation caused crashes because not all objects are guaranteed to be evaluated yet. To fix this, we now cache the relations as part of the dependency graph build. As a bonus this also makes evaluation faster for big scenes, since looping over all objects for each particle system is slow. Fixes T55156.
2018-04-12Depsgraph: Remove function bindings with collectionsSergey Sharybin
Use single function to evaluate all the collections for the given view layer. This way we avoid need to get scene ID sub-data. Similar to pchan index, this allows us to avoid build-time scene expansion, which also simplifies update of the scene datablock. Well, sort of. There is still work to be done to get rid of build-time scene datablock expansion, which includes: - Need to pass view layer by index. Annoying part would be to get actual view layer for that index. In practice doing list lookup might not be such a bad idea, since such lookup will not happen very often, and it is unlikely to have more than handful of view layer anyway. Other idea could be to use view layer from evaluation context. Or maybe from depsgraph, which is supposed to be in the context. Can have some assert statements to make sure everything is good. - Need to get id of base binding for flags flush. We can replace that with index-based lookup from an array created by view layer evaluation. Reviewers: dfelinto Differential Revision: https://developer.blender.org/D3141
2018-02-22Merge branch 'master' into blender2.8Sergey Sharybin
2018-02-22Depsgraph: Add utility class to keep track of handled ID datablocksSergey Sharybin
Currently unused, actual logic change will come in the next commit.
2017-12-21Merge branch 'master' into blender2.8Sergey Sharybin
2017-12-21Depsgraph: Bring timing statistics to the new dependency graphSergey Sharybin
This statistics is only collected when debug_value is different from 0. Stored in depsgraph node itself, so we can always have access to average data and other stats which requires persistent storage. This way we also don't waste time trying to find stats from a separately stored hash map.
2017-12-21Depsgraph: Make it more clear that we dump relations into graphvizSergey Sharybin
We might implement other things to dump into graphviz, so better to start having explicit names.
2017-12-20Merge branch 'master' into blender2.8Sergey Sharybin
2017-12-20Depsgraph: Move ID node to own fileSergey Sharybin
2017-12-20Depsgraph: Move time source node to own fileSergey Sharybin
2017-12-18Depsgraph: Add query API to traverse all dependent IDs of the given IDSergey Sharybin
2017-12-06Merge branch 'master' into blender2.8Sergey Sharybin
2017-12-06Depsgraph: Move implementation part of relations header to own fileSergey Sharybin
2017-12-01Depsgraph: Add query API to traverse all dependent IDs of the given IDSergey Sharybin
2017-12-01Depsgraph: Move iterator to own implementation fileSergey Sharybin
2017-11-23Rename any instance of scene layer or render layer in code with view layerDalai Felinto
The RenderResult struct still has a listbase of RenderLayer, but that's ok since this is strictly for rendering. * Subversion bump (to 2.80.2) * DNA low level doversion (renames) - only for .blend created since 2.80 started Note: We can't use DNA_struct_elem_find or get file version in init_structDNA, so we are manually iterating over the array of the SDNA elements instead. Note 2: This doversion change with renames can be reverted in a few months. But so far it's required for 2.8 files created between October 2016 and now. Reviewers: campbellbarton, sergey Differential Revision: https://developer.blender.org/D2927
2017-11-09Depsgraph: Cleanup, make it more clear what layer isSergey Sharybin
2017-11-09Depsgraph: Make dependency graph to be built from scene layerSergey Sharybin
This is a final step of having proper ownership. Now selecting different layers in the "top bar" will actually do what this is expected to do. Surely, there are still things to be done under the hood, that will happen in a less intrusive way.
2017-10-25Depsgraph: Remove bunch of debug codeSergey Sharybin
Was never actually used and implementation seems to be slow: we shouldn't be doing per-node evaluation hash lookups, adds too much overhead. We can instead store statistics in the node itself, and maybe even group them somehow. Ideally such a statistics should be user-friendly so riggers and animators can see exactly what's happening.
2017-10-24Depsgraph: Remove bunch of debug codeSergey Sharybin
Was never actually used and implementation seems to be slow: we shouldn't be doing per-node evaluation hash lookups, adds too much overhead. We can instead store statistics in the node itself, and maybe even group them somehow. Ideally such a statistics should be user-friendly so riggers and animators can see exactly what's happening.
2017-10-18Depsgraph: Make Copy-on-Write a command line optionSergey Sharybin
Before it was a compile time option which was not very easy to use or test. Now the project is getting more mature, so very soon we will be able to call for a public tests of limited features. The copy-on-write (which includes animation, modifiers) is enabled using --enable-copy-on-write command line argument.
2017-06-19Depsgraph: Initial groundwork for copy-on-write supportSergey Sharybin
< 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.
2017-06-09Merge branch 'master' into blender2.8Campbell Barton
2017-06-08Cleanup: cmake indentation, missing includeCampbell Barton
2017-05-31Merge branch 'master' into blender2.8Sergey Sharybin
2017-05-30Move hash_combine utility function to a more generic placeSergey Sharybin
This way everyone can benefit from it, not only dependency graph.
2017-04-01Blender 2.8: Hook of layer collections evaluation in DEGSergey Sharybin
This moves selectability/visibility flag flush from some hardcoded places in the code to depsgraph. This way it is possible to simply tag depsgraph to update those flags and rest it'll do on its own. Using depsgraph for such flush is an overkill: those flags are fully static and can not be animated, so it doesn't really make sense to hook only those to depsgraph. However, in the future we will have overrides on collections, which ideally would need to be animatable and drivable and easiest way to support this is to do this on depsgraph level, so it ensures proper order of evaluation for animation and drivers. And it seems logical to do both overrides and flags flush from depsgraph from this point of view. This commit also includes the evaluation of IDProperty for collections, which basically are just another form of override. So once we implement the other kind of overrides the flushing and collection evaluation won't change. Patch by Sergey Sharybin and Dalai Felinto
2017-01-24Depsgraph: Remove legacy code from new depsgraphSergey Sharybin
Now we have no remaining WITH_LEGACY_DEPSGRAPH in the code.
2016-11-17Depsgraph: Move scene builder function to own fileSergey Sharybin
This way it's much easier to grasp what the graph actually contains.
2016-11-17Depsgraph: Move rig builder functions to own filesSergey Sharybin
Those routines are rather big and started to be annoying to have one big file. Should be no functional changes.