[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26319] trunk/blender/source/blender: Fixes to Color Balance node:

Matt Ebb matt at mke3.net
Wed Jan 27 01:22:31 CET 2010


Revision: 26319
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26319
Author:   broken
Date:     2010-01-27 01:22:29 +0100 (Wed, 27 Jan 2010)

Log Message:
-----------
Fixes to Color Balance node:

* The Lift/Gamma/Gain formula previously was incorrect, fixed this and 
removed conversions - now the RNA values are the same as what goes into 
the formula.
* Because of this, added the ability for the Value slider to map to a wider range 
than 0.0-1.0. The black/white gradient remains the same, in this case just 
indicating darker/brighter rather than absolute colour values. Also added ability 
for color wheels to be locked at full brightness (useful for this case, where the 
color value itself is dark).
* Added an alternate formula - offset/power/slope (asc-cdl). This fits the standard 
Color Decision List formula, here for compatibility with other systems, though 
default Lift/Gamma/Gain is easier to use and gives nicer results.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/UI_interface.h
    trunk/blender/source/blender/editors/interface/interface_handlers.c
    trunk/blender/source/blender/editors/interface/interface_templates.c
    trunk/blender/source/blender/editors/interface/interface_widgets.c
    trunk/blender/source/blender/editors/space_node/drawnode.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/makesrna/intern/rna_ui_api.c
    trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c

Modified: trunk/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- trunk/blender/source/blender/editors/include/UI_interface.h	2010-01-27 00:01:59 UTC (rev 26318)
+++ trunk/blender/source/blender/editors/include/UI_interface.h	2010-01-27 00:22:29 UTC (rev 26319)
@@ -677,7 +677,7 @@
 void uiTemplateColorRamp(uiLayout *layout, struct PointerRNA *ptr, char *propname, int expand);
 void uiTemplateHistogram(uiLayout *layout, struct PointerRNA *ptr, char *propname, int expand);
 void uiTemplateCurveMapping(uiLayout *layout, struct PointerRNA *ptr, char *propname, int type, int levels, int brush);
-void uiTemplateColorWheel(uiLayout *layout, struct PointerRNA *ptr, char *propname, int value_slider);
+void uiTemplateColorWheel(uiLayout *layout, struct PointerRNA *ptr, char *propname, int value_slider, int lock);
 void uiTemplateTriColorSet(uiLayout *layout, struct PointerRNA *ptr, char *propname);
 void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, char *propname,
 		      PointerRNA *used_ptr, char *used_propname, int active_layer);

Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c	2010-01-27 00:01:59 UTC (rev 26318)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2010-01-27 00:22:29 UTC (rev 26319)
@@ -2872,10 +2872,18 @@
 		hsv[2]= x; 
 	}
 	else if (but->a1==9){
+		float range;
+		
 		/* vertical 'value' strip */
 		hsv[2]= y; 
+		
+		/* exception only for value strip - use the range set in but->min/max */
+		range = but->softmax - but->softmin;
+		hsv[2] = y*range + but->softmin;
+		
 		if (color_profile)
 			hsv[2] = srgb_to_linearrgb(hsv[2]);
+		
 	}
 
 	hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb+1, rgb+2);

Modified: trunk/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_templates.c	2010-01-27 00:01:59 UTC (rev 26318)
+++ trunk/blender/source/blender/editors/interface/interface_templates.c	2010-01-27 00:22:29 UTC (rev 26319)
@@ -1965,26 +1965,29 @@
 
 #define WHEEL_SIZE	100
 
