[#8067] external texture plugin thread-safe modifications
Submitted By: David Anderson (davywavy)
It makes it so the "result" array is passed in, instead of a global var.
I expanded the patch so it will play nice with older plugins that are not
thread safe as well.
I also updated the existing plugins in the release, so they are thread safe.
--------------- What do people think of this.... ------------------
This should maybe be talked about in the functionality board or something,
but what do people think of adding in default texture/sequence plugins.
or making a seperate tree like lib for plugins.
The reason I ask is we have had a couple of upgrades to the plugin system.
(supporting float buffers for sequencer, and this one for textures)
http://www.cs.umn.edu/~mein/blender/plugins does not store revisions of
plugins I just make sure they work with the latest version. This is
getting messy. I haven't upgraded a lot of them to use floats (I know,
I'm lazy, and now this will also make modifications to the plugins)
It would be nice to have some of the standard ones under revision control.
We also seem to be having an explosion of platforms supported. It would
be nice to have platform maintainers compiling plugins as well for releases.
(Its getting to be more work for me to keep up with things...)
I'll go back to my corner now and be quite. ;)
Kent
working correct with translucency. Removed a check that presumably
is an optimization, but can't work correct and also gives no noticable
performance difference in my tests.
computers, probably due to slow multithreaded malloc. Now each render
thread keeps a list of qmc samplers that it fills as needed while
rendering (since it is hard to predict the actual amount needed in
advance due to ray recursion).
act as if the object was in its original position, instead of being
different for all instances. However, this is desired behavior in
some cases and so breaks compatibility. Now it only does the new
behavior when enabling the "From Original" option.
The claim was:
Bugfix: don't do full sample merging on re-rendered layers in
the compositor.
But result was that rendering didn't happen at all for scenes
with a composite.
I also don't understand the commit, seems like it's incomplete?
Fix for bug #7418: texture ipo's didn't show for textures in node materials.
Fix for part of bug #6758: node materials in other node materials could
miss texture coordinates.
but only when the UV's are connected. That fixes some artifacts when
baking and using tangent space normal maps. It does mean increased
memory usage because it now stores 4 tangents per face like UV's,
and increased processing time, but there's no simple way around that.
If you composite using multiple scenes, the "use FSA" button had to be set
or disabled for each scene. Now you can just set/disable FSA for the scene
that does the compositing. You can only disable FSA in other scenes if it
was set before though.
(Any understands these lines? :)
shadowbuffers. At the time the results were not satisfying enough,
but we now suffer a shadow problem that might well be solved with
this feature.
Problem:
Temporal aliasing of shadowbuffers when small details move (like strands).
In this case it doesn't work to simply increase the shadowbuffer size,
because strands are pixel-sized. Huge shadowbuffers make strand shadows
almost disappear. So... the shadowbuffer resolution has to be not too high.
Instead of increasing the buffer size, we then create multiple buffers,
each on different subpixel positions (a bit like "FSA" :).
So! Shadowbuffer sampling then works as follows;
1) You take multiple samples in the shadowbuffer, on different locations
inside (or around) the rendered pixel.
That option was aready available as "Samp" button in Lamps
2) Set amount of sample buffers. It is default 1, but can be 4 or 9.
The results of setting it to '4' or '9' buffers you can see here:
http://www.blender.org/bf/filters/index3.html
Actually, deep shadowbuffers could solve it probably too! Anyhoo...
the renderer could lead to results being reused for unrelated
points, result was one wrong pixel or strand per part. Now instead
of setting the sample counter to 0 multiple times, it keeps a global
counter per thread for the whole render.
The RE_WriteResult function don't call BLI_make_existing_file
like BKE_write_ibuf, so if you append a directory to the output
path and it don't exist, the exr_begin_write fail to create
the file and blender crash.
Note that this is only 1 line of code and don't touch
anything in the render code.