[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51365] trunk/blender: Cycles: non-camera viewport render border support

Sergey Sharybin sergey.vfx at gmail.com
Tue Oct 16 13:57:47 CEST 2012


Revision: 51365
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51365
Author:   nazgul
Date:     2012-10-16 11:57:46 +0000 (Tue, 16 Oct 2012)
Log Message:
-----------
Cycles: non-camera viewport render border support

This makes it possible to do a border render inside a viewport even
when not looking through the camera.

Render border could be defined by Ctrl-B shortcut (works for both
camera render border and viewport render border).

Camera render border could still be defined using Shift-B (so no
muscule memory would be broken). Currently used a special flag of
operator to do this, otherwise you'll need to either two operators
with different poll callback or it could go into conflict with a
border zoom,

Border render of a viewport could be enabled/disabled in View
panel using "Render Border" option.

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/blender_camera.cpp
    trunk/blender/intern/cycles/blender/blender_session.cpp
    trunk/blender/intern/cycles/blender/blender_sync.h
    trunk/blender/release/scripts/startup/bl_ui/space_view3d.py
    trunk/blender/source/blender/blenkernel/BKE_blender.h
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
    trunk/blender/source/blender/editors/space_view3d/view3d_intern.h
    trunk/blender/source/blender/editors/space_view3d/view3d_ops.c
    trunk/blender/source/blender/makesdna/DNA_view3d_types.h
    trunk/blender/source/blender/makesrna/intern/rna_space.c

Modified: trunk/blender/intern/cycles/blender/blender_camera.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_camera.cpp	2012-10-16 10:59:35 UTC (rev 51364)
+++ trunk/blender/intern/cycles/blender/blender_camera.cpp	2012-10-16 11:57:46 UTC (rev 51365)
@@ -425,12 +425,26 @@
 	BL::RegionView3D b_rv3d, int width, int height)
 {
 	BL::RenderSettings r = b_scene.render();
+	bool is_camera_view;
 
-	if(!r.use_border())
-		return;
+	/* camera view? */
+	is_camera_view = b_rv3d.view_perspective() == BL::RegionView3D::view_perspective_CAMERA;
 
-	/* camera view? */
-	if(!(b_rv3d && b_rv3d.view_perspective() == BL::RegionView3D::view_perspective_CAMERA))
+	if(!is_camera_view) {
+		/* for non-camera view check whether render border is enabled for viewport
+		 * and if so use border from 3d viewport
+		 * assume viewport has got correctly clamped border already
+		 */
+		if(b_v3d.use_render_border()) {
+			bcam->border_left = b_v3d.render_border_min_x();
+			bcam->border_right = b_v3d.render_border_max_x();
+			bcam->border_bottom = b_v3d.render_border_min_y();
+			bcam->border_top = b_v3d.render_border_max_y();
+
+			return;
+		}
+	}
+	else if(!r.use_border())
 		return;
 
 	BL::Object b_ob = (b_v3d.lock_camera_and_layers())? b_scene.camera(): b_v3d.camera();
@@ -504,14 +518,20 @@
 	blender_camera_sync(scene->camera, &bcam, width, height);
 }
 
-BufferParams BlenderSync::get_buffer_params(BL::Scene b_scene, Camera *cam, int width, int height)
+BufferParams BlenderSync::get_buffer_params(BL::Scene b_scene, BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d, Camera *cam, int width, int height)
 {
 	BufferParams params;
+	bool use_border = false;
 
 	params.full_width = width;
 	params.full_height = height;
 
-	if(b_scene.render().use_border()) {
+	if(b_v3d && b_rv3d && b_rv3d.view_perspective() != BL::RegionView3D::view_perspective_CAMERA)
+		use_border = b_v3d.use_render_border();
+	else
+		use_border = b_scene.render().use_border();
+
+	if(use_border) {
 		/* border render */
 		params.full_x = cam->border_left*width;
 		params.full_y = cam->border_bottom*height;

Modified: trunk/blender/intern/cycles/blender/blender_session.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_session.cpp	2012-10-16 10:59:35 UTC (rev 51364)
+++ trunk/blender/intern/cycles/blender/blender_session.cpp	2012-10-16 11:57:46 UTC (rev 51365)
@@ -105,7 +105,7 @@
 		sync->sync_camera(b_engine.camera_override(), width, height);
 
 	/* set buffer parameters */
-	BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, scene->camera, width, height);
+	BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, b_v3d, b_rv3d, scene->camera, width, height);
 	session->reset(buffer_params, session_params.samples);
 }
 
