Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2018-05-18Color: Assume Rec 709 in remaining comp nodesAaron Carlisle
Part of T54798
2014-04-15Structural cleanup and improvements for the compositor.Lukas Tönne
Many parts of the compositor are unnecessarily complicated. This patch aims at reducing the complexity of writing nodes and making the code more transparent. == Separating Nodes and Operations == Currently these are both mixed in the same graph, even though they have very different purposes and are used at distinct stages in the compositing process. The patch introduces dedicated graph classes for nodes and for operations. This removes the need for a lot of special case checks (isOperation etc.) and explicit type casts. It simplifies the code since it becomes clear at every stage what type of node we are dealing with. The compiler can use static typing to avoid common bugs from mixing up these types and fewer runtime sanity checks are needed. == Simplified Node Conversion == Converting nodes to operations was previously based on "relinking", i.e. nodes would start with by mirroring links in the Blender DNA node trees, then add operations and redirect these links to them. This was very hard to follow in many cases and required a lot of attention to avoid invalid states. Now there is a helper class called the NodeConverter, which is passed to nodes and implements a much simpler API for this process. Nodes can add operations and explicit connections as before, but defining "external" links to the inputs/outputs of the original node now uses mapping instead of directly modifying link data. Input data (node graph) and result (operations graph) are cleanly separated. == Removed Redundant Data Structures == A few redundant data structures have been removed, notably the SocketConnection. These are only needed temporarily during graph construction. For executing the compositor operations it is perfectly sufficient to store only the direct input link pointers. A common pointer indirection is avoided this way (which might also give a little performance improvement). == Avoid virtual recursive functions == Recursive virtual functions are evil. They are very hard to follow during debugging. At least in the parts this patch is concerned with these functions have been replaced by a non-virtual recursive core function (which might then call virtual non-recursive functions if needed). See for example NodeOperationBuilder::group_operations.
2013-09-05Compositor cleanup: Merge conversion operations into a single file (see also ↵Lukas Toenne
r59820). Most convert operations can share a common base class with a single socket reader (except channel separate/combine nodes).
2012-10-14code cleanup: remove redundant casts. quiet some qualifier warnings.Campbell Barton
2012-07-23Keying: apply garbage / core mattes after clampingSergey Sharybin
Applying this mattes before clamping produced ugly outline around matte boundaries.
2012-07-10Keying screen: small fixes and improvements from tomatoSergey Sharybin
- Fixed issues with calculating matte with balance != 0.5 It used to be used concave combination of minimal and maximal channel values which could be inpredictable. Use concave combination of two non-major channels sorted by their index, so such combination would always use the same coefficients for particular non-major channels. - Added despill balance slider which defines balance between non-major channels used for calculating average of two colors. Difference between average value and pixel value of major screen channel defines amount of despill. Balance of 0.5 gives the same behavior as it was before this slider was added. --- svn merge -r48678:48679 -r48789:48790 ^/branches/soc-2011-tomato
2012-07-04Highlight nodes that are being processedJeroen Bakker
2012-06-26rename remaining class members with m_ prefix.Campbell Barton
2012-06-25Added feather control to keying nodeSergey Sharybin
Behaves in the same way as feather dilate/erode node, applies after dilate/erode in node. Also use distance dilate/erode instead of size.
2012-06-25Optimization of Keying Blur operationSergey Sharybin
Separate X and Y passes of blurring like it's done for flat gaussian blur. This reduces computing difficulty from size^2 to 2*size without any visual changes in matte.
2012-06-24Skip edge matte operation creation if output socket is not connected.Sergey Sharybin
2012-06-24Remove unused header include.Sergey Sharybin
2012-06-15style cleanup: more nodesCampbell Barton
2012-06-15Core matte input for keying nodeSergey Sharybin
This matte could be used to force alpha be at high values in areas where algorithm detects it as edge or background color.
2012-06-15Garbage mate input for keying nodeSergey Sharybin
This adds garbage matte input to new keying node which is used to force occluding things which can not be eliminated by color operations. White areas defines areas which should be removed from final result.
2012-06-14Kaying node from tomato branchSergey Sharybin
Merge keying node from tomato branch into trunk. It was considered stable and helpful by Mango team and it'll help studio pipeline, because nodes would stop disappearing when opening files in current trunk. Full information about keying nodes could be found there: http://wiki.blender.org/index.php/User:Nazg-gul/Keying
2012-06-10Add screen balance into interfaceSergey Sharybin
Could be helpful to be played around. Default value is 0.5, Most probably this default value should be set manually for older files.
2012-06-09Changes to keying nodes:Sergey Sharybin
- Replace FastGaussian blur with GaussianBokeh blur which should give better results. - Changes a bit formula of saturation which in some cases gives better result. Also included (commented out) original formula which was also checked by Brecht and which gave better result in some other cases. - Made clipping white/black temporal dependent, so hopefully it wouldn't destroy gradients on edges.
2012-05-29Fixed stupid typo: dispill vs. despillSergey Sharybin
2012-05-29Initial commit of new keying nodesSergey Sharybin
First node is called Keying Screen (Add -> Matte -> Keying Screen) and it's aimed to resolve issues with gradients on green screens by producing image with gradient which is later used as an input for screen color in keying nodes. This node gets motion tracks from given movie clip and trackign object and uses them to define color and position of points of gradient: for position marker's position on current frame is sued, for color average color of pattern area is used. Gradient is calculating in the following way: - On first step voronoi diagram is creating for given tracks. - On second step triangulation of this diagram happens by connecting sites to edges which defines area this site belongs to. - On third step gradient filling of this triangles happens. One of triangle vertices is colored with average track color, two rest vertoces are colored with average color between two neighbor sites. Current pixel's color in triangle is calculating as linear combination of vertices colors and barycentric coordinates of this pixel. This node is implemented for both tile and legacy compositor systems. Second node is basically a combination of several existing nodes to make keying more straighforward and reduce spagetti mess in the compositor, but it also ships some fresh approaches calculating matte which seems to be working better for not actually green screens. This node supports: - Chroma preblur - Dispilling - Clip white/black - Dilate/Erode - Matte post blur This node doesn't support chroma pre-blur for legacy compositor (yet). There're still lots of stuff to be improved here, but this nodes night already be used i think. Some details might be found on this wiki page: http://wiki.blender.org/index.php/User:Nazg-gul/Keying This patch also contains some currently unused code from color math module, but it was used for tests and might be used for tests in the future. Think it's ok to have it in branch at least.