Commit Graph

8270 Commits

Author SHA1 Message Date
Sergey Sharybin
18326d852b Merging r50625 through r51896 from trunk into soc-2011-tomato
Merging just in case we'll want to develop some experimental stuff
2012-11-05 19:42:27 +00:00
Sergey Sharybin
0bf6007e3b Silence compiler's warnings. 2012-09-15 08:35:26 +00:00
Sergey Sharybin
cdb144ade9 Merging r50618 through r50624 from trunk into soc-2011-tomato 2012-09-15 07:53:34 +00:00
Sergey Sharybin
beba8014e4 Merging r50602 through r50617 form trunk into soc-2011-tomato 2012-09-15 06:24:48 +00:00
Sergey Sharybin
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
Sergey Sharybin
d7f55cff20 Color Management: image buffer loading reworked
Before this color space settings in image/movie clip data blocks
defined space in which loaded image buffer is, based on whether
this buffer contains float or byte buffer. This didn't work well
for formats like 16bit PNG, which are in fact non-linear formats
but were represented in Blender as float buffers.

Now image buffer loader is responsible to set up input default
color space for image/movie clip data blocks, which could be
based on format itself only or on particular file properties.

This means image/movie clip data blocks' input colorspace will
be initialized at time first image buffer is loaded.

This also resolves old confusing thing with image buffer's profile
flag, which in could have been non-linear for image buffer which
contained float buffer only -- this happened in mentioned case of
16 bit PNG format, i.e. Now float buffer would always be linear
which should make it easier to get rid of image buffer's profile.
2012-09-14 14:36:47 +00:00
Sergey Sharybin
58da4a1760 Merging r50576 through r50587 from trunk into soc-2011-tomato 2012-09-14 14:05:05 +00:00
Sergey Sharybin
5badefa8cf Color Management: fix crash when strip failed to render
In this case sequencer would allocate empty image buffer which used to not to
have assigned color spaces but it was marked as non-linear float.

Assuming black would always be black in sequencer's color space no additional
transformation for display is needed.

Solved by removing NOLINEAR_FLOAT flag from image buffers and using check
image buffer's float_colorspace for NULL when needed to check whether float
buffer is linear or not.
2012-09-13 14:52:25 +00:00
Sergey Sharybin
de7a57a242 Merging r50522 through r50572 from trunk into soc-2011-tomato 2012-09-13 11:13:13 +00:00
Sergey Sharybin
5f512bec47 Sequencer: added option to calculate modifiers in linear space
It was really annoying mistake in original support of logarithmic color space
for sequencer which made adjustment layers be working in linear space. Seems
this was only an issue for modifiers in adjustment effect.

Now all modifiers are applying in sequencer's color space (in fact, this was
fixed in svn rev50275).

To preserve compatibility of Mango grading added this option which probably
wouldn't be used by others.
2012-09-11 12:35:25 +00:00
Sergey Sharybin
20d84be6b5 Color Management: fix for wrong default color space and view 2012-09-11 10:34:19 +00:00
Sergey Sharybin
777a49dfef Merging r50502 through r50521 from trunk into soc-2011-tomato 2012-09-11 09:13:57 +00:00
Sergey Sharybin
74885d1d84 Color Management: port image stamp to new color management system
Use the same approach as interface does by using default view which
is supposed to be invertible to convert color from display space to
scene linear.
2012-09-10 17:24:48 +00:00
Sergey Sharybin
ce3566a4cb Color Management: add View as Render to image datablocks
This is need since some images (like normal maps, textures and so) would
want to be viewed without any tone map applied on them. On the same time
it's possible that some images would want to be affected by tone maps,
and renders would always want to be affected by tone maps.

After long discussion with Brecht we decided less painful and most clear
way would be to simply add "View as Render" option to image datablocks.

If this option is enabled for image, both settings from Display and
Render blocks of color management settings would be applied on display.

If this option is disabled, only display transform with default view and
no exposure/gamma/curves would be applied.

Render result and compositor viewers would always have "View as Render"
enabled.

There's separated setting when image is saving which says whether saved
image should be affected by render part of color management settings.

