テンプレート:Release Notes/2.42/Groups

提供: wiki
移動先: 案内検索

Groups

Image 1

Revived hidden treasure, the Groups! Grouping Objects is a way to manage Object relations, independent of the current methods like with hierarchies (parenting), Scenes or Scene layers.

To understand the use of Groups well, it's important to know how Blender stores that in its database. This diagram shows the "Main" database, where all data is stored alphabetically, per type. And it shows how a Scene was constructed, in this case a Scene with a relation to five Objects. (see also Blender Architecture).

Image 2

Now let's select three of the Objects, and make a Group of this. In Blender you can do that with hotkey CtrlG, or use the Object pulldown menu.

What happens is that a Group block is added in the Main database, which stores internally references to the three Objects. It is important to realize that Groups are not part of a Scene, but can be a collection of any amount of Objects (Objects that are not in a Scene even, or Objects from several Scenes).

Image 3

Groups can also overlap, as this example shows. Here a 2nd group was created with the center Object in a Scene as member of both Groups.

Image 4

Groups can be used in a number of different ways. One of the most interesting features is to use a Group as an "instance". This can be done by indicating to an Object it should become a "Group duplicator".

In this diagram, two new Objects have been added, each duplicating a Group on the location of the Object. In this case the original Groups are in the same Scene, but that of course doesn't have to be. Groups can be borrowed from other files even.


Adding new Groups.


Using Groups

To add Objects to a Group, or remove from a Group:

  • 3D View, Object pulldown menu.
  • 3D View, hotkey CtrlG gives you a menu to add a new group, add the selection to an existing group, or remove the selection from groups.
  • Buttons Window, in the Object buttons (F7), a new panel Object and Links was added, showing
    • The Object name
    • The objects parent if one exists (Par:)
    • If the selection belongs to no Group there is a dropdown button Add to Group that lets you create new group or select an existing group.
    • The Groups the Object belongs to. These buttons also allow rename, assigning or removing.
  • Deleting an Object will also remove it from a Group.
  • Groups are drawn in green wireframe color when selected (This is part of Themes), instead of the pink one).
  • Use ⇧ ShiftAltRMB Template-RMB.png mouse-select to (de-)select an entire group.
  • Add Group duplicate: 3D Window, ⇧ ShiftA -> Group -> "groupname" - This adds an Empty Object with Group duplication set.


Outliner

The Outliner now shows Groups as an option. This is nice to organize your data a bit.

The Outliner has an entry in the main header menu for that. When you select a Group item (click outside of name), a RMB Template-RMB.png click or hotkey W will give options.

To delete a group name, use Unlink to give the Group a zero reference count, when you then save the file this group is not saved with the file.

Library Appending

Appending a Group from other files will always insert the Objects of the Group in the current Scene. Linking Groups from other files won't do that. These then are only accessible via the Add menu.

In the ⇧ ShiftF1 or ⇧ ShiftF4 browsers, you can also find the Groups listed. By appending or linking the Group itself, and use the Group Duplicator, you now can animate and position linked Objects. The nice thing is that the local saved file itself will only store the Group name that was linked, so on a next file read, the Group Objects will be re-read as stored (changed) in the Library file. (Note; current implementation also "gives a base" to linked Group Objects, to show them as Objects in the current Scene. Need that now for testing purposes, but probably will be removed later).

Group duplicators

Using Group duplicators in the NLA

When you want to use Groups to be duplicated, note that the origin for the Group is the global origin.

A Group-duplicate will copy the full animation system from the original Group as well. Note however that this is a real 'virtual' copy. For example; a particle system inside a Group will exactly be animated as the original Group, only with a transformation applied from the duplicating Object.


to do

 Merge this into the above text and/or remove it.

