====================
The MeshDeform modifier can deform a mesh with another 'cage' mesh.
It is similar to a lattice modifier, but instead of being restricted
to the regular grid layout of a lattice, the cage mesh can be modeled
to fit the mesh better.
http://www.blender.org/development/current-projects/changes-since-244/modifiers/
Implementation Notes:
- OpenNL has been refactored a bit to allow least squares matrices to
be built without passing the matrix row by row, but instead with
random access. MDef doesn't need this actually, but it's using this
version of OpenNL so I'm just committing it now.
- Mean value weights for polygons have been added to arithb.c, a type
of barycentric coordinates for polygons with >= 3 vertices. This
might be useful for other parts of blender too.
found by Riku Palomäki, was that "bridge" vertices (which connect two or more
faces that don't share edges) were not being included in the maximum final
vertex count calculation (used for memory allocation, hence the crashes).
Unfortunately Riku's patch actually stopped bridge vertices from being split
correctly, so I have fixed the problem by adding the maximum number of vertices
that can be generated from bridge vertices to the maximum final vertex count.
Thanks to Riku Palomäki for finding the cause!
bsystem_time was being called with an extra variable, which was useless. Most of the places that called it, were passing NULL for that variable anyway.
I've also cleaned up that function a bit, but the underlying problems with that part of the code still exist (EVIL GLOBALS that are exported for frame_to_float), for mblur and fields rendering features. That remains for another time.
===============================
An improved CrazySpace correction is now used for Armature modifiers that use
vertex groups, and that are the first enabled modifiers in the stack. This is
a a specific case, but also a common one.
http://www.blender.org/development/current-projects/changes-since-244/skinning/
Implementation Notes:
- The quaternion crazyspace correction is still used for modifiers other than
the armature modifier.
- Modifiers can now provide a deform matrix per vertex to be used for
crazyspace correction, only the armature modifier implements this now.
Copying Displace modifiers by themselves did not work correctly. The code was incorrectly just copying memory for source modifier to the new copy, causing problems due to the ModifierData struct at the start of the DisplaceModifierData struct (linked list pointers still referring to old stack).
- modifier.c: moved a check out of a loop, removed an unneeded var, made a couple cosmetic changes.
- DNA_modifier_types.h: added parentheses to cast and smooth modifier defines that used bit-shifting (like 1<<1, etc.).
Note: realized they were needed when I tried to use "flag &= ~MOD_CAST_Z" in modifier.c. Since MOD_CAST_Z is #defined as 1<<3, ~MOD_CAST_Z ended up as ~1<<3 while I wanted ~(1<<3). There are other places in that header file and others in Blender where it'd be safer to add the parentheses...
- Updated the epydoc documentation for the features added by Ben Batt to the cast modifier; fixed small typo in API_intro.py.
BTW, thanks Ben Batt (artificer) for checking, improving with a couple features and committing these modifiers :).
This patch adds an option to the wave modifier to displace along the normals
of the base mesh, rather than in the local Z direction.
Thanks to Michael Fox (mfoxdoggg) for the patch!
This patch adds vertex group functionality to the wave modifier, allowing the
user to specify a vertex group with which to modulate the wave deformation.
Thanks to Michael Fox (mfoxdoggg) for the patch!
This patch adds two modifiers: Cast and Smooth.
The Cast modifier deforms vertices into a sphere, cylinder or cuboid shape.
The location and orientation of the projection shape can be controlled by a
specified control object.
The Smooth modifier smooths the mesh in a similar way to the Edit mode "Smooth"
button.
Thanks to Willian Padovani Germano (ianwill) for the patch!
This patch makes the X, Y and Z axes of the mirror modifier individually
toggleable, so it is possible to mirror in more than one direction with a
single modifier.
Thanks to Juho Vepsäläinen (bebraw) for the patch!
NOTE: BLENDER_SUBVERSION has been incremented to support translation from old
to new axis specification.
Speed improvements to the Edgesplit modifier (changed the data structures
and memory management to avoid using slow GHash functions and large numbers
of small mallocs). In my tests, this makes the modifier approximately twice
as fast.
* Added an "Override Image" button to the UVProject modifier; this overrides
faces' currently assigned image with the one given in the modifier panel.
This provides some of the functionality previously provided by the "Add UVs"
button - you still need to add a UV layer manually, but you only need to
change the image in one place.
* Note that the "Override Image" option uses the bit position previously used
by the "Add UVs" option, so old files which had "Add UVs" enabled will now
have "Override Image" enabled.
* Removed the "Add UVs" option from the UVProject modifier
* Added a UV layer menu to the UVProject modifier
* Refactored the Displace modifier UV layer menu code to allow the UVProject
modifier to share it
* Added two CustomData functions to facilitate getting layers by name
If the "UV" texture coordinate option is selected while no UV layers exist,
the UV layer name in the modifier is blank. This is not a problem while no UV
layers exist, but if a UV layer is added the modifier code attempts to use
UV coordinates without handling the missing layer name correctly, leading to a
segfault. This only occurs when the modifier stack is recalculated before a
modifier UI redraw, as the UI redraw updates the layer name.
This fix handles a missing UV layer name by setting it to the active UV layer.
This commit fixes displace modifier to propery support arbitrary uv
layers. This seemed like a fairly big usability bug,
as displace modifiers would use the active UV layer (and thus could change when
you changed the active layer). The modifier UI code now uses a menu for browsing
the uv layers, however only the uv layer name is actually stored, so that
adding/deleting layers won't mess up displace modifiers.
Whenever a displace modifier has an invalid UV name (for whatever reason) the
UV name is set to the active layer. This is checked both in the UI code and
in the modifier exec code, so all bases are covered. For deleting a layer, this
required upgrading the layer delete code in the UI to properly preserve the
active layer, to prevent unwanted behaviour. I hope this is an ok solution.
Brecht, Ben you might want to look over and make sure I didn't break anything. I don't
think I did, I tested as thouroughly as I could.
These can be created and deleted in the Mesh panel in the same place as
before. There is always one active UV and vertex color layer, that is
edited and displayed.
Important things to do:
- Render engine, material support
- Multires and NMesh now lose non active layers
Also CustomData changes to support muliple layers of the same type, and
changes to layer allocation, updated documentation is here:
http://mediawiki.blender.org/index.php/BlenderDev/BlenderArchitecture/CustomData
This commit upgrades the modifier stack to only calculate the data which is
needed, either by modifiers further down the stack or by other functions at
the end of the stack (e.g. drawing functions).
This speeds up modifier stack recalculation, especially where vertex
groups and UV coordinates are concerned. For example, a mesh with an Armature
modifier followed by a Subsurf modifier would previously have required the
Subsurf modifier to interpolate all the vertex groups in the mesh, slowing
down modifier calculations considerably. With this update, vertex group data
is not propagated beyond the Armature modifier, so calculations are faster.
Note that this depends on the order of modifiers in the stack. If the Armature
and Subsurf modifiers were swapped in the above example, the Subsurf modifier
would have to interpolate vertex groups, as they are needed by the Armature
modifier.
This bug was caused by broken's recent patch to make the Curve modifier
determine its axis from the modifier panel, rather than the object's track
axis. In the case where a Curve modifier is applied by parenting the object
to the curve, the curve axis needs to be copied from the object's track axis
in modifiers_getVirtualModifierList(). This commit adds the necessary copy.
Array Modifier type "path length" didn't force a path calculation on load.
Note that this is still improper handling in Blender... an exception that
has to move to the depsgraph.
- New perspective projection capability. If a camera is used as the
projection object, the modifier detects whether to do perspective or
orthographic projection based on the camera type. If any other object
type is used as the projection object, orthographic projection is used.
- Orthographic projection actually works properly now.
- The projected UVs are scaled and offset so that the image is centred in
the projecting camera's view.
- AspX and AspY inputs have been added to control the aspect ratio of the
projected UVs.
Also:
- I have added the Mat4MulVec3Project() function to BLI_arithb.h; this
function converts a 3-dimensional vector to homogeneous coordinates
(4-dimensional, with the 4th dimension set to 1), multiplies it with the
given matrix, then projects it back to 3 dimensions by dividing through
with the 4th dimension. This is useful when using projection matrices.
that vertices will be individually displaced in the X, Y and Z directions
by the RGB components of the texture (R affects X, G affects Y, B affects Z).
This can be used along with e.g. the colour Clouds texture for a jitter effect.
Wave Modifier
This patch allows the option to use an object to determine the wave modifier's
start X & Y, it also allows for animated objects giving a moving wave
start X & Y.
Thanks to Michael Fox for the patch!
All data layers, including MVert/MEdge/MFace, are now managed as custom
data layers. The pointers like Mesh.mvert, Mesh.dvert or Mesh.mcol are
still used of course, but allocating, copying or freeing these arrays
should be done through the CustomData API.
Work in progress documentation on this is here:
http://mediawiki.blender.org/index.php/BlenderDev/BlenderArchitecture/CustomData
Replaced TFace by MTFace:
This is the same struct, except that it does not contain color, that now
always stays separated in MCol. This was not a good design decision to
begin with, and it is needed for adding multiple color layers later. Note
that this does mean older Blender versions will not be able to read UV
coordinates from the next release, due to an SDNA limitation.
Removed DispListMesh:
This now fully replaced by DerivedMesh. To provide access to arrays of
vertices, edges and faces, like DispListMesh does. The semantics of the
DerivedMesh.getVertArray() and similar functions were changed to return
a pointer to an array if one exists, or otherwise allocate a temporary
one. On releasing the DerivedMesh, this temporary array will be removed
automatically.
Removed ssDM and meshDM DerivedMesh backends:
The ssDM backend was for DispListMesh, so that became obsolete automatically.
The meshDM backend was replaced by the custom data backend, that now figures
out which layers need to be modified, and only duplicates those.
This changes code in many places, and overall removes 2514 lines of code.
So, there's a good chance this might break some stuff, although I've been
testing it for a few days now. The good news is, adding multiple color and
uv layers should now become easy.