This option is enabled by default for render result/node viewer and
disabled by default for all the rest images. This option wouldn't have
affect when saving to float formats such as EXR.
2012-09-10 14:47:47 +00:00
Sergey Sharybin
b0605eed2c Color Management: finish pipeline changes
This commit hopefully finishes color management pipeline changes, implements
some missed functionality and fixes some bugs.

Mainly changes are related on getting rid of old Color Management flag which
became counter-intuitive in conjunction with OpenColorIO.

Now color management is always assuming to be enabled and non-color managed
pipeline is emulated using display device called None. This display has got
single view which is basically NO-OP (raw) transformation, not applying any
tone curve and displays colors AS-IS. In most cases it behaves the same as
disabling Color Management in shading panel, but there is at least one known
difference in behavior: compositor and sequence editors would output images
in linear space, not in sRGB as it used to be before.

It'll be quite tricky to make this behave in exactly the same way as it
used to, and not sure if we really need to do it.

3D viewport is supposed to be working in sRGB space, no tonemaps would be
applied there. This is another case where compatibility breaks in comparison
with old color management pipeline, but supporting display transformation
would be tricky since it'll also be needed to make GLSL shaders, textures
and so be aware of display transform.

Interface is now aware of display transformation, but it only uses default
display view, no exposure, gamma or curve mapping is supported there.
This is so color widgets could apply display transformation in both
directions. Such behavior is a bit counter-intuitive, but it's currently
the only way to make color picking working smoothly. In theory we'll need
to support color picking color space, but it'll be also a bit tricky since
in Blender display transform is configurable from the interface and could
be used for artistics needs and in such design it's not possible to figure
out invertable color space which could be used for color picking.

In other software it's not so big issue since all color spaces, display
transform and so are strictly defined by pipeline and in this case it is
possible to define color picking space which would be close enough to
display space.

Sequencer's color space now could be configured from the interface --
it's settings are situated in Scene buttons, Color Management panel.
Default space is sRGB. It was made configurable because we used vd16
color space during Mango which was close to Film view used by grading
department.

Sequencer will convert float buffers to this color space before operating
with them hopefully giving better results. Byte buffers wouldn't be
converted to this color space an they'll be handled in their own colors[ace.
Converting them to sequencer's working space would lead to precision loss
without much visible benefits. It shouldn't be an issue since float and
byte images would never be blended together -- byte image would be converted
to float first if it's needed to be blended with float image.

Byte buffers now allowed to be color managed. This was needed to make code
in such areas as baking and rendering don't have hardcoded linear to sRGB
conversions, making things more clear from code point of view.

Input color space is now assigning on image/movie clip load and default
roles are used for this. So for float images default space would be rec709
and for byte images default space would be sRGB.

Added Non-Color color space which is aimed to be used for such things as
normal/heights maps. It's currently the same as raw colorspace, just has
got more clear naming for users. Probably we'll also need to make it not
affected by display transformation.

Think this is all main pipeline-related changes, more details would be there:

http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.64/Color_Management

Other changes and fixes:

- Lots of internal code clean up in color management module.

- Made OpenColorIO module using guarded memory allocation. This allowed to
  fix couple of memory leaks and would help preventing leaks in the future.

- Made sure color unpremultiply and dither are supported by all OpenColorIO
  defined color transformations.

- Made compositor's preview images be aware of display transformation.
  Legacy compositor still uses old Color Management flags, but likely we'll
  disable compositor for the release and remove legacy code soon, so don't
  think we'll need to spend time on porting that code to new color management
  system.

- Made OpenGL rendering be aware of display transform when saving render
  result. Now it behaves in the same way as regular rendering.

TODO:

- HSV widgets are using linear rgb/sRGB conversions for single channel,
  not sure how this should be ported to new color pipeline.

- Image stamp would use hardcoded linear rgb to sRGB conversion for
  filling rectangles. Probably it should use default display view
  for this instead, would check this with Brecht.

- Get rid of None color space which was only used for compatibility reasons.

- Made it more clear which color spaces could be used as input space.

- There're also some remained TODO's in the code marked as OCIO_TODO,
  but wouldn't consider them as stoppers for at least this commit.
