Commit Graph

180 Commits

Author SHA1 Message Date
Lukas Toenne
d73633e537 When the File Output node exits early in convertToOperations (in case not rendering), it should still unlink all inputs to avoid debug assert failure that checks for remaining Node connections (debug_check_node_connections). 2012-11-21 10:09:51 +00:00
Lukas Toenne
e6449a5c2c Fix for debug assert failure with Reroute nodes in compositor. After redirecting links from the reroute output the input must be completely unlinked, otherwise the debug_check_node_connections will complain (this is a sanity check that ensures all the original Nodes have been fully reconnected to Operations). 2012-11-21 09:32:40 +00:00
Brecht Van Lommel
469324b049 Fix compositing normal node not properly showing vector XYZ values when opening
socket menu, and make the normal animatable.
2012-11-17 16:11:02 +00:00
Sergey Sharybin
c063194c6a Fix #33204: Blur node ignores Gamma setting
Gamma correction option was ignored by new compositor system.
Also new compositor was doing alpha premul in a wrong way. In fact,
not sure if it should do premul -- old compositor didn't do that..
2012-11-17 06:14:25 +00:00
Sergey Sharybin
5c6f6301b0 Image thread safe improvements
This commit makes BKE_image_acquire_ibuf referencing result, which means once
some area requested for image buffer, it'll be guaranteed this buffer wouldn't
be freed by image signal.

To de-reference buffer BKE_image_release_ibuf should now always be used.

To make referencing working correct we can not rely on result of
image_get_ibuf_threadsafe called outside from thread lock. This is so because
we need to guarantee getting image buffer from list of loaded buffers and it's
referencing happens atomic. Without lock here it is possible that between call
of image_get_ibuf_threadsafe and referencing the buffer IMA_SIGNAL_FREE would
be called. Image signal handling too is blocking now to prevent such a
situation.

Threads are locking by spinlock, which are faster than mutexes. There were some
slowdown reports in the past about render slowdown when using OSX on Xeon CPU.
It shouldn't happen with spin locks, but more tests on different hardware would
be really welcome. So far can not see speed regressions on own computers.

This commit also removes BKE_image_get_ibuf, because it was not so intuitive
when get_ibuf and acquire_ibuf should be used.

Thanks to Ton and Brecht for discussion/review :)
2012-11-15 15:59:58 +00:00
Dalai Felinto
7cfb79256e Map Range Node (tiles)
this node allows for more control for normalization of the mapped input range.

Made during BlenderPRO 2012 - Brasilia, Brazil :)
Idea and testing: Daniel Salazar
Implementation: yours truly
Reviewed by Lukas Toenne and Sergey Sharybin
2012-11-14 19:53:46 +00:00
Sergey Sharybin
f81e30a41f Solved issue with distorted compositor results in some cases
Originally issue was discovered when using stabilization and movie distortion
nodes, but in fact issue was caused by render layer node always doing nearest
interpolation. Now made it so this node will respect sampler passed to it's
executePixel function and do an interpolation.

Added two new functions to do bilinear/bicubic interpolation in float buffer
with variable number of components per element, so it could interpolate 1, 3
and 4 component vectors. This functions currently mostly duplicates the same
functions from imageprocess.c and it should actually be de-duplicated. Think
it's ok to leave a bit of time with such duplication, since functions should
be generalized one more time to support byte buffers, which could backfire on
readability.

Also removed mark as complex from stabilization node, which isn't needed sine
int fact this node is not complex.
2012-11-10 19:11:25 +00:00
Lukas Toenne
17934e1803 Fix for Hue/Sat/Val compositor node. This was using the wrong input socket for the color constant (Fac instead Image). 2012-11-01 17:05:01 +00:00
Campbell Barton
f213ae0b19 style cleanup 2012-11-01 09:54:00 +00:00
Lukas Toenne
36127e1255 Added compositor graph functions for removing socket connections explicitly in convertToOperations. The InputSocket->unlink function should only be used in combination with relinkConnectionsDuplicate, in which case the original node connection will still exist. This would trigger an assert failure, so the original connection should be removed. Only node using this atm is the channel separation node, but will be needed for future group nodes too. 2012-10-29 14:04:51 +00:00
Lukas Toenne
09ed97afc5 Internal node links are now cached in a per-node list, instead of being generated as a transient list that is returned from the callback and had to be freed by the caller. These internal links are used for muted nodes, disconnect operators and reroute nodes, to effectively replace the node with direct input-to-output links.
Storing this list in the node has the advantage of requiring far fewer calls to the potentially expensive internal_connect callback. This was called on every node redraw ...

