[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51242] trunk/blender/source/blender: Color Management: fixed color management-less texture rendering

Sergey Sharybin sergey.vfx at gmail.com
Wed Oct 10 07:56:49 CEST 2012


Revision: 51242
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51242
Author:   nazgul
Date:     2012-10-10 05:56:49 +0000 (Wed, 10 Oct 2012)
Log Message:
-----------
Color Management: fixed color management-less texture rendering

There was a missing check for whether color management enabled or not when
converting byte textures to linear space.

This commit also fixes wrong texture preview rendering, which was applying
sRGB transform twice, making procedural textures bright. This will make
float textures being previewed dark (in a linear space) but that's how it
used to behave in pre-OCIO color management.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/render/render_preview.c
    trunk/blender/source/blender/render/intern/include/render_types.h
    trunk/blender/source/blender/render/intern/source/envmap.c
    trunk/blender/source/blender/render/intern/source/pipeline.c
    trunk/blender/source/blender/render/intern/source/render_texture.c

Modified: trunk/blender/source/blender/editors/render/render_preview.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_preview.c	2012-10-10 04:47:53 UTC (rev 51241)
+++ trunk/blender/source/blender/editors/render/render_preview.c	2012-10-10 05:56:49 UTC (rev 51242)
@@ -273,16 +273,7 @@
 		
 		/* exception: don't apply render part of display transform for texture previews or icons */
 		if ((id && sp->pr_method == PR_ICON_RENDER) || id_type == ID_TE) {
-			ColorManagedDisplaySettings *display_settings = &sce->display_settings;
-			ColorManagedViewSettings *view_settings = &sce->view_settings;
-
-			const char *default_view_name = IMB_colormanagement_view_get_default_name(display_settings->display_device);
-
-			view_settings->exposure = 0.0f;
-			view_settings->gamma = 1.0f;
-			view_settings->flag &= ~COLORMANAGE_VIEW_USE_CURVES;
-
-			BLI_strncpy(view_settings->view_transform, default_view_name, sizeof(view_settings->view_transform));
+			BKE_scene_disable_color_management(sce);
 		}
 		
 		if ((id && sp->pr_method == PR_ICON_RENDER) && id_type != ID_WO)
@@ -550,7 +541,7 @@
 					 *            color managed as well?
 					 */
 					IMB_buffer_byte_from_float(rect_byte, rres.rectf,
-					                           4, dither, IB_PROFILE_SRGB, IB_PROFILE_LINEAR_RGB, do_predivide,
+					                           4, dither, IB_PROFILE_SRGB, IB_PROFILE_SRGB, do_predivide,
 					                           rres.rectx, rres.recty, rres.rectx, rres.rectx);
 				}
 

Modified: trunk/blender/source/blender/render/intern/include/render_types.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/render_types.h	2012-10-10 04:47:53 UTC (rev 51241)
+++ trunk/blender/source/blender/render/intern/include/render_types.h	2012-10-10 05:56:49 UTC (rev 51242)
@@ -120,6 +120,9 @@
 	/* state settings */
 	short flag, osa, ok, result_ok;
 	
+	/* due to performance issues, getting initialized from color management settings once on Render initialization */
+	short scene_color_manage;
+	
 	/* result of rendering */
 	RenderResult *result;
 	/* if render with single-layer option, other rendered layers are stored here */

Modified: trunk/blender/source/blender/render/intern/source/envmap.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/envmap.c	2012-10-10 04:47:53 UTC (rev 51241)
+++ trunk/blender/source/blender/render/intern/source/envmap.c	2012-10-10 05:56:49 UTC (rev 51242)
@@ -154,6 +154,7 @@
 	
 	RE_InitState(envre, NULL, &envre->r, NULL, cuberes, cuberes, NULL);
 	envre->scene = re->scene;    /* unsure about this... */
+	envre->scene_color_manage = re->scene_color_manage;
 	envre->lay = re->lay;
 
 	/* view stuff in env render */

