Commit Graph

310 Commits

Author SHA1 Message Date
85540d5aa7 more macro --> BLI math lib, mainly replace VECCOPY in render and blenkernel. 2011-11-06 16:38:21 +00:00
b82dee0cb4 replace macros with bli math functions for particles code 2011-11-06 14:00:55 +00:00
f837b46a2b Modifier compilation tweaks (Blender conference commit)
* Fluid compilation: Inverse the compile flag from DISABLE_ELBEEM to WITH_MOD_FLUID for consistency. (scons/cmake)
* Use WITH_BF_FLUID in your user config (scons) 

* Add support for scons to disable build with Decimate and Boolean modifier. 
(WITH_BF_DECIMATE and WITH_BF_BOOLEAN)
2011-10-29 23:56:07 +00:00
92fe279fe6 quiet -Wempty-body and unused warnings 2011-10-26 21:30:08 +00:00
4a04f72069 remove $Id: tags after discussion on the mailign list: http://markmail.org/message/fp7ozcywxum3ar7n 2011-10-23 17:52:20 +00:00
e417e011d5 Code cleanup: file operations merged into single header, some function names
made less cryptic and changed to indicate if they work on files or directories.
2011-10-22 15:35:49 +00:00
74017cb020 header cleanup and typo's 2011-10-22 01:53:35 +00:00
8d6a554d75 - add BLI_string_utf8.h for unicode functions.
- move font.c unicode functions into string_utf8.c and rename to fit with other BLI_string funcs.
2011-10-20 09:47:05 +00:00
f9c41eaaf8 Fix for [#28823] Boids use uninitialized memory.
* Boids need the random velocity vector always.
2011-10-15 01:42:26 +00:00
bc40f11093 header cleanup (no functional changes) 2011-10-10 09:38:02 +00:00
Alex Fraser
558b646216 Committing patch #27442: Adaptive time step for fluid particles. The number of
subframes can now be altered automatically while an SPH (fluid particle)
simulation is running.
2011-09-25 11:51:28 +00:00
b3704f45c4 Fixes for snprintf usage:
* replace by BLI_snprintf in various places, note _snprintf on windows
  does not properly null terminate the string.
* fix overflow in sequencer proxy code due to buffer being smaller than
  specified size.
* fix some usage of snprintf as strcpy, this is will go wrong if the
  string contains % characters.
* remove BLI_dynstr_printf function in gpu module, use BLI_dynstr_appendf
2011-08-30 10:07:50 +00:00
6a392e8cb5 == RNA Property Updates get called by Animation System now ==
This fixes bug #26764 and several others like it, where modifier
properties (and others, but most visibly modifiers) would not do
anything when animated or driven, as modifier properties require the
RNA update calls to tag the modifiers to get recalculated.

While just adding a call to RNA_property_update() could have gotten
this working (as per the Campbell's patch attached in the report, and
also my own attempt #25881). However, on production rigs, the
performance cost of this is untenatable (on my own tests, without
these updates, I was getting ~5fps on such a rig, but only 0.9fps or
possibly even worse with the updates added).

Hence, this commit adds a property-update caching system to the RNA
level, which aims to reduce to the number of times that the update
functions end up needing to get called.

While this is much faster than without the caching, I also added an
optimisation for pose bones (which are numerous in production rigs) so
that their property updates are skipped, since they are useless to the
animsys (they only tag the depsgraph for updating). This gets things
moving at a more acceptable framerate.
2011-07-24 04:34:46 +00:00
9469f0d0af Bug fix: particle cache should only be cleared on the exact first integer frame, not in the case of a subframe between the first and second frame. 2011-07-18 02:40:54 +00:00
2fb4a37baa Fix for [#27289] Hair: Render Option - Object does not point objects to end of "hair path"
* Objects are now always rotated in the directions of the hair paths
* Secondary fix: particle size wasn't updated for hair particles, so dupliobject size couldn't be change after the hair was edited
2011-07-10 17:30:31 +00:00
de7592b489 Fix for [#26873] Animated displacement modifier on an object doesn't work with hair particle objects
* Noise is now considered an animated texture as it changes with every frame
* Converted a few places in particles code to use the particle system's own random table instead of BLI_frand.
2011-07-10 17:04:56 +00:00
db2d737f0e Fix for [#27182] particle/collision kill interacting strangely
* Particle die time wasn't taken correctly into account in certain situations when calculating dynamics.
2011-07-05 02:56:14 +00:00
09492d9072 Bug fix: keyed physics didn't work properly if the first key wasn't the keyed particle system itself
* Also some nicer rotation handling for the explode modifier
2011-06-12 11:09:39 +00:00
d02480cdaa remove / comment unused code, patch by nico_ga on IRC with some edits. 2011-05-22 16:29:51 +00:00
b0ced3ef83 Fix for [#27131] particle system BUG - one particle generated twice at vertex (e.g. 9 particles generated at 8 locations)
* The tiny offset value used in particle distribution code was actually too small, so that floating point errors got the best of the calculations.
2011-05-15 15:51:17 +00:00
2137e2ecec Fix for [#27294] Subframes cause dampened particles to behave differently
* The unphysical particle damping wasn't scaled according to the timestep.
2011-05-05 17:07:20 +00:00
210ee1ade4 whitespace only, no functional change mixed tabs/spaces --> tabs. 2011-04-21 13:11:51 +00:00
f8124d6db7 [#26848] Keyed Particles seems to be broken
* Explode modifier wasn't updated properly when keyed particles were used.
* Explode modifier didn't get correct locations for grid distributed particles.
2011-04-10 11:24:29 +00:00
69bd72c3b6 quiet gcc float -> double promotion warnings. 2011-04-02 02:08:33 +00:00
7a252d9824 Fix for [#26658] Permeable colliders stop particles
* Forgot this exception from the collisions rewrite. Don't check collisions with the same face twice.
2011-03-29 10:27:31 +00:00
ca38366732 particles & vector-font: floats were being implicitly promoted to
doubles, adjust to use floats.
2011-03-28 11:21:39 +00:00
72b4bf2fda Bug fix: particles emitted from a moving emitter exploded with verlet integration
* Verlet integration didn't like moving emitters, so now the first step for newborn particles with verlet is actually done with euler integration.
2011-03-28 08:08:59 +00:00
4c3899ca09 Fixing the particle emitter interpolation (#25385 & #26493) further
* The interpolation should only be done if the dynamics were calculated, since otherwise animation keys can't be set after parenting.
2011-03-22 12:53:18 +00:00
4a305e7edb Half way fix for [#25385] Particles Emitter only interpolates IPOs & [#26493] Particle system animates incorrectly when emitting mesh is parented
* Particle emission now updates all parent objects too to the exact emission time.
* This only does object level animation as updating the object data for every particle would be too slow.
* A better fix could be to interpolate the emission location directly from the current particle emission location and the location from the previous frame, but for this some point cache changes have to be made, so it will have to wait.
2011-03-21 08:47:04 +00:00
e134e0139f ugh, left in a debug print in the previous commit 2011-03-19 13:36:43 +00:00
f15c12a0d2 Fix for [#26546] Particles leak through deforming quad mesh
* Slightly too strong optimization in the new collisions code, the "edges" in the middle of quads weren't checked at all.
2011-03-19 13:33:03 +00:00
e44da6b695 hide addon_utils in bpy.utils & tag/remove unused vars in recent commits. 2011-03-18 20:57:32 +00:00
60ce95f562 New particle collisions code:
* The old collisions code detected particle collisions by calculating the
  collision times analytically from the collision mesh faces. This was
  pretty accurate, but didn't support rotating/deforming faces at all, as
  the equations for these quickly become quite nasty.
* The new code uses a simple "distance to plane/edge/vert" function and
  iterates this with the Newton-Rhapson method to find the closest particle
  distance during a simulation step.
* The advantage in this is that the collision object can now move, rotate,
  scale or even deform freely and collisions are still detected reliably.
* For some extreme movements the calculation errors could stack up so much
  that the detection fails, but this can be easily fixed by increasing the
  particle size or simulation substeps.
* As a side note the algorithm doesn't really do point particles anymore,
  but uses a very small radius as the particle size when "size deflect" isn't
  selected.
* I've also updated the collision response code a bit, so now the particles
  shouldn't leak even from tight corners.

All in all the collisions code is now much cleaner and more robust than before!
2011-03-18 15:31:32 +00:00
d789484dc7 Fix for [#20171] Properties of Hair are not animateable
* Don't know when this got broken again, but now the "regrow hair" option works like it's supposed to again.
2011-03-14 17:37:51 +00:00
460bdf1f59 tag/comment unused variables. 2011-03-12 14:21:04 +00:00
5b75593c23 Completely refactored sph fluid particles. Only the very core of the algorithm remains
the same, but big changes have happened both on the outside and on the inside.

New UI:
* The old parameters were quite true to the underlying algorithm, but were quite obscure
  from a users point of view. Now there are only a few intuitive basic parameters that
  define the basic fluid behavior.
** By default particle size is now used to determine the interaction radius, rest
   density and spring rest lengths so that it's easy to get stable simulations by simply
   emitting particles for a few frames and adjusting the particle size (easy when the
   particle size is drawn) so that the fluid appears continuous (particles are touching
   eachother).
** Stiffness - in reality most fluids are very incompressible, but this is a very hard
   problem to solve with particle based fluid simulation so some compromises have to be
   made. So the bigger the stiffness parameter is the less the fluid will compress under
   stress, but the more substeps are needed for stable simulation.
** Viscosity - how much internal friction there is in the fluid. Large viscosities also
   smooth out instabilities, so less viscous fluids again need more substeps to remain
   stable.
** Buoancy - with high buoancy low pressure areas inside the fluid start to rise against
   gravity, and high pressure areas start to come down.

* In addition to these basic parameters there are separate advanced parameters that can
  either be tweaked relative to the basic parameters (or particle size) or defined
  independently.
** Repulsion - the stiffness parameter tries to keep the fluid density constant, but this
   can lead to small clumps of particles, so the repulsion keeps the particles better
   separated.
** Stiff viscosity - the normal viscosity only applies when particles are moving closer to 
   eachother to allow free flowing fluids. Stiff viscosity also applies smoothing to
   particles that are moving away from eachother.
** Interaction radius - by default this is 4 * particle size.
** Rest density - by default this is a density that the particles have when they're packed
   densely next to eachother.
** Spring rest length - by default this is 2 * particle size.

* There are also new options for 3d view particle coloring in the display panel to show
  particle velocity and acceleration. These make it easier to see what's happening in the
  fluid simulations, but can of course be used with other particles as well.

* Viscoelastic springs have some new options too. The plasticity can now be set to much
  higher values for instant deletion of springs as the elastic limit is exeeded. In addition
  to that there is an option to only create springs for a certain number of frames when a
  particle is born. These options give new possibilities for breaking viscoelastic fluids.

New in the code:
* Most of the fluids code is now thread safe, so when particle dynamics go threaded there
  will be a nice speed boost to fluids as well.
* Fluids now use a bvh-tree instead of a kd-tree for the neighbor lookups. The bvh-tree 
  implementation makes the code quite a bit cleaner and should also give a slight speed
  boost to the simulation too.
* Previously only force fields were calculated with the different integration methods, but
  now the fluid calculations are also done using the selected integration method, so there
  are again more choices in effecting simulation accuracy and stability. This change also
  included a nice cleanup of the whole particle integration code.

As the internals are pretty stirred up old particle fluid simulations will probably not
work correctly straight away, but with some tweaking the same level of control is still
available by not using the "relative versions" of the advanced parameters (by default these
are not used when loading old files).
2011-03-12 12:38:11 +00:00
f13ae69bcd Fix for [#26441] Child Hair Crash
* Silly mistakes in my last particle distribution code commit.
2011-03-10 12:36:11 +00:00
1110c80696 add option requested [#25598] projection surface snap issue
for retopo workflow you don't wan't to project the mesh onto its self, added option not to.
2011-03-09 22:45:34 +00:00
f89fc824aa Fix for [#26372] Objects as PS Hair displays and renders differently
* Grid distribution isn't really suited for hair, so this is now disabled.
* Setting a jittered distribution with particles/face = 1 now creates particles on the center of faces.
* Quite a bit of cleanup of the whole particle distribution code.
2011-03-09 14:18:33 +00:00
Nathan Letwory
0ff06e21cd doxygen: blender/blenkernel tagged. 2011-02-27 20:40:57 +00:00
5a70edc4af Possible fix for [#26190] Changing particle amount crashes
* In some cases fluid particles could be born at the exact same locations. Now these cases are just ignored and such particles don't effect each other.
2011-02-23 10:42:27 +00:00
8b7482892b made most variables which are only used in a single file and not defined in header static for blenlib, blenkernel and editors. 2011-02-14 17:55:27 +00:00
7b4c4183f3 Small addition to particle grid distribution:
* New option to distribute particles in a hexagonal grid.
* This is much more stable for fluids than normal grid distribution and looks quite nice otherwise too :)
* Also some small scale code cleanup of grid distribution code.
2011-02-13 13:50:19 +00:00
0955c664aa fix for warnings from Sparse static source code checker, mostly BKE/BLI and python functions.
- use NULL rather then 0 where possible (makes code & function calls more readable IMHO).
- set static variables and functions (exposed some unused vars/funcs).
- use func(void) rather then func() for definitions.
2011-02-13 10:52:18 +00:00
fafbd9d71b Particles todo item: particle textures
* Effecting particle properties with textures was possible in 2.49,
  but not in 2.5 anymore.
* Now particles have their own textures (available in texture panel
  for objects with particle systems), which are totally separate from
  the material textures.
* Currently a basic set of particle properties is available for
  texture control. Some others could still be added, but the whole
  system is not intended as an "change anything with a texture" as
  this kind of functionality will be provided with node particles in
  the future much better.
* Combined with the previously added "particle texture coordinates"
  this new functionality also solves the problem of animating particle
  properties through the particle lifetime nicely.
* Currently the textures only use the intensity of the texture in
  "multiply" blending mode, so in order for the textures to effect
  a particle parameter there has to be a non-zero value defined for
  the parameter in the particle settings. Other blend modes can be
  added later if they're considered useful enough.
2011-02-12 14:38:34 +00:00
3396f73c17 fix for possible (but unlikely) problem with strncpy not adding \0 and then extending the string with strcat. use BLI_snprintf instead. 2011-02-12 09:58:28 +00:00
4e8a8d1e8f Improvements for particle grid distribution:
* Particles that aren't shown are now actually deleted (huge memory savings for flat objects).
* Grid distribution for flat objects is now done on the surface object surface without offset.
* Invert grid option wasn't in ui and it didn't work for non-volume grids.
* New parameter to randomize the grid point locations.
* Resolution soft/hard limits changed to even 50/250.
2011-02-04 15:48:13 +00:00
ba9dacbd3d Silly mistake in own previous commit, now we have particles again! 2011-01-27 17:29:22 +00:00
8fa9a91639 Fixing some clang reported issues in particle code.
* Not really bugs, but some code cleanup and clarification.
2011-01-27 12:21:14 +00:00
799e9c48c1 comment dead code and fix 2 missing NULL checks (pointer used after NULL check and checking against incorrect pointer before use). 2011-01-22 03:50:09 +00:00