Commit Graph

311 Commits

Author SHA1 Message Date
771c49b991 Fix #32669: Markers are not disabled properly if started from any other than first frame.
Was own mistake in code refactoring from a while ago.
2012-09-27 14:47:23 +00:00
5a3e474cc6 Tracking: fixed crash when reference frame fails to be loaded 2012-09-19 12:43:32 +00:00
dd62f5b7b8 Remove obsolete code from BKE_tracking_marker_clamp 2012-09-17 07:12:02 +00:00
d724d0adfe code cleanup: quiet warnings for gcc's -Wundef, -Wmissing-declarations 2012-09-16 00:26:36 +00:00
518c80fc94 remove unused parts of raskter module. 2012-09-15 23:05:34 +00:00
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
beba8014e4 Merging r50602 through r50617 form trunk into soc-2011-tomato 2012-09-15 06:24:48 +00:00
c73cd2fb6a Silent compiler's warnings about tracking module 2012-09-15 05:01:52 +00:00
be5a35d916 Color Management: get rid of image buffer's profile flag
Currently float buffers are always linear, space of byte buffer is defined by
rect_colorspace property.

Replaced logic of IMB_rect_from_float and IMB_float_from_rect to use this
assumptions (before it was special function used in some areas only, now it's
default behavior).

Almost all functions from ImBuf module which are actually used are got rid from
profile flag. Only remained issue is IMB_float_profile_ensure which only used by
CIneon/DPX exporter which is broken for a while already. Need to be fixed
separately.

