- Blur nodes didn't accept RGB buffers (only RGBA or single channel ones)
- Mix node had maximum for 'mix' on 1.0, for passes edit that could become
more, made it 5!
although it has a lot of noise. Not to mention our bad string code gives
a load of warnings.
I've reviewed specifically:
- file reading/write
- dna and library code
- node system
- entire render module
Done a couple of files in src/ too, seemed to be nice errors.
Actually no real bug, but unfinished work in Composite:
The ZCombine node only accepted images, no value inputs for sockets.
Now only the first (top) input socket should be an image, the other ones
can use constant color or values too. Nice way to split an image in
foreground and background.
Also: added an output socket for the resulting Z value.
Do note that zcombone is aliased, no AA or sample info is available.
That's for another time.
Yesterday's commit from Brecht broke armature editmode, damaging armatures
in a way you cannot rescue. This rewinds the main changes. After commit
I'll try to find the error...
- After making a Group, internal socket values are now copied to the
group node, so an execute will give identical results
- After ungrouping, the cyclic dependency tagging didn't work well in
all cases, showing a red noodle line and giving composite errors.
For time being solved by calling the NodeSort twice.
- Viewer nodes now get previews updated always (used to be only the active)
Note: this is not for previews inside of groups!
Minor change to to how luminance detail is added to alpha channel in chroma key node.
Removed unused inputs in chroma key and luminance key nodes.
Changed chroma key controls back to sliders because I think they offer the user a more intuitive interface to the node.
Composite: Rotate and Scale nodes ignored the translation offset.
I've added rotating and scale of offset vector, but this should become a
nice 2d matrix[3][3].
Also fixed: the call "pass_on_compbuf" now has correct handling for
using duplicate buffer rects. Can be used safely again to migrate input
buffers to the output when no operation happened. This makes translate
node faster again btw.
Loadsa new compo nodes, most added in new menu "Mattes".
- Seperate into YCC
- Combine YCC
- Seperate into YUV
- Combine YUV
- (Chroma) Difference Matte
- Chroma Key
- Luminance Key
- Color Spill correction
Main problem is missing docs still... Bob is working on it, he'll also
make tooltips for all buttons.
Some UI things might change too, like more clear names.
The Preview panel in UV window, for compositing, sets a 'crop' flag in the
scene when used. Somehow this flag can hang when you switch screens or
close windows. Or even worse, it crashed on renders.
This commit ensures that the compositor survives and gives error prints.
The real issue, hanging flags on closing windows, has to be solved still.
input nodes was 'passing on' the buffer (because it didn't operate on the
image). That's for example for Blur with size 0 or for Translate node.
This passed-on buffer then got freed inside the group...
Solution now is just a malloc. Better system should be devised, with
reference counting or so. Thanks Ivan Hoffmann for the sample file!
- Icon previews for Images were created always for old files, which made
browsing (menus) incredible slow. Added a minor change in the flow, so
icons only get created when the user invokes loading images.
Andrea; you might check this, probably not al cases are covered yet?
- Compositor: the 'File Output' node now has a min/max frame for which it
writes files
- Compositor: fixed a very bad bug (even in 2.42a release) that made the
depsgraph for nodes not work... while editing, only the nodes that change
should be recalculated, but accidentally all of them were done each time.
Added: Scale node in Compositor.
- Only works for RGBA buffers now
- I have added an option "Relative" or "Absolute" scale. So you can also
define actual pixels for scale. Values for scale are reset when you
switch, to prevent too weird situations.
- Scaling wasn't foreseen to work with the preview-panel in UV window, this
preview cropping only happens for Image and RenderResult nodes... actually
should be done for the scale too. I wait with t hat though... this preview
method isn't very advanced yet.
- The pass_on_compbuf() here crashed in tests with preview panel, that's
weak code... I have to recode that. For time being I use the
dupalloc_compbuf to have it stable.
module itself, replacing the special MEM_mallocT/MEM_freeT functions.
Mutex locking is only enabled when threads are running.
There was no good reason to have these separate, it just led to ugly
hacks when calling functions with non-threadsafe malloc from threads.
Compositor: Rotate Node
It only delivers RGBA buffers for now. Also Image size is unaltered, so
parts get cropped away. Doesn't work with translation Node before this
node yet.
Compositor: Image nodes used for Movie files didn't convert the relative
paths (if used), so it could not load the movie file.
This bug explains why sometimes movies worked in the Compositor... so for
the current release the bypass is to disable the "Relative" button in the
File Window.
The Blur node didn't pass on a buffer when the 'factor' value was not
exactly zero. Tiny values (like 0.0000001) or even negative ones were
still handled by the blur code.
- It saves a file with indicated type on each change, with number
appended denoting the current frame (like ANIM saving).
- Output filename button supports relative paths ("//")
- Shows optional preview image too
- For now, added a print on each file save as feedback
To make this option work nicely, changed the BKE_makepicstring() function
to have less globals inside, so it is more generic. Todo: allow amount of
digits in filenames to be set (to support files like tmp_123456.jpg)
* Combine RGBA
Basically the opposite of separate RGBA, brings 4 value channels into a single
RGBA image). Has interesting possibilities for reordering channels, when used
with separate RGBA!
* Dilate/Erode
Originally written by Brecht van Lommel, with some minor modifications and
tweaking by myself. Positive distances dilate, negative distances erode.
* I also added the 'value' field to the hue/saturation node. Minimal extra cost,
and can be handy.
The VectorBlur node crashed when it didn't get a RGBA type image as
input (like using Alpha as input). Added typeconversion for it.
Note: the Z input and Vector input are not converted, but checked for.
When an improper type gets connected to these inputs, an error is
printed in console.
When adding a new node in a group, the call to refresh input/output
sockets was called after a compositing update was executed.
Just moved this call 2 lines up.
This also uncommits the fix from Joilnen, the stack pointers in the node
system are *per definition* set. If NULL, it's an indication something
else is wrong.
Composite: the Translate Node only worked in some cases (pixel processor
call), and not for:
- filter
- seperate rgba
- conversion of buffer types (value to rgba etc)
Blur still doesn't either, but that code is too optimized to add quick.
Will put on todo for checking on better unification of translations.
Sequence renders, calling scenes with compositing, didn't execute composite
correctly. Confusement caused by the rule that a "Render" handle has same
name as Scene, which gives conflict for the case when a Scene has
sequencing with Scene strips with its own scene in it.
The previous solution for that conflict caused composite not to work. This
commit solves that, but it is still hackish. Main reason is the still
bad global G.scene, in use by compositor.
In compositor you can mix RGBA and Value buffers freely, but with one
exception... the Composite (output) node!
This solves a crash when connecting a Alpha socket to RGBA input in
Composite node.
naming convention for Compositing:
- Render Result node -> Render Layers node (name only appears in Add menu)
- Compositor image -> Viewer Node image
I've also added a version patch (2.41 saved files only) to rename existing
"Compositor" Images.
Compositor:
Viewer Nodes inside of Groups now work too. To not frustrate interactive
speed, the following rules apply:
- Making a Group editable (or closing) doesn't signal recalculation of
composite
- clicking on an Input socket always checks changes and calulcates
- When there are Viewers inside an edited Group, Viewers in the main tree
are not executed.
Also added: a "hide unused sockets" icon in the header of Viewer nodes.
This allows cleanup of Groups, to prevent these sockets get reveiled.
This commit brings back:
- Field Render
- MBlur Render (old style)
- Border render with or without cropping
Note: Field Render is not supported in Compositor yet. Blurring or filter
will destroy field information.
Both MotionBlur as Field render are done before Compositing happens.
Fixes:
- The "Save Buffers" option only worked on single frame renders, not for
Anim render.
- Found an un-initalized variable in Render initialize... this might have
caused the unknown random crashes with render.
Code restructure:
Cleaned up names and calls throughout the pipeline, more clearly telling
what goes on in functions.
This is visible in the updated first image of the Wiki doc:
http://mediawiki.blender.org/index.php/BlenderDev/RenderPipeline
Material Nodes: The Texture node didn't do the standard "2d mapping" yet
in case an Image Texture is used. Caused wrong mapping for example for UV
coordinate inputs.
render option "save result to disk" and ESC from rendering, it crashed...
Note; reading partially saved exr files still crash... but that's an issue
within the openexr lib. I've mailed the openexr dev list for assistance
how to properly close a partial saved tile-file.
- Renderwin still used a thread-unsafe malloc, in the header text print
- Setting clipping flags in vertices for parts required a mutex lock after
all... I thought it would go fine, but noticed on renders with small
amounts of faces that sometimes faces disappear from a render.
(was doing movie credits, so all faces are visible! Otherwise it would
have hardly been noticable...)
same composit3_pixel_processor() function. gcc even gives nice warning:
node_composite.c: In function `node_composit_exec_mix_rgb':
node_composite.c:1437: warning: passing arg 9 of `composit3_pixel_processor' from incompatible pointer type
floats were read as pointer...
It still needs some work but at least now it doesn't crash.
Basically it changed composit3_pixel_processor so that its using full
vector instead of first element (fac variable in the code).
In reality though its just pushing where its looking at the first element
of the vector to another function (do_mix_rgb)
which is calling ramp_blend with fac[0].
Kent
filtersizes (below 2 pixels). This because Bokeh actually does 2 peaks...
/\ /\
/ \/ \
I've added some fixes in the filter calculus though, and made sure that
on size 1 at least the image gets copied straight away.
Also fixed error, Bokeh shifted image 1 pixel up.
Todo; make filters become real floats in size...