2012-09-10 11:46:15 +00:00
Sergey Sharybin
832841d50f Merging r50484 through r50501 from trunk into soc-2011-tomato 2012-09-10 10:58:59 +00:00
Sergey Sharybin
f1a498acee Merging r50478 through r50483 from trunk into soc-2011-tomato 2012-09-09 08:33:42 +00:00
Sergey Sharybin
37a70492d1 Merging r50470 through r50477 from trunk into soc-2011-tomato 2012-09-08 10:17:42 +00:00
Sergey Sharybin
0b778a9026 Merging r50423 through r50449 from trunk into soc-2011-tomato 2012-09-06 09:44:32 +00:00
Sergey Sharybin
ee5bf889e9 Color Management: RGB curves transform as a part of display transform
This replaces per-image editor curve mapping which didn't behave properly
(it was possible to open the same image in two image editors and setup
different curves in this editors, but only last changed curve was applied
on image)

After discussion with Brecht decided to have something which works reliable
and predictable and ended up with adding RGB curves as a part of display
transform, which is applied before OCIO processor (to match old behavior).

Setting white/black values from image editor (Ctrl/Shift + LMB) would
affect on scene settings.

This could break compatibility, but there's no reliable way to convert
old semi-working settings into new one.
2012-09-05 16:08:36 +00:00
Sergey Sharybin
3963425006 Merging r50374 through r50412 from trunk into soc-2011-tomato 2012-09-05 11:42:20 +00:00
Sergey Sharybin
e15f352831 Merging r50265 through r50373 from trunk into soc-2011-tomato 2012-09-04 09:06:37 +00:00
Sergey Sharybin
70301f431c Color management: make it behave closer to trunk
Avoid using tricks with ibuf->profile to check whether image buffer is
in sequencer or linear space. Assume the whole sequencer works in non
linear float space and do transformation to linear where it;s needed
only.

This removes confusion from the code, fixes wrong behavior of some
effects.
2012-08-30 13:40:31 +00:00
Sergey Sharybin
2e1568d64e Color management: fix for wrong view being used as default in configuration file check
Also marked Jpeg2K as non-float format.
2012-08-29 18:08:34 +00:00
Sergey Sharybin
d6a617ff06 Merging r50248 through r50264 from trunk into soc-2011-tomato 2012-08-29 12:49:10 +00:00
Sergey Sharybin
7a13bc2196 Fix wrong user counter in world node trees
World is being localized without increasing ID users, so no need
to decrease ID users on localized world free.
2012-08-29 12:47:42 +00:00
Campbell Barton
635db3b306 code cleanup: add utility function BLI_path_is_rel() 2012-08-29 10:32:38 +00:00
Campbell Barton
0bd759fddd new image operator now allows color grid (before was only grid on/off) 2012-08-29 08:17:38 +00:00
Campbell Barton
a3d4b98a30 code cleanup: move static mball vars into their own struct, wasnt very clear from reading code what was defined in the function. 2012-08-29 07:07:18 +00:00
Campbell Barton
c43583a23a fix for own crash caused by curve refactor, now curve tables are initialized once when the tree is initialized.
thanks to Antony Riakiotakis for providing a fix, though this works a little different.
2012-08-28 10:02:10 +00:00
Campbell Barton
a798371df1 code cleanup: use switch for metaball type checks and minor style cleanup 2012-08-28 01:50:13 +00:00
Campbell Barton
5f902ed455 svn merge ^/trunk/blender -r50240:50244 2012-08-27 09:46:49 +00:00
Campbell Barton
13254cde8c Alternate mask spline feather offset calculation method: now there are 2 [Even | Smooth]
- Even preserves thickness but can give unsightly loops
- Smooth gives nicer shape but can give unsightly feather/spline mismatch for 'S' shapes created by beziers.

This is an example where smooth works much nicer.

