tornavis/intern
Jacques Lucke 5a9a16334c Geometry Nodes: support for geometry instancing
Previously, the Point Instance node in geometry nodes could only instance
existing objects or collections. The reason was that large parts of Blender
worked under the assumption that objects are the main unit of instancing.
Now we also want to instance geometry within an object, so a slightly larger
refactor was necessary.

This should not affect files that do not use the new kind of instances.

The main change is a redefinition of what "instanced data" is. Now, an
instances is a cow-object + object-data (the geometry). This can be nicely
seen in `struct DupliObject`. This allows the same object to generate
multiple geometries of different types which can be instanced individually.

A nice side effect of this refactor is that having multiple geometry components
is not a special case in the depsgraph object iterator anymore, because those
components are integrated with the `DupliObject` system.

Unfortunately, different systems that work with instances in Blender (e.g.
render engines and exporters) often work under the assumption that objects are
the main unit of instancing. So those have to be updated as well to be able to
handle the new instances. This patch updates Cycles, EEVEE and other viewport
engines. Exporters have not been updated yet. Some minimal (not master-ready)
changes to update the obj and alembic exporters can be found in P2336 and P2335.
Different file formats may want to handle these new instances in different ways.

For users, the only thing that changed is that the Point Instance node now
has a geometry mode.

This also fixes T88454.

Differential Revision: https://developer.blender.org/D11841
2021-09-06 18:31:25 +02:00
..
atomic Add locking fallback atomics implementation 2021-08-26 14:36:59 +02:00
audaspace Cleanup: `make format` after SortedIncludes change 2020-03-19 09:33:58 +01:00
clog Cleanup: comment blocks, trailing space in comments 2021-06-24 15:59:34 +10:00
cycles Geometry Nodes: support for geometry instancing 2021-09-06 18:31:25 +02:00
dualcon Spelling: Then Versus Than 2020-10-19 08:43:08 -07:00
eigen Cleanup: `make format` after SortedIncludes change 2020-03-19 09:33:58 +01:00
ffmpeg Fix: VSE search in mpegts files would fail 2021-06-11 14:05:07 +02:00
ghost Cleanup: spelling in comments 2021-08-26 12:36:58 +10:00
glew-mx Cleanup: GPUState: Remove stack from the state manager and rename it 2020-08-18 21:30:10 +02:00
guardedalloc Cleanup: use C++ style comments for disabled code 2021-08-12 14:34:41 +10:00
iksolver Cleanup: Spelling Mistakes 2021-06-22 10:54:50 -07:00
itasc Cleanup: repeated terms in code comments & error messages 2021-06-28 15:46:08 +10:00
libc_compat Build: add more libc compatibility functions for upcoming libraries update 2020-07-09 18:10:05 +02:00
libmv GTest: Use INC/INC_SYS for Libmv/OSD tests 2021-07-23 16:50:13 -06:00
locale Cleanup: `make format` after SortedIncludes change 2020-03-19 09:33:58 +01:00
mantaflow Cleanup: repeated terms in code comments & error messages 2021-06-28 15:46:08 +10:00
memutil Cleanup: missing leading '*' from comment blocks 2021-07-30 22:20:31 +10:00
mikktspace Cleanup: use '#if 0' for commented code-block 2021-06-24 15:53:26 +10:00
numaapi Add support for RISC-V architecture 2021-07-15 14:22:35 +02:00
opencolorio Cleanup: comment blocks, trailing space in comments 2021-06-24 15:59:34 +10:00
opensubdiv GTest: Use INC/INC_SYS for Libmv/OSD tests 2021-07-23 16:50:13 -06:00
openvdb Cleanup: Remove unused/unecessary OpenVDB C API 2021-08-02 12:26:28 -04:00
quadriflow Cleanup: Simplify logic, follow style guide for integer types 2021-07-30 15:08:43 -04:00
rigidbody Cleanup: reserve C++ comments for disabled code 2021-07-20 15:01:05 +10:00
sky Cleanup: Clang-tidy, readability-non-const-parameter. 2020-11-07 21:52:53 +05:30
utfconv Cleanup: clang-tidy utfconv 2021-09-01 17:13:33 +10:00
CMakeLists.txt Atomic: Cover with unit tests 2020-11-19 17:19:48 +01:00