Commit Graph

175 Commits

Author SHA1 Message Date
771e607e82 Fix [#36791]: Fire ignores force fields when smoke is set to 0.0 2013-09-22 16:09:31 +00:00
21d670e11e Fix [#36600]: Smoke subframes not working with initial velocity 2013-08-30 09:59:49 +00:00
f97a4bd254 code cleanup: more zero as NULL pointers. 2013-08-07 03:36:05 +00:00
ceaec3c86a Fix [#36265]: Smoke doesn't work if domain object has negative scale. 2013-08-01 12:09:12 +00:00
925c5010e8 fix for checking char arrays against NULL, instead check their first character. also remove some dead code (return directly after return). 2013-07-16 11:42:07 +00:00
1dd7156c4c Fix #36058: Displace Modifier errors using a baked Image and displace baking inconsistency between 2.67/2.68RC and previous versions
This was in fact really nasty bug, caused by multitex_nodes
function using global variable R (which is a copy of current
renderer). this variable is not initialized to anything
meaningful for until first rendering (preview or final)
happened.

Since multitex_nodes might be used outside of render pipeline,
made it so whether CM is on or off as an argument to functions
multitex_ext_safe and multitex_ext. Now multitex_nodes() is
only shall be used for stuff happening from render pipeline!

Also needed to make some changes to other places, so all the
usages of texture sampling knows for the fact whether CM is
on or off.

And one more change is related on behavior of dispalcement,
wave, warp, weightvg modifiers and smoke. They'll be always
using CM off since texture is used for influence, not for
color.

It's rather bigger patch, but it's mostly straightforward
changes, which we really need to be done.

Reviewed by Brecht, thanks!
2013-07-15 14:47:58 +00:00
09e11ad6ef modifier stack: lazy initialize normals
many modifiers were calculating normals, when those normals were ignored by the next modifier.
now flag normals as dirty and recalculate for modifiers that set use `dependsOnNormals()` callback.

Quick test on mesh with 12 modifiers (mostly build type), calculated normals 6 times, now it only runs once - so this will give some speedup too.
2013-05-30 17:36:43 +00:00
8ebc246a9a Fix: smoke initial velocity didn't work with the new custom size particles. 2013-05-28 08:10:01 +00:00
a8ec403d72 Fix: Smoke adaptive domain applied velocity in wrong unit space causing high velocities never apply additional margin ahead the fluid.
Also skip new flow velocity because thats not accurate enough to be of any use in there.
2013-05-21 18:59:46 +00:00
53fd499d28 Fix: smoke noise tile was saved in Blender executable directory, which is often write protected on modern systems.
This caused high resolution smoke to always regenerate new tile when domain was reinitialized, slowing down especially adaptive domain simulations. Now noise tile is saved in Blender temp directory instead.
2013-05-20 17:48:16 +00:00
3b2256f9af Fix for last fix, compile error in smoke code. 2013-05-19 04:12:00 +00:00
d3a6c0c834 Smoke simulator: Add flow subframes and ability to set custom particle size.
Previously it was nearly impossible to have fast moving objects emitting smoke or they would just leave behind a row of smoke poofs instead of continious stream of smoke. Now it's possible to set number of subframes for each smoke flow.

Another new thing is ability to set size of smoke flow particles instead of using closest smoke cell. This also works with my earlier "full sample" commit, so no more blocky particles either. :)

For more info check my blog post: http://www.miikahweb.com/en/blog/2013/05/17/blender-smoke-subframes

This commit also includes couple of fixes I spotted while testing:
* Fix: dissolve was applied at different time for low res and high res simulations.
* Fix: full sample setting didn't get copied with domain.
2013-05-17 17:45:37 +00:00
c152913217 Couple fixes for my previous commit:
- In some cases smoke flow could have 1 cell clipped off its sides.
- Forgot to re-enable openmp for emission code.
2013-05-10 19:30:08 +00:00
2f9f3dd590 Smoke: Add new "Full Sample" option to high resolution smoke panel.
This is hopefully the ultimate solution against smoke blockiness near emitter.

Previously high resolution flow/emitter voxels were generated based on the low resolution ones. So if you had 32 resolution and 4 division high resolution, it still used smoke flow generated from those 32 resolution voxels. Now I introduced a new sampling method called "Full Sample" that generates full resolution flow for for high resolution domain as well.

Read more about it in my blog post: https://www.miikahweb.com/en/blog/2013/05/10/getting-rid-of-smoke-blockiness

Also changed "quick smoke" operator default voxel data interpolation mode to "Cubic B-Spline" to smoothen out it even more.
2013-05-10 16:18:00 +00:00
708622c7f2 Fix #35082: Blender Freeze when change smoke domain setting
Issue was introduced by svn rev56273 and was caused by
both smokeModifier_do and smokeModifier_reset (which is
called from smokeModifier_do) do mutex lock/unlock.
This lead to quite undefined behavior caused by the same
thread released mutex twice.

Solved by not locking mutex from inside routines calling
from smokeModifier_process -- mutex is locked in parent
function anyway.
2013-04-26 08:30:55 +00:00
dbeec2be86 Fix #34783: smoke simulation crash when changing frame while preview rendering.
Added a mutex lock for smoke data access. The render was already working with a
copy of the volume data, so it's just a short lock to copy things and should not
block the UI much.
2013-04-24 17:31:09 +00:00
a120049c3b use psys->seed for smoke random number generator, increase size of MATHUTILS_TOT_CB and reduce float->double conversions. 2013-04-16 09:04:34 +00:00
afb4b65167 Random number generator: replace a bunch of usage of the global random number
generator with a local one. It's not thread safe and will not give repeatable
results, so in most cases it should not be used.

Also fixes #34992 where the noise texture of a displacement modifier was not
properly random in opengl animation render, because the seed got reset to a
fixed value by an unrelated function while for final render it changed each
frame.
2013-04-15 23:12:40 +00:00
a00b72bc75 Fix [#34857]: Negative temp.diff. in a smoke simulation doesn't work. 2013-04-05 07:56:59 +00:00
327f0a0f8e Fix [#34721]: Smoke adaptive domain threshold ignores high resolution data.
In some cases high resolution domain could have higher density than the low resolution counterpart, causing adaptive domain to clip off areas where density is still above domain threshold. Now also high resolution data is used to determine domain bounds.
2013-03-22 17:11:32 +00:00
5a981db3ec Fix [#34561]: Possible smoke crash if smoke flow had lower density than adaptive domain "threshold". 2013-03-10 19:12:40 +00:00
ddddb7bab1 code cleanup: favor braces when blocks have mixed brace use. 2013-03-09 03:46:30 +00:00
203301e26e Additional smoke fix for r54464: floating point precision still sometimes produced way too high values. Now values are also clamped within correct range. 2013-02-11 15:03:22 +00:00
1647725913 Fix: smoke simulator flow sometimes produced NaN values, causing fire to disappear from the simulation. 2013-02-11 13:28:18 +00:00
e9678e74b0 Fix [#34008]: Scaling Smoke Domain In Z-Axis Crashes Blender
Also as minor change skip base_res update on domain step if adaptive domain isn't enabled.
2013-01-29 19:27:05 +00:00
86991fbcb0 Fixed render time regression in Blender Internal
It was caused by image threading safe commit and it was noticeable
only on really multi-core CPU (like dual-socket Xeon stations), was
not visible on core i7 machine.

The reason of slowdown was spinlock around image buffer referencing,
which lead to lots of cores waiting for single core and using image
buffer after it was referenced was not so much longer than doing
reference itself.

The most clear solution here seemed to be introducing Image Pool
which will contain list of loaded and referenced image buffers, so
all threads could skip lock if the pool is used for reading only.
Lock only needed in cases when buffer for requested image user is
missing in the pool. This lock will happen only once per image so
overall amount of locks is much less that it was before.

To operate with pool:
- BKE_image_pool_new() creates new pool
- BKE_image_pool_free() destroys pool and dereferences all image
  buffers which were loaded to it
- BKE_image_pool_acquire_ibuf() returns image buffer for given
  image and user. Pool could be NULL and in this case fallback to
  BKE_image_acquire_ibuf will happen.

  This helps to avoid lots to if(poll) checks in image sampling
  code.

- BKE_image_pool_release_ibuf releases image buffer. In fact, it
  will only do something if pool is NULL, in all other case it'll
  equal to DoNothing operation.
2013-01-21 08:49:42 +00:00
4a427d8e0d style cleanup 2012-12-29 01:54:58 +00:00
b2c66e268f replace MIN/MAX 3,4 with inline functions 2012-12-21 05:07:26 +00:00
e72239c6a4 style cleanup 2012-12-18 01:52:18 +00:00
d2a741048a Fix #33353: Smoke color problems with adaptive domain
High resolution cache didn't always read all written data fields which caused colors to get messed up.
2012-11-30 11:01:14 +00:00
d25b13d13f code cleanup: double promotion warnings, also allow cmake to build SDL without audaspace. 2012-11-09 16:15:00 +00:00
852a41fb0e style cleanup, also remove redundant call to set_listbasepointers in free_main(). 2012-11-07 01:02:28 +00:00
c64fa6a344 Smoke/Dynamic Paint: Allow use of fluid sim generated particles as emitter/brush. 2012-10-27 17:19:55 +00:00
23baf8c9c3 code cleanup: check defgroup_name_index() return value != -1, rather then checking >= 0.
also remove unused bmesh decimator code.
2012-10-22 17:19:05 +00:00
d599b643b7 style cleanup: bge, switch statements mostly.
also left bmesh decimator on in previous commit.
2012-10-21 07:58:38 +00:00
c4b46f119c Fix: Smoke 3d viewport shading was sometimes calculated incorrectly when adaptive domain was enabled. 2012-10-18 14:23:04 +00:00
92862f96dc code cleanup: use float sizes for function args. 2012-10-15 23:11:59 +00:00
57004cfb5a style cleanup:
also add helper makefile targets:
* tbz - makes a tar.bz2 of an svn export
* test_style_qtc - outputs style checks in qtc task format.
2012-10-10 23:44:07 +00:00
e9a61cd29d quiet compiler warnings from recent merge. 2012-10-10 14:28:47 +00:00
cb634b9100 Google Summer of Code project: "Smoke Simulator Improvements & Fire".
Documentation & Test blend files:
------------------
http://wiki.blender.org/index.php/User:MiikaH/GSoC-2012-Smoke-Simulator-Improvements

Credits:
------------------
Miika Hamalainen (MiikaH): Student / Main programmer

Daniel Genrich (Genscher): Mentor / Programmer of merged patches from Smoke2 branch
Google: For Google Summer of Code 2012
2012-10-10 13:18:07 +00:00
e75f5c8208 quiet -Wmissing-prototypes warnings, and enable this warning by default for C with gcc.
helps for finding unused functions and making functions static, also did some minor code cleanup.
2012-09-15 01:52:28 +00:00
3a0593cc3d code cleanup: dont use function calls like dot_v3v3, pow and sqrt within macros which results in calling the function multiple times needlessly.
also added some comments.
2012-07-06 22:48:28 +00:00
f5f25b81e8 style cleanup:
also fix for building ghost test and fix double free in one of the tests
2012-06-17 09:58:26 +00:00
eedaaee072 fix for building without smoke. 2012-06-06 05:37:38 +00:00
3ea554e0a2 Smoke Bugfix: Velocity of moving objects was too high after scaling patch.
Spoted by MiikaH.
2012-06-01 15:49:39 +00:00
ee854f581a Smoke: Fix messed up shadow display with OpenMP. This needs fixing. For now disable openmp for that function. Shadow calculation would be better raytraced on GPU or using shaders for the future.
Part of my Blender Smoke Development Phase III.

(accidently commited this to smoke2 branch first)
2012-05-28 14:31:08 +00:00
1e13168183 Smoke:
a) Another boundary fix. Resulted in smoke getting "sucked" back into the domain
b) Disabling substeps (internal thing). Fixes arbitrary explosions/instabilities.

Part of my Blender Smoke Development.
2012-05-27 18:45:16 +00:00
c4bbc5abfc Fixed smoke 3D-view issues: Preview became invisible from certain angles if domain size was < 1.0 and density+shading strength changed depended on domain size. 2012-05-25 09:40:56 +00:00
f883d12e0c Smoke: Start fixing scaling issues which happen with non cube-shaped domains.
Detail: Smoke solver and Blender side of smoke now share the same cell length.

First reported by the Sintel artists long ago, again reported by MiikaH.

Part of my Smoke Development Project Phase III.
2012-05-24 23:50:20 +00:00
8042c52fb6 Smoke: Fix wrong maximum timestep, resulting in exploding/unstable fluids.
Part of my Smoke Development project.
In conjunction with MiikaH and his gSoC project.
2012-05-24 18:22:36 +00:00