-void uiTemplateColorWheel(uiLayout *layout, PointerRNA *ptr, char *propname, int value_slider)
+void uiTemplateColorWheel(uiLayout *layout, PointerRNA *ptr, char *propname, int value_slider, int lock)
 {
 	PropertyRNA *prop= RNA_struct_find_property(ptr, propname);
 	uiBlock *block= uiLayoutGetBlock(layout);
 	uiLayout *col, *row;
+	float softmin, softmax, step, precision;
 	
 	if (!prop) {
 		printf("uiTemplateColorWheel: property not found: %s\n", propname);
 		return;
 	}
 	
+	RNA_property_float_ui_range(ptr, prop, &softmin, &softmax, &step, &precision);
+	
 	col = uiLayoutColumn(layout, 0);
 	row= uiLayoutRow(col, 1);
 	
-	uiDefButR(block, HSVCIRCLE, 0, "",	0, 0, WHEEL_SIZE, WHEEL_SIZE, ptr, propname, -1, 0.0, 0.0, 0, 0, "");
+	uiDefButR(block, HSVCIRCLE, 0, "",	0, 0, WHEEL_SIZE, WHEEL_SIZE, ptr, propname, -1, 0.0, 0.0, 0, lock, "");
 	
 	uiItemS(row);
 	
 	if (value_slider)
-		uiDefButR(block, HSVCUBE, 0, "", WHEEL_SIZE+6, 0, 14, WHEEL_SIZE, ptr, propname, -1, 0.0, 0.0, 9, 0, "");
+		uiDefButR(block, HSVCUBE, 0, "", WHEEL_SIZE+6, 0, 14, WHEEL_SIZE, ptr, propname, -1, softmin, softmax, 9, 0, "");
 
 	/* maybe a switch for this?
 	row= uiLayoutRow(col, 0);

Modified: trunk/blender/source/blender/editors/interface/interface_widgets.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_widgets.c	2010-01-27 00:01:59 UTC (rev 26318)
+++ trunk/blender/source/blender/editors/interface/interface_widgets.c	2010-01-27 00:22:29 UTC (rev 26319)
@@ -1577,6 +1577,11 @@
 	rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2);
 	copy_v3_v3(hsvo, hsv);
 	
+	/* exception: if 'lock' is set (stored in but->a2),
+	 * lock the value of the color wheel to 1.
+	 * Useful for color correction tools where you're only interested in hue. */
+	if (but->a2) hsv[2] = 1.f;
+	
 	hsv_to_rgb(0.f, 0.f, hsv[2], colcent, colcent+1, colcent+2);
 	
 	glShadeModel(GL_SMOOTH);
@@ -1793,7 +1798,7 @@
 	uiWidgetBase wtb;
 	float rad= 0.5f*(rect->xmax - rect->xmin);
 	float x, y;
-	float rgb[3], hsv[3], v;
+	float rgb[3], hsv[3], v, range;
 	int color_profile = but->block->color_profile;
 	
 	if (but->rnaprop) {
@@ -1808,6 +1813,10 @@
 	
 	if (color_profile)
 		v = linearrgb_to_srgb(v);
+
+	/* map v from property range to [0,1] */
+	range = but->softmax - but->softmin;
+	v =	(v - but->softmin)/range;
 	
 	widget_init(&wtb);
 	

Modified: trunk/blender/source/blender/editors/space_node/drawnode.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/drawnode.c	2010-01-27 00:01:59 UTC (rev 26318)
+++ trunk/blender/source/blender/editors/space_node/drawnode.c	2010-01-27 00:22:29 UTC (rev 26319)
@@ -125,7 +125,7 @@
 	RNA_property_collection_lookup_int(ptr, prop, 0, &sockptr);
 	
 	col = uiLayoutColumn(layout, 0);
-	uiTemplateColorWheel(col, &sockptr, "default_value", 1);
+	uiTemplateColorWheel(col, &sockptr, "default_value", 1, 0);
 	uiItemR(col, "", 0, &sockptr, "default_value", 0);
 }
 
@@ -917,22 +917,45 @@
 {
 	uiLayout *split, *col, *row;
 	
-	split = uiLayoutSplit(layout, 0, 0);
-	col = uiLayoutColumn(split, 0);
-	uiTemplateColorWheel(col, ptr, "lift", 1);
-	row = uiLayoutRow(col, 0);
-	uiItemR(row, NULL, 0, ptr, "lift", 0);
+	uiItemR(layout, NULL, 0, ptr, "correction_formula", 0);
 	
-	col = uiLayoutColumn(split, 0);
-	uiTemplateColorWheel(col, ptr, "gamma", 1);
-	row = uiLayoutRow(col, 0);
-	uiItemR(row, NULL, 0, ptr, "gamma", 0);
+	if (RNA_enum_get(ptr, "correction_formula")== 0) {
 	
-	col = uiLayoutColumn(split, 0);
-	uiTemplateColorWheel(col, ptr, "gain", 1);
-	row = uiLayoutRow(col, 0);
-	uiItemR(row, NULL, 0, ptr, "gain", 0);
+		split = uiLayoutSplit(layout, 0, 0);
+		col = uiLayoutColumn(split, 0);
+		uiTemplateColorWheel(col, ptr, "lift", 1, 1);
+		row = uiLayoutRow(col, 0);
+		uiItemR(row, NULL, 0, ptr, "lift", 0);
+		
+		col = uiLayoutColumn(split, 0);
+		uiTemplateColorWheel(col, ptr, "gamma", 1, 1);
+		row = uiLayoutRow(col, 0);
+		uiItemR(row, NULL, 0, ptr, "gamma", 0);
+		
+		col = uiLayoutColumn(split, 0);
+		uiTemplateColorWheel(col, ptr, "gain", 1, 1);
+		row = uiLayoutRow(col, 0);
+		uiItemR(row, NULL, 0, ptr, "gain", 0);
 
+	} else {
+		
+		split = uiLayoutSplit(layout, 0, 0);
+		col = uiLayoutColumn(split, 0);
+		uiTemplateColorWheel(col, ptr, "offset", 1, 1);
+		row = uiLayoutRow(col, 0);
+		uiItemR(row, NULL, 0, ptr, "offset", 0);
+		
+		col = uiLayoutColumn(split, 0);
+		uiTemplateColorWheel(col, ptr, "power", 1, 1);
+		row = uiLayoutRow(col, 0);
+		uiItemR(row, NULL, 0, ptr, "power", 0);
+		
+		col = uiLayoutColumn(split, 0);
+		uiTemplateColorWheel(col, ptr, "slope", 1, 1);
+		row = uiLayoutRow(col, 0);
+		uiItemR(row, NULL, 0, ptr, "slope", 0);
+	}
+
 }
 
 static void node_composit_buts_huecorrect(uiLayout *layout, bContext *C, PointerRNA *ptr)

Modified: trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2010-01-27 00:01:59 UTC (rev 26318)
+++ trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2010-01-27 00:22:29 UTC (rev 26319)
@@ -300,24 +300,6 @@
 	rna_Node_update(bmain, scene, ptr);
 }
 