@@ -239,7 +239,7 @@
 
 	/* get buffer parameters */
 	SessionParams session_params = BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background);
-	BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, scene->camera, width, height);
+	BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, b_v3d, b_rv3d, scene->camera, width, height);
 
 	/* render each layer */
 	BL::RenderSettings r = b_scene.render();
@@ -399,7 +399,7 @@
 
 	/* reset if needed */
 	if(scene->need_reset()) {
-		BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, scene->camera, width, height);
+		BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, b_v3d, b_rv3d, scene->camera, width, height);
 		session->reset(buffer_params, session_params.samples);
 	}
 }
@@ -437,7 +437,7 @@
 		/* reset if requested */
 		if(reset) {
 			SessionParams session_params = BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background);
-			BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, scene->camera, w, h);
+			BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, b_v3d, b_rv3d, scene->camera, w, h);
 
 			session->reset(buffer_params, session_params.samples);
 		}
@@ -447,7 +447,7 @@
 	update_status_progress();
 
 	/* draw */
-	BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, scene->camera, width, height);
+	BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, b_v3d, b_rv3d, scene->camera, width, height);
 
 	return !session->draw(buffer_params);
 }

Modified: trunk/blender/intern/cycles/blender/blender_sync.h
===================================================================
--- trunk/blender/intern/cycles/blender/blender_sync.h	2012-10-16 10:59:35 UTC (rev 51364)
+++ trunk/blender/intern/cycles/blender/blender_sync.h	2012-10-16 11:57:46 UTC (rev 51365)
@@ -63,7 +63,7 @@
 	static SceneParams get_scene_params(BL::Scene b_scene, bool background);
 	static SessionParams get_session_params(BL::RenderEngine b_engine, BL::UserPreferences b_userpref, BL::Scene b_scene, bool background);
 	static bool get_session_pause(BL::Scene b_scene, bool background);
-	static BufferParams get_buffer_params(BL::Scene b_scene, Camera *cam, int width, int height);
+	static BufferParams get_buffer_params(BL::Scene b_scene, BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d, Camera *cam, int width, int height);
 
 private:
 	/* sync */

Modified: trunk/blender/release/scripts/startup/bl_ui/space_view3d.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_view3d.py	2012-10-16 10:59:35 UTC (rev 51364)
+++ trunk/blender/release/scripts/startup/bl_ui/space_view3d.py	2012-10-16 11:57:46 UTC (rev 51365)
@@ -2312,7 +2312,10 @@
         subcol.label(text="Local Camera:")
         subcol.prop(view, "camera", text="")
 
+        col = layout.column(align=True)
+        col.prop(view, "use_render_border")
 
+
 class VIEW3D_PT_view3d_cursor(Panel):
     bl_space_type = 'VIEW_3D'
     bl_region_type = 'UI'

Modified: trunk/blender/source/blender/blenkernel/BKE_blender.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_blender.h	2012-10-16 10:59:35 UTC (rev 51364)
+++ trunk/blender/source/blender/blenkernel/BKE_blender.h	2012-10-16 11:57:46 UTC (rev 51365)
@@ -42,7 +42,7 @@
  * and keep comment above the defines.
  * Use STRINGIFY() rather than defining with quotes */
 #define BLENDER_VERSION         264
-#define BLENDER_SUBVERSION      2
+#define BLENDER_SUBVERSION      3
 
 /* 262 was the last editmesh release but its has compatibility code for bmesh data,
  * so set the minversion to 2.61 */

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2012-10-16 10:59:35 UTC (rev 51364)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2012-10-16 11:57:46 UTC (rev 51365)
@@ -8046,40 +8046,63 @@
 		}
 	}
 