In the Object Anim Panel, you can set any Object (use Empty!) to duplicate an entire Group. It will make copies of all Objects in that Group. Also works for animated Objects, but it will copy the current positions or deforms. Control over 'local timing' (so we can do Massive animations!) will be added later. (Note; this commit won't render Group duplicators yet, a fix in bf-blender will enable that, next commit will sync)

Groups in animation

Using Groups with animated Objects has two interesting features.

  • You can move the entire Group to a local time, using the "TimeOffs" value in Object buttons
  • In the NLA window, you can apply Action Strips on a Group. Use the (N) "Strip Properties" panel to indicate an Armature "Target" inside the Group, Blender then applies the NLA to it as usual. This makes library-linking of characters very interesting.

Light Groups

In the Material buttons (F5) Shading panel, you can indicate a Group of Lamp Objects to be used as light for rendering, instead of the usual visible Lamps. This actually enables per-Material lighting (independent of which Object has the Material, or whether the Lamps are in visible layer).

If you don't want Lamps from a Light Group to work on the other Objects, just move them to an invisible layer.

Force field Groups

Particle Force field and Guide control ...

Particles now have the option to use a specificed Group as force fields. In that case the usual 'visible' other force field Objects will be ignored.

In the "Particle Motion" Panel, you can indicate a Group name, this then limits force fields or guides to members of that Group. (Note that layers still work on top of that... not sure about that).

What can Groups be used for

The real power of groups is in the following features:

In general
In general Groups have a very good potential... for example, it could become default for MetaBall Objects too. All current 'layer relationships' in Blender should be dropped in time, I guess...

Depsgraph support for animated duplicated groups that come from Library files.... so nice, a huge walking group of characters in a 90k file or so!

Groups & Libraries
Any Group Duplicate now can get local timing and local NLA override. This enables to control the entire animation system of the Group. Two methods for this have been implemented.
  1. The quick way: just give the duplicator a Startframe offset.
  2. Advanced: In the NLA Editor you can add ActionStrips to the duplicator to override NLA/action of any Grouped Object.
For "Group NLA" to work, an ActionStrip needs to know which Object in a group it controls. On adding a strip, the code checks if an Action was already used by an Object in the Group, and assigns it automatic to that Object.
You can also set this in the N Properties panel for the strip.

Change in NLA: the ⇧ ShiftA Add strip command now always adds strips to the active Object. (It used to check where mouse was). This allows to add NLA strips to Objects that didn't have actions/nla yet.

Important note: In Blender, duplicates are fully procedural and generated on the fly for each redraw. This means that redraw speed equals to stepping through frames, when using animated Duplicated Groups.

Recoded entire duplicator system 

The old method was antique and clumsy, using globals and full temporal copies of Object. The new system is nicer in control, faster, and since it doesn't use temporal object copies anymore, it works better with Derived Mesh and DisplayList and rendering.

By centralizing the code for duplicating, more options can be easier added. Features to note:

  • Duplicates now draw selected/unselected based on its Duplicator setting.
  • Same goes for the drawtype (wire, solid, selection outline, etc).
  • Duplicated Groups can be normally selected too.

Bonus goodie: ⇧ ShiftA (Toolbox) now has entry Add group too, with a listing of all groups, allowing to add Group instances immediate.

Library System
  • ⇧ ShiftF4 data browse now shows the entire path for linked data.
  • Outliner draws Library Icons to denote linked data.
  • Outliner operation added: Make Local for library data.
  • Outliner now also draws Groups in regular view, allowing to unlink too.


Magical Group relink

to do

 check this stuff

This is the case:

  • Empty has Group duplicator.
  • Empty has NLA strips to animate the group.

On linking the Empty to another group (with button in ObjectButtons), it checks for the current strips in NLA, and tries to find the proper objects in the new Group, based on name matches. If not found, it sets the strip-objects to zero.

Behind the scenes

Fixes
  • depsgraph missed signal update for bone-parented Objects
  • on reading file, the entire database was tagged to "recalc" fully, causing unnecessary slowdown on reading.

Library linking half-assed-fix for files that mix linked "direct" data (local data links to lib data) and "indirect" (lib links to same lib data).

A real solution should be found though... there's a conflict in the code I don't fully grasp yet.


Yet another day of file reading & library linking code... Finally (after 10 years!) fixed the issue that was marked in a comment in the top of the readfile.c... when using multiple library files at once, the code that tries to map old to new pointers could fail when accidentally pointers (in different files) had same old values.

Current code now uses proper lookup tables per open library file. Last issues to solve;

  • pointer tables still suffer the 'accidental pointer' error when linking multiple levels of library deep, with recursive back linking to higher levels... (I know is stupid, but should be solved!)
  • The code for relative paths doesn't work for multiple levels, when the files use different relative paths.

So... now I understand file reading and libraries again, I couldn't leave it to do a nice optimize step. This commit introduces bsearch() for finding the elements in the pointer table, while reconstructing links. Tests reveil a speedup of a factor 2-5 on complex scenes. And since undo uses same system, quite nice in general!

(Note; speedup sometimes can't be noticed, when a lot of subsurfs or other displaylists need to be generated.)

Appending Groups

Further tweaking group appending...

Previous commits attempted to link objects in a group to the scene, when appending the group. Unfortunately... a single append then also linked objects from previously linked groups. This is still a bit messy, mostly caused by the way how appending now is coded. At least things work as expected now!


Groups

to do

 What exactly has this to do with groups?

Made group work from multiple selection's (before it used the first selected face/vert/edge) so you can select 2 faces and then get all coplanar faces around both.

Added fp to face and edge edit data so as to store edge length and face area/perimeter. (in the union so minimal overhead) current implementation is fairly optimized. Change to arithb.c was just to command Inpf as being the dot product.

group

to do

 What exactly IS this?

Added to select group-

Siblings, ad Type

This removes the need for the Select Type menu (please review Broken)

Further Information