Also it will allow Cycles to properly use the internal links for muted nodes, which ensures consistent behavior. The previous method was not applicable in Cycles because transient list return values are not supported well in the RNA and particularly the C++ API implementation.
2012-10-25 16:49:06 +00:00
Jeroen Bakker
a49b1d7b5e Oeps... Enabled the pixelate node added documentation, removed unneeded
code
2012-10-24 13:43:32 +00:00
Campbell Barton
6d79568f66 style cleanup 2012-10-24 09:07:54 +00:00
Jeroen Bakker
0fb9b7beda Adding a pixelate node.
This makes it possible to create pixelized scale in the Tile compositor.

Just append the node in front of a scale node or where you want the pixelization to take place.

There were some bugs on this subject, but they used the work around to add a blur size of 0 in the place where they need the pixelization.
2012-10-24 08:36:10 +00:00
Campbell Barton
f3ece5a108 style cleanup: trailing tabs & expand some non prefix tabs into spaces. 2012-10-21 05:46:41 +00:00
Sergey Sharybin
a4724a2dd8 Fix #32905: Crash with Levels node when no input is connected. 2012-10-18 10:27:09 +00:00
Campbell Barton
27e54f4d37 code cleanup: remove redundant casts. quiet some qualifier warnings. 2012-10-14 07:40:16 +00:00
Campbell Barton
97d4fb4161 code cleanup: make header defines more consistent, JOYSENSOR header guard had a typo too. 2012-10-09 13:36:42 +00:00
Campbell Barton
4b6be3c19b fix for using uninitialized blur falloff for dilate/erode node. 2012-09-30 12:24:29 +00:00
Campbell Barton
483a6cd6c2 fix for cycles/python script error in normal panel 2012-09-26 19:23:06 +00:00
Jeroen Bakker
b25cce1430 Compositor:
*  Node muting in node groups didn't work.