Modified: trunk/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/pipeline.c	2012-10-10 04:47:53 UTC (rev 51241)
+++ trunk/blender/source/blender/render/intern/source/pipeline.c	2012-10-10 05:56:49 UTC (rev 51242)
@@ -1519,6 +1519,7 @@
 	
 	re->main = bmain;
 	re->scene = sce;
+	re->scene_color_manage = BKE_scene_check_color_management_enabled(sce);
 	
 	/* first call RE_ReadRenderResult on every renderlayer scene. this creates Render structs */
 	
@@ -2014,6 +2015,7 @@
 	
 	re->main = bmain;
 	re->scene = scene;
+	re->scene_color_manage = BKE_scene_check_color_management_enabled(scene);
 	re->camera_override = camera_override;
 	re->lay = lay;
 	
@@ -2352,6 +2354,7 @@
 
 	re->main = bmain;
 	re->scene = sce;
+	re->scene_color_manage = BKE_scene_check_color_management_enabled(sce);
 	re->lay = sce->lay;
 
 	camera = RE_GetCamera(re);
@@ -2396,6 +2399,7 @@
 		re = RE_NewRender(scene->id.name);
 	RE_InitState(re, NULL, &scene->r, NULL, winx, winy, &disprect);
 	re->scene = scene;
+	re->scene_color_manage = BKE_scene_check_color_management_enabled(scene);
 	
 	BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
 	success = render_result_exr_file_read(re, 0);

Modified: trunk/blender/source/blender/render/intern/source/render_texture.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/render_texture.c	2012-10-10 04:47:53 UTC (rev 51241)
+++ trunk/blender/source/blender/render/intern/source/render_texture.c	2012-10-10 05:56:49 UTC (rev 51242)
@@ -1234,7 +1234,7 @@
 				ImBuf *ibuf = BKE_image_get_ibuf(tex->ima, &tex->iuser);
 				
 				/* don't linearize float buffers, assumed to be linear */
-				if (ibuf && !(ibuf->rect_float))
+				if (ibuf && !(ibuf->rect_float) && R.scene_color_manage)
 					IMB_colormanagement_colorspace_to_scene_linear_v3(&texres->tr, ibuf->rect_colorspace);
 			}
 		}
@@ -2384,7 +2384,7 @@
 					ImBuf *ibuf = BKE_image_get_ibuf(ima, &tex->iuser);
 					
 					/* don't linearize float buffers, assumed to be linear */
-					if (ibuf && !(ibuf->rect_float))
+					if (ibuf && !(ibuf->rect_float) && R.scene_color_manage)
 						IMB_colormanagement_colorspace_to_scene_linear_v3(tcol, ibuf->rect_colorspace);
 				}
 				
@@ -2896,7 +2896,7 @@
 			ImBuf *ibuf = BKE_image_get_ibuf(ima, &mtex->tex->iuser);
 			
 			/* don't linearize float buffers, assumed to be linear */
-			if (ibuf && !(ibuf->rect_float))
+			if (ibuf && !(ibuf->rect_float) && R.scene_color_manage)
 				IMB_colormanagement_colorspace_to_scene_linear_v3(&texres.tr, ibuf->rect_colorspace);
 		}
 
@@ -3115,7 +3115,7 @@
 					ImBuf *ibuf = BKE_image_get_ibuf(ima, &tex->iuser);
 					
 					/* don't linearize float buffers, assumed to be linear */
-					if (ibuf && !(ibuf->rect_float))
+					if (ibuf && !(ibuf->rect_float) && R.scene_color_manage)
 						IMB_colormanagement_colorspace_to_scene_linear_v3(tcol, ibuf->rect_colorspace);
 				}
 
@@ -3329,7 +3329,7 @@
 					ImBuf *ibuf = BKE_image_get_ibuf(ima, &tex->iuser);
 					
 					/* don't linearize float buffers, assumed to be linear */
-					if (ibuf && !(ibuf->rect_float))
+					if (ibuf && !(ibuf->rect_float) && R.scene_color_manage)
 						IMB_colormanagement_colorspace_to_scene_linear_v3(&texres.tr, ibuf->rect_colorspace);
 				}
 




More information about the Bf-blender-cvs mailing list