http://www.graphicall.org/ftp/ideasman42/mask_compare.png
2012-08-27 09:44:56 +00:00
Sergey Sharybin
6c500159d7 Merging r50237 through r50240 from trunk into soc-2011-tomato 2012-08-27 09:02:26 +00:00
Sergey Sharybin
d6a92c9c31 Sequencer: proper cache invalidation when deleting sequences
Solves issue with effects not being recalculated when deleting their input.
2012-08-27 09:01:36 +00:00
Sergey Sharybin
8716e9d98b Merging r50226 through r50236 from trunk into soc-2011-tomato 2012-08-27 08:28:29 +00:00
Sergey Sharybin
f31d17220d Sequencer: fix for wrong color space sequencer effects were working in 2012-08-26 23:57:55 +00:00
Sergey Sharybin
fa5b0e1d0f Sequencer: typo fix 2012-08-26 19:36:56 +00:00
Campbell Barton
52310bd4a7 code cleanup: remove dead assignments, gave mask vars clearer names & moved some mask evaluation funcs into mask_evaluate.c 2012-08-26 18:09:01 +00:00
Sergey Sharybin
c294ae035f Merging r50192 through r50223 from trunk into soc-2011-tomato 2012-08-26 14:12:09 +00:00
Campbell Barton
d35957ba94 code cleanup: split out mask spline evaluation into its own file. 2012-08-26 13:41:40 +00:00
Campbell Barton
ee96cde864 style cleanup: whitespace 2012-08-26 11:35:43 +00:00
Sergey Sharybin
3bfe4520ae Style cleanup: whitespace 2012-08-26 11:01:18 +00:00
Sergey Sharybin
1b487e9948 Some FFmpeg changes
- Make FFmpeg initialization called from creator, not from functions
  which requires FFmpeg. Makes it easier to follow when initialization
  should happen.

- Enable DNxHD codec. It was commented a while ago due to some strange
  behavior on some platforms. Re-tested it on Linux and Windows and
  it seemd to be working quite nice. Would let it be tested further,
  if it wouldn't be stable enough, easy to comment it again.

- Make non-error messages from writeffmpeg.c printed only if ffmpeg
  debug argument was passed to blender. Reduces console pollution
  with messages which are not useful for general troubleshooting.
  Error messages would still be printed to the console.

- Show FFmpeg error message when video stream failed to allocate.
  makes it easier to understand what exactly is wrong from Blender
  interface, no need to restart blender with FFmpeg debug flag and
  check for console messages.

  Used custom log callback for this which stores last error message
  in static variable. This is not thread safe, but with current
  design FFmpeg routines could not be called form several threads
  anyway, so think it's fine solution/
2012-08-26 11:01:14 +00:00
Campbell Barton
a3c4b0f47d make SWAP macros typesafe using CHECK_TYPE macro.
Its unlikely you want to do short -> int, int -> float etc, conversion during swapping (if its needed we could have a non type checking macro).

Double that the optimized assembler outbut using SWAP() remains unchanged from before.

This exposed quite a few places where redundant type conversion was going on.

Also remove curve.c's swapdata() and replace its use with swap_v3_v3()
2012-08-25 20:16:08 +00:00
Campbell Barton
699b23ecdb fix for type mismatch with SWAP() macro. 2012-08-25 19:43:15 +00:00
Thomas Dinges
614a82cb8c Tomato Cycles:
* Added a Brick Texture Node to Cycles.
* Based on the Blender Internal Brick Texture with some modifications. 
* Tested on CPU and GPU (CUDA & OpenCL)

Documentation: http://wiki.blender.org/index.php/User:DingTo/CyclesBrickTexture

ToDo: Only works correct on flat surfaces, like a Plane. If you attach the shader to 3D objects like a cube, the mapping is not correct on the Y/Z vector. 

Thanks to Lukas Toenne for fixing a issue I had with the Node code! :)
2012-08-25 16:52:55 +00:00
Campbell Barton
71d1b09708 minor code cleanup 2012-08-25 12:55:14 +00:00
Campbell Barton
ed0489bb6e style cleanup: also spelling 2012-08-24 23:22:34 +00:00
Campbell Barton
c3bc1da93c alternate fix for bug [#32395],
now customdata is interpolated into a temp variable and applied at the end of each layer interpolation function.

So this now works for CDDM customdata interpolation and avoids duplicating the customdata when the source and destination overlap.
2012-08-24 17:01:35 +00:00