[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50384] trunk/blender: Cycles: merge of changes from tomato branch.

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Sep 4 15:29:07 CEST 2012


Revision: 50384
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50384
Author:   blendix
Date:     2012-09-04 13:29:07 +0000 (Tue, 04 Sep 2012)
Log Message:
-----------
Cycles: merge of changes from tomato branch.

Regular rendering now works tiled, and supports save buffers to save memory
during render and cache render results.

Brick texture node by Thomas.
http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Cycles/Nodes/Textures#Brick_Texture

Image texture Blended Box Mapping.
http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Cycles/Nodes/Textures#Image_Texture
http://mango.blender.org/production/blended_box/

Various bug fixes by Sergey and Campbell.
* Fix for reading freed memory in some node setups.
* Fix incorrect memory read when synchronizing mesh motion.
* Fix crash appearing when direct light usage is different on different layers.
* Fix for vector pass gives wrong result in some circumstances.
* Fix for wrong resolution used for rendering Render Layer node.
* Option to cancel rendering when doing initial synchronization.
* No more texture limit when using CPU render.
* Many fixes for new tiled rendering.

Modified Paths:
--------------
    trunk/blender/intern/cycles/app/cycles_test.cpp
    trunk/blender/intern/cycles/app/cycles_xml.cpp
    trunk/blender/intern/cycles/blender/addon/properties.py
    trunk/blender/intern/cycles/blender/addon/ui.py
    trunk/blender/intern/cycles/blender/blender_mesh.cpp
    trunk/blender/intern/cycles/blender/blender_object.cpp
    trunk/blender/intern/cycles/blender/blender_particles.cpp
    trunk/blender/intern/cycles/blender/blender_python.cpp
    trunk/blender/intern/cycles/blender/blender_session.cpp
    trunk/blender/intern/cycles/blender/blender_session.h
    trunk/blender/intern/cycles/blender/blender_shader.cpp
    trunk/blender/intern/cycles/blender/blender_sync.cpp
    trunk/blender/intern/cycles/blender/blender_sync.h
    trunk/blender/intern/cycles/blender/blender_util.h
    trunk/blender/intern/cycles/device/CMakeLists.txt
    trunk/blender/intern/cycles/device/device.cpp
    trunk/blender/intern/cycles/device/device.h
    trunk/blender/intern/cycles/device/device_cpu.cpp
    trunk/blender/intern/cycles/device/device_cuda.cpp
    trunk/blender/intern/cycles/device/device_multi.cpp
    trunk/blender/intern/cycles/device/device_opencl.cpp
    trunk/blender/intern/cycles/kernel/CMakeLists.txt
    trunk/blender/intern/cycles/kernel/kernel.cpp
    trunk/blender/intern/cycles/kernel/kernel_compat_cpu.h
    trunk/blender/intern/cycles/kernel/kernel_globals.h
    trunk/blender/intern/cycles/kernel/kernel_path.h
    trunk/blender/intern/cycles/kernel/kernel_textures.h
    trunk/blender/intern/cycles/kernel/svm/svm.h
    trunk/blender/intern/cycles/kernel/svm/svm_image.h
    trunk/blender/intern/cycles/kernel/svm/svm_types.h
    trunk/blender/intern/cycles/render/buffers.cpp
    trunk/blender/intern/cycles/render/buffers.h
    trunk/blender/intern/cycles/render/camera.cpp
    trunk/blender/intern/cycles/render/camera.h
    trunk/blender/intern/cycles/render/graph.cpp
    trunk/blender/intern/cycles/render/image.cpp
    trunk/blender/intern/cycles/render/image.h
    trunk/blender/intern/cycles/render/nodes.cpp
    trunk/blender/intern/cycles/render/nodes.h
    trunk/blender/intern/cycles/render/scene.cpp
    trunk/blender/intern/cycles/render/scene.h
    trunk/blender/intern/cycles/render/session.cpp
    trunk/blender/intern/cycles/render/session.h
    trunk/blender/intern/cycles/render/tile.cpp
    trunk/blender/intern/cycles/render/tile.h
    trunk/blender/intern/cycles/util/util_math.h
    trunk/blender/intern/cycles/util/util_progress.h
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/editors/space_node/drawnode.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/gpu/shaders/gpu_shader_material.glsl
    trunk/blender/source/blender/makesdna/DNA_node_types.h
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree_types.h
    trunk/blender/source/blender/makesrna/intern/rna_render.c
    trunk/blender/source/blender/nodes/CMakeLists.txt
    trunk/blender/source/blender/render/extern/include/RE_engine.h
    trunk/blender/source/blender/render/extern/include/RE_pipeline.h
    trunk/blender/source/blender/render/intern/include/initrender.h
    trunk/blender/source/blender/render/intern/include/render_result.h
    trunk/blender/source/blender/render/intern/source/external_engine.c
    trunk/blender/source/blender/render/intern/source/initrender.c
    trunk/blender/source/blender/render/intern/source/pipeline.c
    trunk/blender/source/blender/render/intern/source/render_result.c