[#32597] Mute one node in a group blocks it

It looked for connections in the main tree, and not inside the group.
2012-09-25 13:02:52 +00:00
Sergey Sharybin
a73dd3476e Color Management, Stage 2: Switch color pipeline to use OpenColorIO
Replace old color pipeline which was supporting linear/sRGB color spaces
only with OpenColorIO-based pipeline.

This introduces two configurable color spaces:

- Input color space for images and movie clips. This space is used to convert
  images/movies from color space in which file is saved to Blender's linear
  space (for float images, byte images are not internally converted, only input
  space is stored for such images and used later).

  This setting could be found in image/clip data block settings.

- Display color space which defines space in which particular display is working.

  This settings could be found in scene's Color Management panel.

When render result is being displayed on the screen, apart from converting image
to display space, some additional conversions could happen.

This conversions are:

- View, which defines tone curve applying before display transformation.
  These are different ways to view the image on the same display device.
  For example it could be used to emulate film view on sRGB display.

- Exposure affects on image exposure before tone map is applied.

- Gamma is post-display gamma correction, could be used to match particular
  display gamma.

- RGB curves are user-defined curves which are applying before display
  transformation, could be used for different purposes.

All this settings by default are only applying on render result and does not
affect on other images. If some particular image needs to be affected by this
transformation, "View as Render" setting of image data block should be set to
truth. Movie clips are always affected by all display transformations.

This commit also introduces configurable color space in which sequencer is
working. This setting could be found in scene's Color Management panel and
it should be used if such stuff as grading needs to be done in color space
different from sRGB (i.e. when Film view on sRGB display is use, using VD16
space as sequencer's internal space would make grading working in space
which is close to the space using for display).

Some technical notes:

- Image buffer's float buffer is now always in linear space, even if it was
  created from 16bit byte images.

- Space of byte buffer is stored in image buffer's rect_colorspace property.

- Profile of image buffer was removed since it's not longer meaningful.

- OpenGL and GLSL is supposed to always work in sRGB space. It is possible
  to support other spaces, but it's quite large project which isn't so
  much important.

- Legacy Color Management option disabled is emulated by using None display.
  It could have some regressions, but there's no clear way to avoid them.

- If OpenColorIO is disabled on build time, it should make blender behaving
  in the same way as previous release with color management enabled.

More details could be found at this page (more details would be added soon):
http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.64/Color_Management

--
Thanks to Xavier Thomas, Lukas Toene for initial work on OpenColorIO
integration and to Brecht van Lommel for some further development and code/
usecase review!
2012-09-15 10:05:07 +00:00
Campbell Barton
1d4316f35f fix [#32490] Compsitor crashes on missing OpenEXR multilayer files 2012-09-04 19:42:09 +00:00
Campbell Barton
aaafa0c2fe code cleanup: move file string defines into BLI_path_utils.h, BKE_utildefines is now unused but keep incase we want to add defines there later. 2012-09-03 22:04:14 +00:00
Sergey Sharybin
eff97a82f8 Fix for compositor always cacheing frames when using Movie Clip input node
Issue was caused by getting image from compositor node conversion code,
now it'll check whether rendering happens and if so, frame wouldn't be
stored in the cache.

This possible fixes #32465: Memory leak when rendering
2012-09-03 14:26:53 +00:00
Jeroen Bakker
8fd7471143 cleanup pixel sampler code (pixel interpolations in compositor) 2012-08-28 10:41:37 +00:00
Campbell Barton
a7831c74e6 fix for bug in variable size blur compositor node - using incorrect Y blur operations and uninitialized memory was causing random blur results. 2012-08-24 12:48:56 +00:00
Campbell Barton
1ab5a4f0ed despeckle composite node 2012-08-23 06:48:01 +00:00
Campbell Barton
3090ae35af fix [#32374] Curve compositor UI drawing glitch
copy the curve for the compositor.
2012-08-21 15:14:29 +00:00
Campbell Barton
8bd7c3fba2 change curve evaluation functions never to modify curve data (ensures thread safety), now initializations has to be done outside evaluation. 2012-08-21 14:43:51 +00:00
Dalai Felinto
48eb27791b The Distance Node in 2.49/2.5/2.6 pre-tiles has a different calculation for RGB and YCC. While RGB
calculate the distance in 3d between R,G and B, the YCC only takes Cb and Cr
into consideration.

This commit makes COM_DistanceMatteOperation inheritable and expose the calculate distance function
to be re-implemented for the YCC node operation.

Thanks Troy Sobotka for the report over email.
Patch incorporates review suggestions by Jeroen Bakker.
2012-08-19 03:05:38 +00:00
Campbell Barton
6fb4bbdbd9 compositor bokeh blur - only use the variable size operation when the size socket is connected. 2012-08-16 13:15:13 +00:00
Campbell Barton
9591142294 add variable size option to bokeh blur node, remove f_stop option (it wasnt used), and add blur_max to the interface. 2012-08-14 14:31:39 +00:00
Campbell Barton
59fedc6b7c rename blur Reference to Variable Size, improve tooltip 2012-08-14 12:39:12 +00:00
Campbell Barton
9fd6c535ca fix [#32324] regression: node group with missing ID crashes new tile node system.
node groups with no ID now output magenta so it doesnt silently fail.
2012-08-14 11:05:26 +00:00
Campbell Barton
b84c1dd592 compositor: bokeh blur size input can now be an image, in this case it uses VariableSizeBokehBlurOperation class internally.
updated opencl too.
2012-08-10 15:31:54 +00:00
Campbell Barton
2a78c2d304 improvement to the DOF node, after blurring the radius buffer (derived from the depth), overlay with the original so pixels in focus are not mixed with out of focus pixels. 2012-08-08 16:46:12 +00:00
Sergey Sharybin
9ccb8b8c40 Fix crash in cases when render layers node is muted 2012-08-08 08:15:56 +00:00
Campbell Barton
2b8ac9bc61 inpaint node from tomato branch by Peter Schlaile
http://en.wikipedia.org/wiki/Inpainting
2012-08-06 13:45:11 +00:00
Campbell Barton
9ff4fa6671 style cleanup 2012-08-04 12:30:16 +00:00
Campbell Barton
854e122e5d style cleanup: compositor 2012-08-03 10:19:13 +00:00
Sergey Sharybin
3e75da21f6 Code cleanup: remove some more unused includes of DNA_scene_types 2012-08-01 14:51:12 +00:00
Sergey Sharybin
6e208ee887 Replace scene pointer with scene name to prevent possible misusages
of scene in node in future.
2012-08-01 14:48:46 +00:00
Sergey Sharybin
8a1a4a453d Tie compositor will now update render result when changing node setup
Issue was caused by the way how render result was acquiring -- pointer
to render data was used to find needed render descriptor. It's not
reliable since render contains copy of scene's render data, not pointer
to this data.

Use node scene's id name for render result acquiring, the same way
as it was done in old compositor system.
2012-08-01 13:59:08 +00:00
Sergey Sharybin
9c35147666 Fixed own regression introduced in recent compositor commit
MuteNode could be used as a replacement for other nodes when
using fast calculation or when using unknown node from blender.

Should work properly now.
2012-07-30 16:39:39 +00:00
Sergey Sharybin
585bc327e2 Fix incorrect connections for muted nodes in tile compositor
Not tile compositor would use the same routines to detect which
links to add for muted node.
2012-07-30 09:46:14 +00:00
Jeroen Bakker
93ff6f6dff Support for depth buffers in compositor and viewer node
Support for only alpha images in compositor and viewer node
2012-07-29 15:06:50 +00:00
Campbell Barton
f1acd6ac3e code cleanup: pass mouse position as int[2] rather then wmEvent 2012-07-27 15:15:55 +00:00
Sergey Sharybin
18e874798d Track input node: more control on over output value
Now supports output value of:

- Absolute marker position
- Marker position relative to the very first marker
- Marker position relative to given scene frame
2012-07-27 11:07:12 +00:00
Sergey Sharybin
d0b387a0df Track input node: move all initializaiton to initExecution function 2012-07-27 11:07:09 +00:00