-	/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
-	/* WATCH IT 2!: Userdef struct init has to be in editors/interface/resources.c! */
+	if (main->versionfile < 264 || (main->versionfile == 264 && main->subversionfile < 3)) {
+		/* smoke branch */
+		{
+			Object *ob;
 
-	{
-		Object *ob;
-
-		for (ob = main->object.first; ob; ob = ob->id.next) {
-			ModifierData *md;
-			for (md = ob->modifiers.first; md; md = md->next) {
-				if (md->type == eModifierType_Smoke) {
-					SmokeModifierData *smd = (SmokeModifierData *)md;
-					if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain) {
-						/* keep branch saves if possible */
-						if (!smd->domain->flame_max_temp) {
-							smd->domain->burning_rate = 0.75f;
-							smd->domain->flame_smoke = 1.0f;
-							smd->domain->flame_vorticity = 0.5f;
-							smd->domain->flame_ignition = 1.25f;
-							smd->domain->flame_max_temp = 1.75f;
-							smd->domain->adapt_threshold = 0.02f;
-							smd->domain->adapt_margin = 4;
-							smd->domain->flame_smoke_color[0] = 0.7f;
-							smd->domain->flame_smoke_color[1] = 0.7f;
-							smd->domain->flame_smoke_color[2] = 0.7f;
+			for (ob = main->object.first; ob; ob = ob->id.next) {
+				ModifierData *md;
+				for (md = ob->modifiers.first; md; md = md->next) {
+					if (md->type == eModifierType_Smoke) {
+						SmokeModifierData *smd = (SmokeModifierData *)md;
+						if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain) {
+							/* keep branch saves if possible */
+							if (!smd->domain->flame_max_temp) {
+								smd->domain->burning_rate = 0.75f;
+								smd->domain->flame_smoke = 1.0f;
+								smd->domain->flame_vorticity = 0.5f;
+								smd->domain->flame_ignition = 1.25f;
+								smd->domain->flame_max_temp = 1.75f;
+								smd->domain->adapt_threshold = 0.02f;
+								smd->domain->adapt_margin = 4;
+								smd->domain->flame_smoke_color[0] = 0.7f;
+								smd->domain->flame_smoke_color[1] = 0.7f;
+								smd->domain->flame_smoke_color[2] = 0.7f;
+							}
 						}
+						else if ((smd->type & MOD_SMOKE_TYPE_FLOW) && smd->flow) {
+							if (!smd->flow->texture_size) {
+								smd->flow->fuel_amount = 1.0;
+								smd->flow->surface_distance = 1.5;
+								smd->flow->color[0] = 0.7f;
+								smd->flow->color[1] = 0.7f;
+								smd->flow->color[2] = 0.7f;
+								smd->flow->texture_size = 1.0f;
+							}
+						}
 					}
-					else if ((smd->type & MOD_SMOKE_TYPE_FLOW) && smd->flow) {
-						if (!smd->flow->texture_size) {
-							smd->flow->fuel_amount = 1.0;
-							smd->flow->surface_distance = 1.5;
-							smd->flow->color[0] = 0.7f;
-							smd->flow->color[1] = 0.7f;
-							smd->flow->color[2] = 0.7f;
-							smd->flow->texture_size = 1.0f;
+				}
+			}
+		}
+
+		/* render border for viewport */
+		{
+			bScreen *sc;
+
+			for (sc = main->screen.first; sc; sc = sc->id.next) {
+				ScrArea *sa;
+				for (sa = sc->areabase.first; sa; sa = sa->next) {
+					SpaceLink *sl;
+					for (sl = sa->spacedata.first; sl; sl = sl->next) {
+						if (sl->spacetype == SPACE_VIEW3D) {
+							View3D *v3d = (View3D *)sl;
+							if (v3d->render_border.xmin == 0.0f && v3d->render_border.ymin == 0.0f &&
+							    v3d->render_border.xmax == 0.0f && v3d->render_border.ymax == 0.0f)
+							{
+								v3d->render_border.xmax = 1.0f;
+								v3d->render_border.ymax = 1.0f;
+							}
 						}
 					}
 				}
@@ -8087,6 +8110,9 @@
 		}
 	}
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list