Added Paths:
-----------
    trunk/blender/intern/cycles/device/device_task.cpp
    trunk/blender/intern/cycles/device/device_task.h
    trunk/blender/intern/cycles/kernel/svm/svm_brick.h
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_tex_brick.c

Modified: trunk/blender/intern/cycles/app/cycles_test.cpp
===================================================================
--- trunk/blender/intern/cycles/app/cycles_test.cpp	2012-09-04 12:40:47 UTC (rev 50383)
+++ trunk/blender/intern/cycles/app/cycles_test.cpp	2012-09-04 13:29:07 UTC (rev 50384)
@@ -66,12 +66,13 @@
 
 static void session_print_status()
 {
-	int sample;
+	int sample, tile;
 	double total_time, sample_time;
 	string status, substatus;
 
 	/* get status */
-	options.session->progress.get_sample(sample, total_time, sample_time);
+	sample = options.session->progress.get_sample();
+	options.session->progress.get_tile(tile, total_time, sample_time);
 	options.session->progress.get_status(status, substatus);
 
 	if(substatus != "")
@@ -111,7 +112,7 @@
 
 static void scene_init(int width, int height)
 {
-	options.scene = new Scene(options.scene_params);
+	options.scene = new Scene(options.scene_params, options.session_params.device);
 	xml_read_file(options.scene, options.filepath.c_str());
 	
 	if (width == 0 || height == 0) {
@@ -147,11 +148,12 @@
 	latency = (elapsed - last);
 	last = elapsed;
 
-	int sample;
+	int sample, tile;
 	double total_time, sample_time;
 	string status, substatus;
 
-	progress.get_sample(sample, total_time, sample_time);
+	sample = progress.get_sample();
+	progress.get_tile(tile, total_time, sample_time);
 	progress.get_status(status, substatus);
 
 	if(substatus != "")

Modified: trunk/blender/intern/cycles/app/cycles_xml.cpp
===================================================================
--- trunk/blender/intern/cycles/app/cycles_xml.cpp	2012-09-04 12:40:47 UTC (rev 50383)
+++ trunk/blender/intern/cycles/app/cycles_xml.cpp	2012-09-04 13:29:07 UTC (rev 50384)
@@ -379,6 +379,9 @@
 		else if(string_iequals(node.name(), "checker_texture")) {
 			snode = new CheckerTextureNode();
 		}
+		else if(string_iequals(node.name(), "brick_texture")) {
+			snode = new BrickTextureNode();
+		}
 		else if(string_iequals(node.name(), "gradient_texture")) {
 			GradientTextureNode *blend = new GradientTextureNode();
 			xml_read_enum(&blend->type, GradientTextureNode::type_enum, node, "type");

Modified: trunk/blender/intern/cycles/blender/addon/properties.py
===================================================================
--- trunk/blender/intern/cycles/blender/addon/properties.py	2012-09-04 12:40:47 UTC (rev 50383)
+++ trunk/blender/intern/cycles/blender/addon/properties.py	2012-09-04 13:29:07 UTC (rev 50384)
@@ -241,12 +241,14 @@
                 min=1, max=4096,
                 default=1024,
                 )
-        cls.debug_min_size = IntProperty(
-                name="Min Size",
-                description="",
-                min=1, max=4096,
-                default=64,
+
+        cls.resolution_divider = IntProperty(
+                name="Resolution Divider",
+                description="For viewport render, the number of lower resolutions to render before the full resolution",
+                min=1, max=512,
+                default=4,
                 )
+
         cls.debug_reset_timeout = FloatProperty(
                 name="Reset timeout",
                 description="",

Modified: trunk/blender/intern/cycles/blender/addon/ui.py
===================================================================
--- trunk/blender/intern/cycles/blender/addon/ui.py	2012-09-04 12:40:47 UTC (rev 50383)
+++ trunk/blender/intern/cycles/blender/addon/ui.py	2012-09-04 13:29:07 UTC (rev 50384)
@@ -197,9 +197,14 @@
 
         sub = col.column(align=True)
         sub.label(text="Tiles:")
-        sub.prop(cscene, "debug_tile_size")
-        sub.prop(cscene, "debug_min_size")
 
+        sub.prop(rd, "parts_x", text="X")
+        sub.prop(rd, "parts_y", text="Y")
+
+        subsub = sub.column()
+        subsub.enabled = not rd.use_border
+        subsub.prop(rd, "use_save_buffers")
+
         col = split.column()
 
         sub = col.column(align=True)
@@ -208,7 +213,11 @@
         sub.prop(cscene, "debug_use_spatial_splits")
         sub.prop(cscene, "use_cache")
 
+        sub = col.column(align=True)
+        sub.label(text="Viewport:")
+        sub.prop(cscene, "resolution_divider")
 
+
 class CyclesRender_PT_layers(CyclesButtonsPanel, Panel):
     bl_label = "Layers"
     bl_options = {'DEFAULT_CLOSED'}

Modified: trunk/blender/intern/cycles/blender/blender_mesh.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_mesh.cpp	2012-09-04 12:40:47 UTC (rev 50383)
+++ trunk/blender/intern/cycles/blender/blender_mesh.cpp	2012-09-04 13:29:07 UTC (rev 50384)
@@ -317,11 +317,11 @@
 		BL::Mesh::vertices_iterator v;
 		AttributeStandard std = (motion == -1)? ATTR_STD_MOTION_PRE: ATTR_STD_MOTION_POST;
 		Attribute *attr_M = mesh->attributes.add(std);
-		float3 *M = attr_M->data_float3();
+		float3 *M = attr_M->data_float3(), *cur_M;
 		size_t i = 0;
 
-		for(b_mesh.vertices.begin(v); v != b_mesh.vertices.end() && i < size; ++v, M++, i++)
-			*M = get_float3(v->co());
+		for(b_mesh.vertices.begin(v), cur_M = M; v != b_mesh.vertices.end() && i < size; ++v, cur_M++, i++)
+			*cur_M = get_float3(v->co());
 
 		/* if number of vertices changed, or if coordinates stayed the same, drop it */
 		if(i != size || memcmp(M, &mesh->verts[0], sizeof(float3)*size) == 0)

Modified: trunk/blender/intern/cycles/blender/blender_object.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_object.cpp	2012-09-04 12:40:47 UTC (rev 50383)
+++ trunk/blender/intern/cycles/blender/blender_object.cpp	2012-09-04 13:29:07 UTC (rev 50384)
@@ -300,14 +300,16 @@
 	BL::Scene b_sce = b_scene;
 	int particle_offset = 1;	/* first particle is dummy for regular, non-instanced objects */
 
-	for(; b_sce; b_sce = b_sce.background_set()) {
-		for(b_sce.objects.begin(b_ob); b_ob != b_sce.objects.end(); ++b_ob) {
+	bool cancel = false;
+
+	for(; b_sce && !cancel; b_sce = b_sce.background_set()) {
+		for(b_sce.objects.begin(b_ob); b_ob != b_sce.objects.end() && !cancel; ++b_ob) {
 			bool hide = (render_layer.use_viewport_visibility)? b_ob->hide(): b_ob->hide_render();
-			uint ob_layer = get_layer(b_ob->layers(), b_ob->layers_local_view(), object_is_light(*b_ob));
-			CYCLES_LOCAL_LAYER_HACK(render_layer.use_localview, ob_layer);
+			uint ob_layer = get_layer(b_ob->layers(), b_ob->layers_local_view(), render_layer.use_localview, object_is_light(*b_ob));
 			hide = hide || !(ob_layer & scene_layer);
 
 			if(!hide) {
+				progress.set_status("Synchronizing object", (*b_ob).name());
 
 				int num_particles = object_count_particles(*b_ob);
 
@@ -349,10 +351,12 @@
 
 				particle_offset += num_particles;
 			}
+
+			cancel = progress.get_cancel();
 		}
 	}
 
-	if(!motion) {
+	if(!cancel && !motion) {
 		sync_background_light();
 
 		/* handle removed data and modified pointers */

Modified: trunk/blender/intern/cycles/blender/blender_particles.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_particles.cpp	2012-09-04 12:40:47 UTC (rev 50383)
+++ trunk/blender/intern/cycles/blender/blender_particles.cpp	2012-09-04 13:29:07 UTC (rev 50384)
@@ -199,8 +199,7 @@
 	for(; b_sce; b_sce = b_sce.background_set()) {
 		for(b_sce.objects.begin(b_ob); b_ob != b_sce.objects.end(); ++b_ob) {
 			bool hide = (render_layer.use_viewport_visibility)? b_ob->hide(): b_ob->hide_render();
-			uint ob_layer = get_layer(b_ob->layers(), b_ob->layers_local_view(), object_is_light(*b_ob));
-			CYCLES_LOCAL_LAYER_HACK(render_layer.use_localview, ob_layer);
+			uint ob_layer = get_layer(b_ob->layers(), b_ob->layers_local_view(), render_layer.use_localview, object_is_light(*b_ob));
 			hide = hide || !(ob_layer & scene_layer);
 
 			if(!hide) {

Modified: trunk/blender/intern/cycles/blender/blender_python.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_python.cpp	2012-09-04 12:40:47 UTC (rev 50383)
+++ trunk/blender/intern/cycles/blender/blender_python.cpp	2012-09-04 13:29:07 UTC (rev 50384)
@@ -80,6 +80,8 @@
 	/* create session */
 	BlenderSession *session;
 
+	Py_BEGIN_ALLOW_THREADS
+
 	if(rv3d) {
 		/* interactive session */
 		int width = region.width();
@@ -91,7 +93,9 @@
 		/* offline session */
 		session = new BlenderSession(engine, userpref, data, scene);
 	}
-	
+
+	Py_END_ALLOW_THREADS
+
 	return PyLong_FromVoidPtr(session);
 }
 
@@ -136,9 +140,13 @@
 
 static PyObject *sync_func(PyObject *self, PyObject *value)
 {
+	Py_BEGIN_ALLOW_THREADS
+
 	BlenderSession *session = (BlenderSession*)PyLong_AsVoidPtr(value);
 	session->synchronize();
 
+	Py_END_ALLOW_THREADS
+
 	Py_RETURN_NONE;
 }
 

Modified: trunk/blender/intern/cycles/blender/blender_session.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_session.cpp	2012-09-04 12:40:47 UTC (rev 50383)
+++ trunk/blender/intern/cycles/blender/blender_session.cpp	2012-09-04 13:29:07 UTC (rev 50384)
@@ -42,14 +42,13 @@
 BlenderSession::BlenderSession(BL::RenderEngine b_engine_, BL::UserPreferences b_userpref_,
 	BL::BlendData b_data_, BL::Scene b_scene_)
 : b_engine(b_engine_), b_userpref(b_userpref_), b_data(b_data_), b_scene(b_scene_),
-  b_v3d(PointerRNA_NULL), b_rv3d(PointerRNA_NULL),
-  b_rr(PointerRNA_NULL), b_rlay(PointerRNA_NULL)
+  b_v3d(PointerRNA_NULL), b_rv3d(PointerRNA_NULL)
 {
 	/* offline render */
-	BL::RenderSettings r = b_scene.render();
 
-	width = (int)(r.resolution_x()*r.resolution_percentage()/100);
-	height = (int)(r.resolution_y()*r.resolution_percentage()/100);
+	width = b_engine.resolution_x();
+	height = b_engine.resolution_y();
+
 	background = true;
 	last_redraw_time = 0.0f;
 
@@ -60,7 +59,7 @@
 	BL::BlendData b_data_, BL::Scene b_scene_,
 	BL::SpaceView3D b_v3d_, BL::RegionView3D b_rv3d_, int width_, int height_)
 : b_engine(b_engine_), b_userpref(b_userpref_), b_data(b_data_), b_scene(b_scene_),
-  b_v3d(b_v3d_), b_rv3d(b_rv3d_), b_rr(PointerRNA_NULL), b_rlay(PointerRNA_NULL)
+  b_v3d(b_v3d_), b_rv3d(b_rv3d_)
 {
 	/* 3d view render */
 	width = width_;
@@ -80,17 +79,24 @@
 void BlenderSession::create_session()
 {
 	SceneParams scene_params = BlenderSync::get_scene_params(b_scene, background);
-	SessionParams session_params = BlenderSync::get_session_params(b_userpref, b_scene, background);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list