- CVS Logs:
* Bone Heat Weighting
This is a new automatic vertex weighting method, next to the existing
envelope based method. The details are here:
blender.org - Skinning
This is based on section 4 of the paper:
"Automatic Rigging and Animation of 3D Characters"
Ilya Baran and Jovan Popovic, SIGGRAPH 2007
* Transformation Constraint
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.
* Constraints System
After just over a weeque of coding, I've finished doing a major refactor/cleanup of the constraints code. In the process, quite a few old kludges and ugly hacks have been removed. Also, some new features which will greatly benefit riggers have been implemented.
* The long-awaited ``ChildOf Constraint'':
This allows you to animate parent influences, and choose which transformation channels the parent affects the child on (i.e. no translation/rotation/scaling). It should be noted that disabling some combinations may not totally worque as expected. Also, the 'Set Inverse' and 'Clear Inverse' buttons at the bottom of this constraint's panel set/clear the inverse correction for the parent's effects. Use these to make the owner not stick/be glued to the parent.
* Constraint/Target Evaluation Spaces:
In some constraints, there are now 1-2 combo boxes at the bottom of their panel, which allows you to pik which `co-ordinate space' they are evaluated in. This is much more flexible than the old 'local' options for bones only were.
* Action Constraint - Loc/Rot/Size Inputs
The Action Constraint can finally use the target's location/rotation/scaling transforms as input, to control the owner of the constraint. This should worque much more reliably than it used to. The target evaluation should now alos be more accurate due to the new space conversión stuff.
* Transform - No longer in Crazy Space (TM)
Transforming objects/bones with constraints applied should no longer occur in Crazy Space. They are now correctly inverse-corrected. This alos applies to old-style object tracking.
=== General Code Changes ===
* solve_constraints is now in constraints.c. I've removed the old `blend consecutive constraints of same type' junk, which made the code more complex than it needed to be.
* evaluate_constraint is now only passed the constraint, and two matrices. A few unused variables have been removed from here.
* A tempolary struct, bConstraintOb, is now passed to solve_constraints instead of relying on an ugly, static workobject in some cases. This works much better.
* Made the formatting of constraint code consistent
* There's a versión patch for older files so that constraint settings are correctly converted to the new system. This is currently done for MajorVersion <= 244, and SubVersion < 3. I've bumped up the subversión to 3 for this purpose. However, with the imminent 2.45 release, this may need to be adjusted accordingly.
* LocEulSizeToMat4 and LocQuatSizeToMat4 now worque in the order Size, Rot, Location. I've alos added a few other math functions.
* Mat4BlendMat4 is now in arithb. I've modified it's method slightly, to use other arithb functions, instead of its crazy blending scheme.
* Moved some of the RigidBodyJoint constraint's code out of blenkernel, and into src. It shouldn't be setting its target in its data initialisation function based + accessing scene stuff where it was doing so.
* Geometry to act as targets for constraints. A space has been reserved for this already.
* Tidy up UI buttons of constraints
* Added the invisible 'Bone envelopes to vertex groups' command to the 3D View Weight Paint -> Paint menu
* Adds the following selection methods to the Sequence Editor:
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.
* Option when creating a new "screen" to create an empty one
(one with one window) While its one more click, I thinque this is pretty dang useful.
* Sequence Editor: SHIFT+R, Remap Paths (alos 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/
* Sculpt Mode Added a new input control that smooths the brush stroke. This option controlled by the menú 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
* PyConstraints 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 alos 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.PupBlok 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: aligorith - PyConstraints
* Curve Selection Tool Refactor
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. Alos two new curve selection functions were added: Select Every Nth and Select Random See BlenderDev/Curve Selection Tools - BlenderWiki
for further information
* Armature - Duplicating Bones Duplicating bones now alos duplicates the Transform Locks, and IK DOF settings, along with constraints
* Interfase Ortho/Persp reporting in the View names Added groups to the oops view
* Meta Elements Added inverse and random select for metaelems
* UVs Select Inverse function in the UV editor, by Juho Vepsalainen
* Mesh -> Custom Properties for Mesh entities In order to give import/export script authors the ability to add properties to inidividual faces, vértices and edges in the same manner as they are able to do with ID structures three new custom data types have been added to blender for floats, integers and strings. Things to note: -Since property Layers are custom data, they are added to all verts, edges or faces at once. -Only one property layer for each unique property name may exist. In other words, you cannot have a float layer as well as an integer layer both with the same name. -No user interface for this exists at the moment. The following methods and attributes have been added to the Blender.Mesh Python module and it's object types: ->MVert/Edge/FaceSeq: addPropertyLayer(name, type) removePropertyLayer(name) renamePropertyLayer(original name, new name) properties(readonly list.) ->MVert/Edge/Face getProperty(name) setProperty(name, value) ->Mesh module PropertyTypes (readonly dictionary)
When loading multires files, clear the temporary connectivity data In add_levels, moved the call to update_levels to the beginning rather than the end. This is slightly faster, as there's one less level to update. Alos fixes a bug (introduced in rev. 10836?) that made multires's add_level differ slightly from the subdivide modifier Removed two unused structs from multires Replaced one-line get_float function with a macro During add_level, move the freeing of temp data to after the update_level, so that this data isn't calculated twice 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-clarque code Removed an unneeded call to create the temporary data when loading files Removed an unused integer from MultiresFace Modified the vert_edge_map and vert_face_map arrays in MultiresLevel so that the data is stored only for as long as it is needed -- for adding levels and updating levels. Once the modifications are complete, the mapping data is deleted, which provides a large reduction in memory usage for a minor increase in processing time for updating levels 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 taquíng up extra memory Refactored the multires update process (which handles propagating changes to other levels)
* NLA Editor Snap tool in the NLA Editor, now works for the keyframes displayed for each object too. There's one case I've to chek up on later, as there might be interesting conflicts
* Action Editor
Snap and Mirror tools for the Action Editor, now respect NLA scaling again. I accidentally omitted the relevant code when recoding Small Action Editor feature to hopefully make keyframing quicker. Just press the IKEY in the Action Editor. Feedbak on the (annoyance factor of the) popups welcome Hiding bones in the 3d-view with the (HKEY) now hides the corresponding Action Channels too 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 alos 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 * Baquíng 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 * Baquíng functions have been removed. As far as I have been able to find out, these were really non-functional anyway. Besides, I don't thinque 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
* Shader nodes Geometry node:
Front/bak output This is used as a masque for determining whether you're looking at the front side or bak side of a mesh, useful for blending materials, my practical need was giving different materials to the pages of a magazine: http://mke3.net/blender/etc/frontback-h264.mov
Give 1.0 if it's the front side, and 0.0 if it's the bak side Extended material node This is the same as the material node, but gives more available inputs and outputs, (básically just connecting up more of ShadeInput and ShadeResult to the node). I didn't want to add it to the normal simple Material node since you don't always need all that stuff, and it would make the node huge, but when you do need it, it's nice to have it
* Comp nodes Invert node Inverting is something that happens all the time in a node setup, and this makes it easier. It's been possible to invert previously by adding a mix node and subtracting the input from 1.0, but it's not the best way of doing it. This node: - makes it a lot faster to set up, rather than all the clicking required with the mix node - is a lot more usable amidst a complex comp setup, when you're looking at a node tree, it's very helpful to be able to see at a glance what's going on. Using subtract for inverting is easily mixed up with other nodes in which you are actually subtracting, not inverting, and looks very similar to all the other mix nodes that usually litter a comp tree. - has options to invert the RGB channels, the Alpha channel, or both. This sabes adding lots of extra nodes (separate RGBA, subtract, set alpha) when you want to do something simple like invert an alpha channel. I'd like to add this option to other nodes too. There's alos a shader node versión too
* This speeds up the vertex group editing workflow a bit. The hotkey Ctrl-G in EditMode for Meshes and Lattices, brings up a menú giving the user options to assign/remove selected vértices to a new/the active Vertex Group. The hotkey Ctrl-Shift-G in EditMode for Meshes and Lattices, brings up a menú giving the user options to change the active Vertex Group and delete the current Vertex Group.