Plumiferos request: Made individual duplicated group objects still check on
the restriction flag, *after* the group-duplicator itself was checked for.
So it works both. (Matt; was urgent feature, hope you're OK? These options
showed in outliner for groups anyway :).
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.
using the standard drawing functions. Enabling the "Partial Redraw" item in the
sculpt menu will turn on the optimizations which stores unmodified parts of the
color buffer and only redraws the polygons that are within the modified area(s).
The Partial Redraw option uses the accumulation buffer to store the copy, and
unfortunately this is not accelerated on older cards. There are alternatives,
e.g. drawing to an auxiliary buffer or downloading the data from the graphics
card with glReadPixels, but there's no guarantee that these will run at an
acceptable speed on older graphics cards either. For the cards that do
accelerate the accumulation buffer (for nvidia cards, I would assume that is at
least FX5200 and up, and maybe earlier) it provides a very significant speedup.
* Fixed#5294 unselectable objects catching repeated selection clicks in front
of other objects
* Invisible objects stay invisible when other objects are edited
- Curve/Nurbs/Font/MBall now all draw arrays.
- had to flip abgr to rgba in shaded drawing
- Mesh drawing can't be easily done; the indices for faces are not in
in one chunk. Also need a way to gether trias/quads, per material.
Speedup results are mixed. Something between 2-4 times. Especially for
text it seems to help.
This adds the ability to restrict an individual object from:
- being visible in the 3D View
- being selectable in the 3D View
- being renderable
with 3 columns of buttons in the outliner.
These restrictions are further down the hierarchy than layers, so for example if an object is in an invisible layer, it will be invisible regardless of whether the object's own visibility setting is on or off. This works on a different conceptual level than layers, being better for more quick interaction (like temporarily making a mesh unselectable while you're posing its armature), rather than so much for scene organisation.
The 3 columns of icons can be turned off in the Outliner View menu.
Along with this is some small cleaning up in interface_icons.c and outliner.c.
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.
http://download.blender.org/demo/test/2.43/0001_0150_speed.avi
By default the Speed maps in the range 0-100 frames, since there's
not an actual time relationship here.
IMPORTANT: this didn't work before, and default Curve Paths have a
speed Ipo, so past saved scenes will work different now!
- Speed curve points are now drawn on the 3D path as well. With select
info for selected points, if Curve Object is active.
- Duplicating Objects with NLA ActionModifiers now also correctly copies
object pointers, so a duplicate works as expected.
VertexPaint mode didn't show interpolated (smooth) colors in faces.
Error caused by Modifier & DerivedMesh commit of august 22. Rules for
drawing smooth changed a bit...
Deleting all points in a Curve object created empty DispList blocks. The
drawing code didn't like that.
Secured it by both fixing drawing as skipping adding empty DispLists.
Special thanks to Fernando Bastos for the extensive stack tracing.
* when an object had wire draw in Draw Extra enabled and
it was selected and set as a scene, it would draw
as selected. Changed so it draws the wires in a grey
shade, to communicate it is not in the active scene
Full log:
http://www.blender3d.org/cms/Irregular_Shadow_Buffe.785.0.html
In short: this is a shadow buffer approach that always results in crispy
shadows, independent of lamp buffer size or zoom level. This shadow buffer
system also supports transparent shadow.
This is part of work on refreshing Shadow Buffers in Blender. You now can
choose of two types (Classical, Irregular). More types will follow. Also
quality issues for Classical shadow buffers are going to be reviewed,
especially to solve the lousy Biasing.
For the CVS log record; it is based on articles:
Gregory Johnson et al, University of Texas, Austin. (Regular grid method).
Timo Aila and Samuli Laine, Helsinki University of Technology. (BSP method).
That is, a 3D curve now displays as ->->->-> instead of -|-|-|-|.
Comparing the two, I didn't find the arrow display any more confusing then the straight lines when dealing with loops and tilt variations. Sharp turns are more likely to display crossed lines though.
Others should feel free to disagree and make it better.
In a quick glance: (temp image)
http://www.blender.org/bf/rt.png
Main reason is that Lattices are useful a lot for Armature deformation.
Lattices just provide much more precise and interesting control. However,
with only bone envelopes it's very hard to use.
Working with Lattice vertex groups is nearly identical to Mesh:
- on CTRL+P 'make parent' you can choose the deform option now
- In editmode, the buttons to control vertex groups are available
- In outliner you can select vertexgroups too
- Deforming Lattices with Armatures has all options as for Mesh now.
Note:
- No WeightPaint has been added yet. To compensate, the editmode
drawing for a Lattice with vertex group shows weight values for the active
vertex group.
- Lattice editmode doesn't undo/redo weight editing yet.
- Softbody for Lattice still uses own vertex weights
Implementation notes:
- derivedmesh weight_to_rgb() is now exported to drawobject.c
- been doing cleanups in code (order of includes, var declarations, etc)
- weightpaint button handling now is generic
I've checked on Brecht's proposal for Custom Element data;
http://mediawiki.blender.org/index.php/BlenderDev/CustomElementData
It could have been used, but that would mean the existing code for
vertexgroup handling and armature deform couldn't be re-used. I guess this
is really a later todo.
had to make some room in the "Mesh Tools 1" panel,
removed "Center" - its alredy in the "Mesh Tools" panel, and grouped the "Normal" draw buttons.
At the moment mixing modes dosnt work, we will need to review this to see if its worth attempting.
really cool to get this working solidly, but there are many potential problems with the
triangle face creation across the flat surfaces, especially when there are holes inside
the curves. Maybe this could be a fun project for someone better at this than I? :)
Taper object curves still cause similar problems...
* Made the curve radius affect the 'Nsize' curve normal drawing too, so you don't need a
bevel to see the value.
- draw-extra for Lamps did not follow selection color
- Surface objects were drawing curves always in unselected color, also its
draw-extra options didn't follow selection color then
- pending commit for OSX intel systems, with intel graphics. These now call
an extra swapbuffers after glFlush(). Code is ifdeffed, and doesnt affect
other systems.
- show-off commit: option to have transparent nodes over the composite
result. Only draws Image for active Viewer Node now, and image doesnt
translate nor zoom (which isnt bad though).
Set in themes the alpha color of "node backdrop" to make nodes
transparent.
Curves without bevel/extrude don't react to buttons to fill front/back.
That is coded that way, so added this info to the tooltip
Bug report #4566
Creases drawing became very awkward in commit in august last year. Flipped
the drawing order so the fat lines - denoting creases - are drawn first.
That way the value of crease is visible, as well as edge selection state.
When using Node Shaders, the OpenGL color (solid drawmode) in 3d window
was still using the base Material only. That's a bit counter-intuitive
yes... i've replaced this with a function that checks for the active
material node color. Not perfect, but at least interactive.
New "Dimension" button: when using TAB to cycle over buttons, the dimension
event was sent multiple times, accumulating scaling. The code was also not
prepared to handle multiple changes at one event.
Also: added object_get_boundbox(Object *ob) in BKE_object.h, so the code
now really supports most primitives in Blender.
- Selection wasn't possible on center dots in Object mode. I keep adding
it and it keeps disappearing again. Added clear comments in code too.
- Particles: (debug still) print "build particles" happened on each redraw
when "Display percentage" for particles was set to zero.
And more particle issues... the attempts to allow particle systems to be
part of duplicators (groups especially) isn't easy to get working!
This commit solves regular animated particle systems... they rendered on
the wrong location, using wrong object transform.
When using CTRL+L for materials, you can end up with non-existing material
indices in faces. The drawing code then was still happily drawing the old
situation (or something random, its a static array).
This commit checks the maximum amount of materials on an object, and draws
the last available material for a non-existing index. It uses an ugly
global yes, but this code is bad anyway. :)
Dynamic particles sometimes didn't properly use global coordinates.
Meaning they were transformed by an Object, for example when it has
animation constraints.
Error caused by attempt to get duplicators to work for particles. Will
need re-evaluation this.. for now restored old functionality, with
exception of dupli-groups.
- if you add new theme colors, you need to initialize them correctly and
add that in the usiblender.c version patching for saved themes
- the code for detecting group membership was highly confusing
- group colors were even used for non-groups
Further; I didnt add group theme colors yet, that's not a bug. It's a todo
item I preferred to tackle with having a decent wirecolor system once.