This also fixed clone brush when cloning byte image on top of float, before
this result would be gamma-corrected twice.
2012-09-14 14:37:19 +00:00
e15f352831 Merging r50265 through r50373 from trunk into soc-2011-tomato 2012-09-04 09:06:37 +00:00
892cfa4285 fix [#32434] Copy-Paste Tracks causes Blender to freeze/crash on second use. 2012-09-03 01:05:04 +00:00
b96c622015 style cleanup 2012-08-11 22:12:32 +00:00
872ebc7310 fill in dummy values when using movie clip distort node but compiled without libmv. 2012-07-31 22:01:44 +00:00
c41e1e434a code cleanup: replace MIN2/MAX2 with minf/maxf 2012-07-29 16:59:51 +00:00
52aa7a4a4c Added utility function to return marker's subframe position
Used in mask parenting stuff.
2012-07-27 10:12:58 +00:00
4c2de5e0c7 fix some types and incorrect info 2012-07-26 17:41:09 +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
468ef74ed7 More spell and typo fixes (mostly visualise->visualize, grey->gray, normalise->normalize). 2012-07-03 19:09:07 +00:00
1080c43d1c Camera solver: take track offset into account
This helps in cases when it's needed to track a feature which
goes out of screen for a while to prevent jump of camera.
2012-06-25 16:36:12 +00:00
226c86ae58 use an inline function for rgb -> bw conversion. 2012-06-22 07:49:44 +00:00
250e919b7c style cleanup 2012-06-16 09:18:00 +00:00
4b8c51d493 Remove unused code and correct comment for track mask AA
Tip: XXX should be used for such kind of crap which is bad for release
     disabled AA for mask is not such a case.
2012-06-15 16:07:23 +00:00
4f80c3464f fix for building without libmv 2012-06-15 14:40:01 +00:00
8da0a03774 2D stabilization didn't work since clip start frame commit 2012-06-15 11:15:48 +00:00
f0c724219d Internal refactoring of tracking module, should be no functional changes
- Re-arrange functions in headers and implementation file to make them
  more grouped by entity they're operating with. Also order of functions
  in implementation file should match order of functions in header for
  easier navigation.

- Rename some functions to match conventions of naming public functions.
- Some code de-duplication, still some room for improvements tho.
- Split main 2D tracking functions into smaller steps to make it more clear.

Accidentally OpenMP was disabled in some of previous commits, re-enable it.
2012-06-15 11:03:23 +00:00
ceffc2cd50 add Anti-Aliasing (very rough draft algorithm, NOT FINAL version) to raskter lib. Code is still quite messy but will be replaced when final algo comes in anyway. 2012-06-13 19:57:23 +00:00
e1241030db yse BLI_math for the compositor in more places. 2012-06-12 20:04:55 +00:00
d3e098bb42 Some Clip Editor interface clean-ups:
- Display track's reprojection error in dopesheet
- Make sure track is selected when clicking on dopesheet channel
- Attempt to make headers a bit cleaner without long labels which
  doesn't actually make sense.
2012-06-12 17:11:00 +00:00
37612200fd Added options to display only selected tracks and show hidden tracks
in motion tracking dopesheet view.

By default all channels are displaying now.
2012-06-12 17:10:47 +00:00
55ca0e7636 Make dopesheet settings per-tracking data
It was a bit confusing to synchronize settings used in pre-calculated
dopesheet channels which was storing in tracking data with settings
used for display which is in space data.

This was initially done by converting one flags to other and checking
if space's settings matches pre-calculated one, but that had several
issues if two different dopesheet are using different settings:

- Channels would be re-calculated on every redraw for each of spaces
- Dopesheet operators could fail due to the could be using  channels
  calculated for other space.

That was also quite nasty code checking if requested settings matches
pre-calculated one.
2012-06-12 17:10:24 +00:00
552887251f Masking support for motion tracks
Added option to use Grease Pencil datablock as a mask for pattern
when doing motion tracking. Option could be found in Tracking Settings
panel.

All strokes would be rasterized separately from each other and every
stroke is treating as a closed spline.

Also added option to apply a mask on track preview which is situated
just after B/B/W channel button under track preview.
2012-06-12 11:13:53 +00:00
6ab087ff99 Scale search area when doing planar tracking
Helps keeping features tracked when there's large scale happens
without need to manually re-adjust search area.

Currently using factor of pattern's boundbox scale, but probably
could be done in more accurate way?
2012-06-11 11:40:54 +00:00
638211d4e6 Move all marker placement into a single omp critical section
Could give small speadup.
2012-06-11 08:06:42 +00:00
51d9bf725d style cleanup 2012-06-10 19:59:02 +00:00
bd81afdd5e Fix compilation without libmv 2012-06-10 16:16:02 +00:00
25bb441301 Planar tracking support for motion tracking
===========================================

Major list of changes done in tomato branch:

- Add a planar tracking implementation to libmv
  This adds a new planar tracking implementation to libmv. The
  tracker is based on Ceres[1], the new nonlinear minimizer that
  myself and Sameer released from Google as open source. Since
  the motion model is more involved, the interface is
  different than the RegionTracker interface used previously
  in Blender.

  The start of a C API in libmv-capi.{cpp,h} is also included.

- Migrate from pat_{min,max} for markers to 4 corners representation

  Convert markers in the movie clip editor / 2D tracker from using
  pat_min and pat_max notation to using the a more general, 4-corner
  representation.

  There is still considerable porting work to do; in particular
  sliding from preview widget does not work correct for rotated
  markers.

  All other areas should be ported to new representation:

  * Added support of sliding individual corners. LMB slide + Ctrl
    would scale the whole pattern
  * S would scale the whole marker, S-S would scale pattern only
  * Added support of marker's rotation which is currently rotates
    only patterns around their centers or all markers around median,

    Rotation or other non-translation/scaling transformation of search
    area doesn't make sense.

  * Track Preview widget would display transformed pattern which
    libmv actually operates with.

- "Efficient Second-order Minimization" for the planar tracker

  This implements the "Efficient Second-order Minimization"
  scheme, as supported by the existing translation tracker.
  This increases the amount of per-iteration work, but
  decreases the number of iterations required to converge and
  also increases the size of the basin of attraction for the
  optimization.

- Remove the use of the legacy RegionTracker API from Blender,
  and replaces it with the new TrackRegion API. This also
  adds several features to the planar tracker in libmv:

  * Do a brute-force initialization of tracking similar to "Hybrid"
    mode in the stable release, but using all floats. This is slower
    but more accurate. It is still necessary to evaluate if the
    performance loss is worth it. In particular, this change is
    necessary to support high bit depth imagery.

  * Add support for masks over the search window. This is a step
    towards supporting user-defined tracker masks. The tracker masks
    will make it easy for users to make a mask for e.g. a ball.

    Not exposed into interface yet/

  * Add Pearson product moment correlation coefficient checking (aka
    "Correlation" in the UI. This causes tracking failure if the
    tracked patch is not linearly related to the template.

  * Add support for warping a few points in addition to the supplied
    points. This is useful because the tracking code deliberately
    does not expose the underlying warp representation. Instead,
    warps are specified in an aparametric way via the correspondences.

- Replace the old style tracker configuration panel with the
  new planar tracking panel. From a users perspective, this means:

  * The old "tracking algorithm" picker is gone. There is only 1
    algorithm now. We may revisit this later, but I would much
    prefer to have only 1 algorithm. So far no optimization work
    has been done so the speed is not there yet.

  * There is now a dropdown to select the motion model. Choices:

        * Translation
        * Translation, rotation
        * Translation, scale
        * Translation, rotation, scale
        * Affine
        * Perspective

  * The old "Hybrid" mode is gone; instead there is a toggle to
    enable or disable translation-only tracker initialization. This
    is the equivalent of the hyrbid mode before, but rewritten to work
    with the new planar tracking modes.

  * The pyramid levels setting is gone. At a future date, the planar
    tracker will decide to use pyramids or not automatically. The
    pyramid setting was ultimately a mistake; with the brute force
    initialization it is unnecessary.

- Add light-normalized tracking

  Added the ability to normalize patterns by their average value while
  tracking, to make them invariant to global illumination changes.

Additional details could be found at wiki page [2]

  [1] http://code.google.com/p/ceres-solver
  [2] http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.64/Motion_Tracker
2012-06-10 15:28:19 +00:00
04766ab071 Added sorting by average reprojection error to motion tracking dopesheet. 2012-06-08 16:42:24 +00:00
f43a733f59 Changed semantic of recently added start_frame
Now it's indicates at which scene frame number movie clip starts playing back.
This this setting is still belongs to clip datavlock and used by all users of
clip such as movie compositor nodes, constraints and so.

After long discussion and thoughts about this it was decided that this would
match image's current behavior (which initially seen a bit crappy), but that's
actually allows:

- Keep semantics of start frame in image and clip datablocks in sync
- Allows to support features like support of loading image sequences
  with crappy numbers in suffix which doesn't fit long int.
- Allows to eliminate extra boolean checkbox to control such kind of offset.

Hopefully from pipeline POV it wouldn't hurt because idea of having this things
implemented in original way was  working only if sequence before processing
started naming form 001.
2012-06-06 18:58:30 +00:00
6bb45ac67b Camera tracking: imbuf (un)distoriton used to set RECT_INVALID flag for source image instead of destination
This lead to wrong proxies generated for openexr float image sequences
2012-05-23 16:53:33 +00:00
ed33320e3f Code cleanup: simplify standard GHash creation.
Added four new functions as shortcuts to creating GHashes that use the
standard ptr/str/int/pair hash and compare functions.

GHash *BLI_ghash_ptr_new(const char *info);
GHash *BLI_ghash_str_new(const char *info);
GHash *BLI_ghash_int_new(const char *info);
GHash *BLI_ghash_pair_new(const char *info);

Replaced almost all occurrences of BLI_ghash_new() with one of the
above functions.
2012-05-16 00:51:36 +00:00
c59f8506c0 Camera tracking: exr frames used to be displayed in linear space
It was a regression since texture buffer merge from tomato, now ensure
all display happens in sRGB space as it used to be before.
2012-05-09 16:00:39 +00:00
f4705b38f9 Camera tracking: fixes for tracking of float images
- Fixed suddenly disappearing preview image from track widget
- Also suddenly stopping tracking should be fixed now

Both issues were caused by mixing working with floats and bytes and
in some cases it was wrong or missed checks done for this.
2012-05-09 08:33:11 +00:00
c79892c5cd Style cleanup of own modules using style checker from Campbell. 2012-05-07 08:53:59 +00:00
299ff91ea1 code cleanup: BKE_scene api naming.
also stop numpy from being found in /usr/include with cmake.
2012-05-05 14:33:36 +00:00
a731e13043 code cleanup: function naming, use BKE_*type* prefix. 2012-05-05 14:03:12 +00:00
e3535e884a Style cleanup: spaces around operators 2012-05-03 23:47:39 +00:00
48ead27366 Camera tracking: switch dopesheet information to lazy calculation
All operators which changes tracking data now just tags dopsheet as outdated,
actual re-calculaiton of happens only when this information is actually needed
(like on dopesheet draw).

This makes things a bit faster when there's no dopesheet visible in current
screen and also makes it much easier to update dopesheet using dependency
graph.

Also renamed dopesheet_sort_order to dopesheet_sort_method in rna and internal
stuff which makes much more sense and also correlated with naming in
file browser.
2012-05-03 23:15:01 +00:00
b1006fb949 Clip editor: sort order for dopesheet channels
Supported sorting by name, longest tracked segment and total tracked frames.

Internally tracks are stored in Tracking datablock, but sort order is
a clip editor space property and sorting happens on clip editor draw.
If there's no dopesheet opened with different sort orders it's not
a problem due to re-sorting wouldn't happen.

Also fixed draw issue of tracked segments introduced in previous commit.
2012-05-03 19:28:41 +00:00
5821c2973e Camera tracking: pre-calculate tracked segments for dopesheet channels 2012-05-03 17:52:34 +00:00
96693d37e6 Camera tracking: clear clipboard path before copying tracks to it. 2012-05-03 17:02:33 +00:00