===================
This is a new automatic vertex weighting method, next to the existing
envelope based method. The details are here:
http://www.blender.org/development/current-projects/changes-since-244/skinning/
This is based on section 4 of the paper:
"Automatic Rigging and Animation of 3D Characters"
Ilya Baran and Jovan Popovic, SIGGRAPH 2007
Implementation Notes:
- Generic code for making mesh laplacian matrices has been added, which
is only used by bone heat weighting at the moment.
- Bone to vertex visibility checking is done with the raytracing code.
- Fixed an issue in the subsurf limit calculation function, where the
position of vertices on boundary edges was wrong. It is still not the
correct position, but at least it's in the neighbourhood now.
This commit adds a new constraint to Blender: the Transformation Constraint. This constraint gives you more freedom to choose how transforms are copied from one object/bone to another object/bone.
You can assign the Loc/Rot/Scale channels of a source to the Loc/Rot/Scale channels of a destination, specifying the range of motion (per axis) from the source to consider, and the range of motion (per axis) that will be applied to the destination. Also, for each destination axis, you can choose which of the source axes to copy from.
A similar constraint was coded by Jason Blary (snark), as Patch #4991. This constraint is basically rewritten from scratch, although there are some elements of the original patch which may be borrowed in future.
Various notes:
* PyAPI access has been coded.
* Space conversion is also enabled for this constraint.
* Also the useless get_constraint_col function has been removed
* Doing a rotation copy with a ratio that is not 1:1 doesn't always work correctly yet (like for the Copy Rotation constraint).
Resolved Issues:
* My drawing cleanup commit the other day broke shapekey keyframe selection - was using wrong filter for Action Editor data
* Removed the old hack to limit vertical scrolling so that shapekeys were visible. It wasn't really needed anymore, and was causing problems with HomeKey.
Unresolved Issues:
* Vertical placement of sliders is slightly off
* In a test file I obtained, shapekey sliders don't work immediately after the file is loaded.
Added new defines for the icons used to show this, on the request of Matt Ebb. For now, the eye icons have simply been duplicated to the new spaces, but 'more descriptive' icons should be made.
Some cleanups of the Action Editor drawing methods. These now make use of the filtering stuff I added for the backend cleanup.
Unfortuantely I still cannot get Blender's ui widgets to really work properly, so that toggle icons can have tooltips. There were some severe scaling issues.
Ctrl-RMB and Alt-RMB now call for different selection methods that are helpful when working within a single channel that holds several strips. The Ctrl modifier signals "Right" and the Alt modifier signals "Left".
Ctrl-RMB clicking a strip will select that strips left handle and the adjacent handle of any strip that abuts it on the left, allowing you to move the boundary between the strips without changing their outer endpoints. Ctrl-RMB clicking again on that strip will add to the selection all strips to the left of it, allowing you to slide the entire set of strips out of the way for a new one.
Alt-RMB works the same, but to the right.
Ctrl-Alt-RMB on a strip selects the surrounding handles only, allowing you to move the targeted strip and have the surrounding two strips adjust to follow.
Sequence Editor: SHIFT+R, Remap Paths (also in pull down menu)
This allows to remap the root of a path to another directory.
Works on all selected Image strips. That way you can make absolute
paths relative, for example.
Example:
original path: /mnt/orange/finals/06_which_way/06_03b/
to be remapped: /mnt/orange/finals/
remap to: //
new path: //06_which_way/06_03b/
Added a new input control that smooths the brush stroke.
This option controlled by the menu item Sculpt>Input Control>Smooth Stroke. When enabled, the brush has a delayed effect on the model; a green line is drawn to indicate the smoothed path of the stroke. After ~200 pixels, the first half of the stroke will be applied to the model; the process then repeats, with a new segment of the stroke being applied to the model after every 200 pixels. On mouse up, any remaining portion of the stroke will be applied.
Other changes:
* Added a flags field to SculptData; currently only used for smooth stroke but other flags can be moved into it
* Moved the damaged_rects/verts into SculptSession
* Simplified brush application by moving init_editdata into do_symmetrical_brush_actions
* Removed Averaging from sculpt Input menu; smooth stroke should take its place
TODO:
* Fix display of the smooth line in Partial Redraw mode
* Make the smoothing and delay factors adjustable
* Optimize the stroke application (currently using the old 'dot' style of applying the brush)
I've moved the Auto-Keyframing functionality out of the special_aftertrans_update function into two separate functions, which can be called independent of the Transform system. One is for Bones, while the other is for Objects.
This now means that the Shift-S Snapping Tools will now work with auto-keyframing.
I've recoded the way long keyframes work a bit, so that more cases are handled accurately. Now, it takes into account the number of IPO-curves that have keyframes in them on the start/end frame of the long-keyframe, instead of just taking the total number of IPO-curves present for the channel being drawn.
At last! The ability to code constraints in Python. This opens up many interesting rigging possibilities, as well as making prototyping constraints easier.
* A PyConstraint script must begin with the line
#BPYCONSTRAINT
* It must also define a doConstraint function, which performs the core actions of the constraint.
* PyConstraints use IDProperties to store custom properties for each PyConstraint instance. The scripter can choose which of these ID-Properties to expose to a user to control the behaviour of the constraint. This must be done using the Draw.PupBlock method.
Credits to Joe Eager (joeedh) for coding the original patch on which this is based. I've made heavy revisions to large parts of the patch.
For more detailed information, and some demo scripts, see the following page:
http://aligorith.googlepages.com/pyconstraints2
This commit refactors curve selection system to use certain curve selections
functions that encapsulate setting of selection flags. New function to select
adjacent control points was introduced too. Refactoring made it possible to
simplify certain existing selection functions quite a bit.
New functionality was delivered as well. Select more/less works now with NURBS
as expected. Also two new curve selection functions were added: Select Every Nth
and Select Random.
See http://wiki.blender.org/index.php/BlenderDev/Curve_Selection_Tools for
further information.
* Small optimization to multires based on profiling data; calculation of edge boudndaries is now cached along with multires mapping data to improve the performance of the catmull-clark code.
* Removed an unneeded call to create the temporary data when loading files.
I've just spent two days rewriting the Action Editor to unify its code and bring it under control again (it was 107kb, now it is around 73 kb).
* This means that there are no longer separate functions for each tool for Actions and Shapekeys in the Action Editor, and also no more missing tools for either.
* Also, I've gotten rid of the need for those complicated, hierarchial loops used for action channels, as they were a pain to keep consistent with each other.
* Baking functions have been removed. See user-level-changes for more details.
* Reorganised and completely rewrote code in editaction.c, thus the lengthy diff.
User Level Changes:
* For the meantime, border-selecting Action Channels has been disabled
* Baking functions have been removed. As far as I have been able to find out, these were really non-functional anyway. Besides, I don't think they really belonged in editaction.c
* Editing Shapekey keyframes now yields the same feature set as for those in Action Channels.
* There shouldn't be any major bugs left, but I might have missed something.
Further Work:
* Do a cleanup like this to the Action Editor drawing code in drawaction.c
* Baking??? (harkyman seems to be doing something about this)
* Moved the multires vertex data from struct MultiresLevel to struct Multires. There's no longer any reason to store data seperately for each level; it was just taking up extra memory.
* Incremented the subversion to 2 and adjusted do_versions to correctly load older files.
* Refactored the multires update process (which handles propagating changes to other levels)
Small Action Editor feature to hopefully make keyframing quicker. Just press the IKEY in the Action Editor. Feedback on the (annoyance factor of the) popups welcome.
The hotkey Ctrl-G in EditMode for Meshes and Lattices, brings up a menu giving the user options to assign/remove selected vertices to a new/the active Vertex Group.
The hotkey Ctrl-Shift-G in EditMode for Meshes and Lattices, brings up a menu giving the user options to change the active Vertex Group and delete the current Vertex Group.
- Radius R, G, B sliders had too small number increase on clicking.
- Preview render now renders with higher SSS error setting to speed it up a
bit.
- bug #6664: 3d preview render had artifacts. re->viewdx/dy wasn't set then,
which is needed to estimate the area of each point. Have set this now, not
in the nicest way, there is some bit duplicated code, but I don't want to
refactor existing code with the chance of breaking it at this point.
- bug #6665: grid like artifacts with parts rendering. The two extra pixels
around parts used for filtering were used as well, leading to double points.
This means changing the active UV/VCol layers wont change what renders.
needed to adjust the minor version so old files will copy the active layer to the render-uv/vcol layer.
boxpack2d.py - redoen in C now, dont need python version.
using mface->flag for both.
Also found that the cdDM_drawMappedFaces and cdDM_drawFacesTex_common could get normals mixed up when rendering hidden faces. because hidden/invisible faces used continue without advancing to the next normal.
This commit resolves an issue dating back a few releases. When the IPO block being displayed in the IPO editor came from an Action being used as an Action Strip
in the NLA editor, the keyframes in the IPO editor were not displayed in 'NLA-time'.
There are however a number of things that still need work on so that they will play
nicely with these changes. Having said that, the IPO editor is still generally stable
for use (or should be). In case anything plays up, 'pin' the IPO view you're using
to turn off these changes.
This resolves Todo #4335.
Known Issues:
* When 'K' (show keys) mode is on, it doesn't work too too well yet. The display
in such situations will be a bit confusing.
* Pressing IKEY in the IPO editor (for inserting a keyframe on the current frame)
also doesn't work too well yet. It will insert a keyframe on the wrong frame.
* Transforms don't get any correction for scaling yet. This is only an issue when
snapping transforms to the grid, or relying on the delta numbers printed in the
header.
Previous versions of Blender allowed Vertex Groups to be nameless, which
shouldn't be allowed. This caused problems with rigs from previous versions of Blender being loaded in 2.43+ versions, as the new VGroup feature for the
Armature modifier mis-identified these nameless group(s) as being the Vertex Group
to be used. As well as the checks done when renaming VGroups (from another commit), files created prior to and in 2.43 will have all such groups given default
names.
Code notes:
* I've moved the unique_vertexgroup_name function from src to blenkernel like for
constraints
* Formatting in deform.c tidied up a bit
In the Action Editor, sliders are now drawn beside IPO-Curve and Constraint Channels and for the active Action Channel when the 'Show Sliders' option in the View menu is turned on. This behaves like for shapekeys.
You can change the limits of the sliders by either Ctrl-Clicking or NKEY over the
name of the relevant IPO-Curve channel.
Also, documented the IPO-curve struct a bit. There are a few variables there that
I'm not sure what they are used for.
Ctrl+RMB used to select a hidden object as well as "Select Grouped -> Parent"
Also made OOps and data browser check for hidden objects.
Added a countall to hide/unhide objects.
Checked every instance of testbase to see this dosnt break anything, also changed TESTBASE and TESTBASELIB, both were used incorrectly in places.
added error_libdata() for library error messages that are everywhere.
added object_data_is_libdata to test if the object and its data's are from a library.
fixed 2 crashs in adding Curve points to a library object (remember to check, verify_ipocurve returns NULL!)
made duplicating and making dupli's real for lib objects possible, disabled joining into lib armatures and meshes.
Small feature, added keybindings for setting the visibility restriction flags
that were previously only accesible via the outliner
HKEY Hides all selected
SHIFT-HKEY Hides all unselected
ALT-HKEY Shows all hidden
- Dont do anything if no verts or faces are selected (used to zoom into 0,0,0)
- use the centers of dupli objects (should eventually use their bound boxes), much nicer when dealing with many dupli-objects
Continuing on from my previous 'Expandable/Collapsable Action Channel' commit, this commit introduces the ability to show/hide the keyframes in each ipo-curve represented by an Action Channel.
When you expand an Action-Channel by clicking on the triangle beside its name, you will now be presented with options to show/hide the ipo-curves represented by
the Action-Channel, and/or the Constraint Channels belonging to that Action-Channel. Actual ipo-curves will not be drawn in the Action-Editor, but the keyframes
will be shown.
Screenshot:
* http://wiki.blender.org/index.php/Image:244_ActionEditor_SubTracks_01.png
Possibly Coming Soon/Further Work:
* 'Protection' options for ipo-curves (currently disabled in code, as all IPO-related
tools will need to be made aware of this)
* Sliders for IPO-Curve Channels of the active Action-Channel
This (new) constraint limits the location of an object/bone to the range of locations
on a given curve. It works by comparing the location of the owner on one axis, to
the extents of the curve's bounding-box on the same axis, to find the location on
the curve.
Usage Notes:
* 'Ob:' field must point to a valid curve object
* This curve should have 'Path' turned on in order for this constraint to work. You
don't really need to do this as it will be taken care of by the code.
* 'Auto' toggle automically determines which axis should be used for the distance estimations/calculations. It is the default option, but may not work that well for
some cases.
* X/Y/Z toggles can be used to select the axis to use for these calculations. Try
to choose the axis along which the curve stretches out for most.
Python Notes:
Python API access for this constraint is not included in this commit. Will be coming
soon.
This commit should hopefully fix some of the problems some people were
having with tablet support in sculpt mode, and also the problems I made
visible with my previous commit related to number field dragging.
Now, all the ghost related stuff is tucked away in ghostwinlay.c and a
simple Blender API, similar to the existing get_mbut() for example, is
provided to access the tablet data. As with the other mouse related data in
Blender, the tablet data is cached upon each mouse move or click, in the
Window struct.
You can now just use:
float get_pressure(void);
void get_tilt(float *xtilt, float *ytilt);
short get_activedevice(void);
to get such data from the tablet. Documentation on the returned data
is in ghostwinlay.c in the _Window struct definition.
Brecht and Nicholas, I've updated the painting and sculpt code and it works
just fine here, you may want to give it a check though to make sure I
haven't done anything silly.
Action Channels can now be collapsed/expanded to show/hide Constraint Channels, lessening clutter. In future, this could (will probably be) expanded to
show the show/hide individual transform channels.
User Notes:
* Expansion is off by default
* NKEY popup now features option to turn expansion on/off
* Changed behaviour of protection a bit - now if an action channel has protection
on, constraint channels under it are also automagically protected
Developer Notes:
* I've gone through doing a lot of whitespace/linebreak tweaking to get the code looking more consistent with itself
* To save typing (and to make it easier to make future revisions), a set of macros
is now used to check for some commonly-checked settings (i.e. selection, visibility,
and protection).
Preview Range is a useful tool for animating (espcially on longer timelines). It allows you to only run through a limited set of frames to quickly preview the timing of a section of movement without going through the whole timeline. It means you don't have to set/reset start/end frame for rendering everytime you wish to only preview a region of frames.
Hi Ton,
Attached is a patch (I know you've already got lots of them in the tracker ;-) ) for a feature that I've sometimes wanted. It seems that this sort of thing is supported in other packages, but I can't be sure.
Note: I may have left in a few bits and pieces I didn't mean to in the patch (this is off a source tree which had quite a few revisions in it, all of which was experimental)
== Preview Range ==
Preview range is useful for animating (espcially on longer timelines). It allows you to only run through a limited set of frames to quickly preview the timing of a section of movement without going through the whole timeline. It means you don't have to set/reset start/end frame for rendering everytime you wish to only preview a region of frames.
* 'Ctrl P' in Action/NLA/Timeline sets preview range. Click+drag to form selection-box defining region of frames to preview
* 'Alt P' in Action/NLA/Timeline to clear preview range
* 'Pre' button beside Start/End fields in timeline toggles whether start/end fields refer to scene or preview
* 'Ctrl Rightarrow' and 'Ctrl Leftarrow' jump to start/end of preview region when it is set
* 'S' and 'E' set the start/end frames of preview region when it is set (just like normally) in Timeline only
* In Action/NLA editors, frames out of preview region are now drawn darkened when preview-region is set
See the following page for more info later:
http://wiki.blender.org/index.php/User:Aligorith/Preview_Range