-static void rna_Node_colorbalance_update(Main *bmain, Scene *scene, PointerRNA *ptr)
-{
-	bNode *node= (bNode*)ptr->data;
-	NodeColorBalance *ncb = node->storage;
-	float lift[3], gamma[3], gain[3];
-	
-	lift[0] = (ncb->lift[0] * 2.f - 1.f)*0.5f;
-	lift[1] = (ncb->lift[1] * 2.f - 1.f)*0.5f;
-	lift[2] = (ncb->lift[2] * 2.f - 1.f)*0.5f;
-	
-	mul_v3_v3fl(gamma, ncb->gamma, 2.f);
-	mul_v3_v3fl(gain, ncb->gain, 2.f);
-	
-	lift_gamma_gain_to_asc_cdl(lift, gamma, gain, ncb->offset, ncb->slope, ncb->power);
-	
-	rna_Node_update(bmain, scene, ptr);
-}
-
 static EnumPropertyItem *renderresult_layers_add_enum(RenderLayer *rl)
 {
 	EnumPropertyItem *item= NULL;
@@ -1878,33 +1860,67 @@
 static void def_cmp_colorbalance(StructRNA *srna)
 {
 	PropertyRNA *prop;
-	static float default_col[3] = {0.5f, 0.5f, 0.5f};
+	static float default_1[3] = {1.f, 1.f, 1.f};
 	
+	static EnumPropertyItem type_items[] = {
+		{0, "LIFT_GAMMA_GAIN",      0, "Lift/Gamma/Gain",      ""},
+		{1, "OFFSET_POWER_SLOPE",     0, "Offset/Power/Slope (ASC-CDL)",     "ASC-CDL standard color correction"},
+		{0, NULL, 0, NULL, NULL}};
+	
+	prop = RNA_def_property(srna, "correction_formula", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "custom1");
+	RNA_def_property_enum_items(prop, type_items);
+	RNA_def_property_ui_text(prop, "Correction Formula", "");
+	RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+	
 	RNA_def_struct_sdna_from(srna, "NodeColorBalance", "storage");
 	
 	prop = RNA_def_property(srna, "lift", PROP_FLOAT, PROP_COLOR_GAMMA);
 	RNA_def_property_float_sdna(prop, NULL, "lift");
 	RNA_def_property_array(prop, 3);
-	RNA_def_property_float_array_default(prop, default_col);
 	RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
 	RNA_def_property_ui_text(prop, "Lift", "Correction for Shadows");
-	RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_colorbalance_update");
+	RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 	
 	prop = RNA_def_property(srna, "gamma", PROP_FLOAT, PROP_COLOR_GAMMA);
 	RNA_def_property_float_sdna(prop, NULL, "gamma");
 	RNA_def_property_array(prop, 3);
-	RNA_def_property_float_array_default(prop, default_col);
-	RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
+	RNA_def_property_float_array_default(prop, default_1);
+	RNA_def_property_ui_range(prop, 0, 2, 0.1, 3);
 	RNA_def_property_ui_text(prop, "Gamma", "Correction for Midtones");
-	RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_colorbalance_update");
+	RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 	
 	prop = RNA_def_property(srna, "gain", PROP_FLOAT, PROP_COLOR_GAMMA);
 	RNA_def_property_float_sdna(prop, NULL, "gain");
 	RNA_def_property_array(prop, 3);
-	RNA_def_property_float_array_default(prop, default_col);
+	RNA_def_property_float_array_default(prop, default_1);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list