The previous stroke creation procedure was trying to clean stroke topology
by removing overlapping stroke vertices in the same 2D location. The idea
was to avoid having to address this kind of singularity during subsequent
stroke shading. In-depth analyses revealed, however, that this was a wrong
way to ensure clean stroke topology, since just deleting overlapping vertices
may break the continuity of the underlying series of FEdges on top of which
the stroke has been built. Such a break of linked FEdges was a major cause
of frequent failure in CurvePoint::getFEdge().
The present commit aims to address the singularity issue by adding small
offsets to the 2D location of overlapping vertices and making them
non-overlapping to each other. Since the offsets only result in sub-pixel
differences, the impact on visual outcomes is expected to be negligible.
This commit enables color management stuff when building on
Windows using MSVC 2008 compiler. This required some fixes
to both CMake and SCons configurations which were tested for
64bit target. Tests of 32bit target would be welcome.
Also solved compilation error caused by recently added anim
player. Not sure how to test this, but it shall at least
compile on Windows now.
Didn't test MinGW compilation at all yet, could still be buggy.
This applies to files when saving from image editor and when saving
render result.
Currently only works for images which has got float buffer and saving
happens to byte formats (such as PNG, JPEG). Also supports applying
color management for preview jpegs when main buffer is saving into
OpenEXR file.
As default transform when saving from image editor would be the same
settings as image editor uses itself.
Defaults for color correction of rendered images would be default
display name, no view transform and default values for gamma and
exposure.
- Move color management display settings into own structure like it's
done for view settings.
This is helpful from two sides:
* It is planned to support display calibration settings which
should be taken into account by color management stuff to
add needed transformations to OCIO processor.
* File saving should be able to make the same display
transformations as it's done by window when displaying the image.
Having own DNA and RNA structures for display device settings
helps avoiding having duplicated code.
- Small refactor of cacheing functions which are now accepts
cache-like versions of view and display settings. This structures
used for cache are quite the same as DNA structures but they contains
indices of view and display which avoids extra lookup for this
things.
This also helps having reasonable amount of variables passing
to cache functions.
Issue was caused by linking to grease pencil from direct_link* function
which lead to NULL GP data because it's being read a way later.
Link to GP data in lib_link* instead.
- Added some extra view transforms to play with. It's not absolutely
correct in terms this views were changed to use aces space as input.
This gives exactly the same result as if using stand-alone spi-vfx
and nuke-default configuration, but for real merge of this configs
it'll be needed to add extra input spaces and transformations between
them.
- Replaced hard-coded aces input color space with default ocio
linear space which makes it easier to play with different
configurations.
- Fixed SCons installation of color management configuration which
used to skip copying LUTs when there was "luts" folder in install
destination.
- Print whether OCIO was enabled when building with CMake.
Could be helpful due to OCIO is being automatically disabled
if needed libraries are missed.
- De-duplicate code used by color management panel drawing,
moved this panel to utility file in bl_ui
- Added support of per-window color management control
which means view transform. exposure and gamma could be
set per window and all spaces would use this settings.
This is default behavior for older files now.
- Added support of color management display of movie clips
in clip editor.
Supported both texture buffer and fallback draw methods.
- Fixed default values for exposure and gamma
- Move space-being settings (such as view transform) into own
DNA and RNA structure to avoid code duplication in some areas
and save some arguments on display buffer acquiring function.
Also added some utility functions to BKE to manipulate this
settings.
- Replace static sized color managed buffer flags array with
dynamically sized array which matches actual number of displays.
Probably this flags better be transfposed so it'll support
any number of view transforms and 32 displays (currently it's
other way around). it's runtime flags only, so would be simple
to change any time.
- Added support of configurable exposure and gamma.
Changing this settings wouldn't generate new item in cache,
it'll affect on buffer with the same color spaces conversion.
It'll also run full color transform from scratch on every run,
this could be changes in a way that it'll re-use color managed
buffer, but from quick glance it doesn't give really noticeable
boost.
Currently this settings are stored as pointer in ImBuf structure
itself. Probably it make sense removing them from ImBuf and make
moviecache be able to store some kind of tags associated with
cached ImBuf.
- Fixed memory leak caused by incorrect handling of cached buffer
in cases if it was marked as dirty
- Do not use 3D LUT for RRT -- they can't be easily baked into 3D
LUT without being clamped to 0..1 space
- Make sure blender compiles without OCIO support
- Made color management cache safe for situations when one area
requested a display buffer, then some changes were done which
invalidated cache, other area requested display buffer which
changed cached buffer.
Suck case could be fatal for first used of display buffer,
which didn't happen yet because cache is being accessed from
main thread only, but better to keep this things completely
thread save to avoid headache in the future.
- Baked RRT transformations, which gives ~3-4 times boost
hopefully without visible artifacts.
- Added support of partial updates to display buffers.
This would create special context which hols display buffer
which imbuf had to the time of creating this context and
later this context would allow to run a color correction
from given linear buffer within given region.
This is being used by compositor to enable more realtime
display update when compositing.
- Added support of color management backdrop for nodes editor.
There's now special menu called display properties in N-panel
of nodes editor.
Probably this better be de-duplicated somehow, but not sure
yet how. Currently it's not so harmful to have panel for two
spaces which contains only 2 properties.
There's currently one unsolved issue with backdrop:
it's not being updated progressively when just loading the
file -- it's simply because there's no color managed display
buffer for backdrop yet, and compositor doesn't actually
know which color space to use here to generate preview to.
One important thing to keep in mind when using this feature is that you'll need to flip your textures vertically (both the GIMP and Photoshop DDS tools I've seen have support for this on export). This is a quirk in using a texture format originally made for DirectX/DirectDraw, and flipping the compressed data is a real headache. Another quick fix for this issue is to change the Y value for the Size in the Mapping panel in the Texture properties to -1 (default is 1).