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.
137 lines
6.6 KiB
C++
137 lines
6.6 KiB
C++
/*
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* The Original Code is Copyright (C) 2005 Blender Foundation.
|
|
* All rights reserved.
|
|
*
|
|
* The Original Code is: all of this file.
|
|
*
|
|
* Contributor(s): Bob Holcomb.
|
|
*
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
*/
|
|
|
|
/** \file NOD_composite.h
|
|
* \ingroup nodes
|
|
*/
|
|
|
|
#ifndef __NOD_COMPOSITE_H__
|
|
#define __NOD_COMPOSITE_H__
|
|
|
|
#include "BKE_node.h"
|
|
|
|
extern bNodeTreeType ntreeType_Composite;
|
|
|
|
|
|
/* ****************** types array for all composite nodes ****************** */
|
|
|
|
void register_node_type_cmp_group(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_forloop(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_whileloop(struct bNodeTreeType *ttype);
|
|
|
|
void register_node_type_cmp_rlayers(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_image(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_texture(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_value(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_rgb(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_curve_time(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_movieclip(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_usermask(struct bNodeTreeType *ttype);
|
|
|
|
void register_node_type_cmp_composite(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_viewer(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_splitviewer(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_output_file(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_view_levels(struct bNodeTreeType *ttype);
|
|
|
|
void register_node_type_cmp_curve_rgb(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_mix_rgb(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_hue_sat(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_brightcontrast(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_gamma(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_invert(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_alphaover(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_zcombine(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_colorbalance(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_huecorrect(struct bNodeTreeType *ttype);
|
|
|
|
void register_node_type_cmp_normal(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_curve_vec(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_map_value(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_normalize(struct bNodeTreeType *ttype);
|
|
|
|
void register_node_type_cmp_filter(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_blur(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_dblur(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_bilateralblur(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_vecblur(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_dilateerode(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_defocus(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_denoise(struct bNodeTreeType *ttype);
|
|
|
|
void register_node_type_cmp_valtorgb(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_rgbtobw(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_setalpha(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_idmask(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_math(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_seprgba(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_combrgba(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_sephsva(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_combhsva(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_sepyuva(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_combyuva(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_sepycca(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_combycca(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_premulkey(struct bNodeTreeType *ttype);
|
|
|
|
void register_node_type_cmp_diff_matte(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_distance_matte(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_chroma_matte(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_color_matte(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_channel_matte(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_color_spill(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_luma_matte(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_doubleedgemask(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_keyingscreen(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_keying(struct bNodeTreeType *ttype);
|
|
|
|
void register_node_type_cmp_translate(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_rotate(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_scale(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_flip(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_crop(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_displace(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_mapuv(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_transform(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_stabilize2d(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_moviedistortion(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_mask(struct bNodeTreeType *ttype);
|
|
|
|
void register_node_type_cmp_glare(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_tonemap(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_lensdist(struct bNodeTreeType *ttype);
|
|
|
|
|
|
void register_node_type_cmp_colorcorrection(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_boxmask(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_ellipsemask(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_bokehimage(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_bokehblur(struct bNodeTreeType *ttype);
|
|
void register_node_type_cmp_switch(struct bNodeTreeType *ttype);
|
|
|
|
#endif
|