[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54153] trunk/blender: Cycles: preview rendering support for world/material/lamp.

Brecht Van Lommel brechtvanlommel at pandora.be
Mon Jan 28 18:37:52 CET 2013


Revision: 54153
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54153
Author:   blendix
Date:     2013-01-28 17:37:51 +0000 (Mon, 28 Jan 2013)
Log Message:
-----------
Cycles: preview rendering support for world/material/lamp.

Patch by Sergey, .blend by Thomas and some further tweaks by me.

Still to solve later: allow external engines to specify own preview .blend, for
now the code here is doing too much magic hacking on the preview scene still.

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/addon/__init__.py
    trunk/blender/intern/cycles/blender/addon/engine.py
    trunk/blender/intern/cycles/blender/addon/ui.py
    trunk/blender/intern/cycles/blender/blender_python.cpp
    trunk/blender/intern/cycles/blender/blender_session.cpp
    trunk/blender/source/blender/editors/datafiles/CMakeLists.txt
    trunk/blender/source/blender/editors/datafiles/SConscript
    trunk/blender/source/blender/editors/include/ED_datafiles.h
    trunk/blender/source/blender/editors/render/render_preview.c

Added Paths:
-----------
    trunk/blender/release/datafiles/preview_cycles.blend

Modified: trunk/blender/intern/cycles/blender/addon/__init__.py
===================================================================
--- trunk/blender/intern/cycles/blender/addon/__init__.py	2013-01-28 13:33:40 UTC (rev 54152)
+++ trunk/blender/intern/cycles/blender/addon/__init__.py	2013-01-28 17:37:51 UTC (rev 54153)
@@ -39,6 +39,7 @@
     bl_idname = 'CYCLES'
     bl_label = "Cycles Render"
     bl_use_shading_nodes = True
+    bl_use_preview = True
 
     def __init__(self):
         self.session = None
@@ -48,23 +49,23 @@
 
     # final render
     def update(self, data, scene):
-        if not self.session:
-            engine.create(self, data, scene)
+        if self.is_preview:
+            if not self.session:
+                use_osl = bpy.context.scene.cycles.shading_system
+
+                engine.create(self, data, scene,
+                              None, None, None, use_osl)
         else:
-            engine.reset(self, data, scene)
+            if not self.session:
+                engine.create(self, data, scene)
+            else:
+                engine.reset(self, data, scene)
 
         engine.update(self, data, scene)
 
     def render(self, scene):
         engine.render(self)
 
-    # preview render
-    # def preview_update(self, context, id):
-    #    pass
-    #
-    # def preview_render(self):
-    #    pass
-
     # viewport render
     def view_update(self, context):
         if not self.session:

Modified: trunk/blender/intern/cycles/blender/addon/engine.py
===================================================================
--- trunk/blender/intern/cycles/blender/addon/engine.py	2013-01-28 13:33:40 UTC (rev 54152)
+++ trunk/blender/intern/cycles/blender/addon/engine.py	2013-01-28 17:37:51 UTC (rev 54153)
@@ -30,7 +30,7 @@
     _cycles.init(path, user_path)
 
 
-def create(engine, data, scene, region=0, v3d=0, rv3d=0):
+def create(engine, data, scene, region=0, v3d=0, rv3d=0, preview_osl=False):
     import bpy
     import _cycles
 
@@ -44,7 +44,7 @@
     if rv3d:
         rv3d = rv3d.as_pointer()
 
-    engine.session = _cycles.create(engine.as_pointer(), userpref, data, scene, region, v3d, rv3d)
+    engine.session = _cycles.create(engine.as_pointer(), userpref, data, scene, region, v3d, rv3d, preview_osl)
 
 
 def free(engine):

Modified: trunk/blender/intern/cycles/blender/addon/ui.py
===================================================================
--- trunk/blender/intern/cycles/blender/addon/ui.py	2013-01-28 13:33:40 UTC (rev 54152)
+++ trunk/blender/intern/cycles/blender/addon/ui.py	2013-01-28 17:37:51 UTC (rev 54153)
@@ -1175,6 +1175,9 @@
         types.PARTICLE_PT_force_fields,
         types.PARTICLE_PT_vertexgroups,
         types.PARTICLE_PT_custom_props,
+        types.MATERIAL_PT_preview,
+        types.DATA_PT_preview,
+        types.WORLD_PT_preview,
         )
 
 

Modified: trunk/blender/intern/cycles/blender/blender_python.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_python.cpp	2013-01-28 13:33:40 UTC (rev 54152)
+++ trunk/blender/intern/cycles/blender/blender_python.cpp	2013-01-28 17:37:51 UTC (rev 54153)
@@ -52,8 +52,9 @@
 static PyObject *create_func(PyObject *self, PyObject *args)
 {
 	PyObject *pyengine, *pyuserpref, *pydata, *pyscene, *pyregion, *pyv3d, *pyrv3d;
+	int preview_osl;
 
-	if(!PyArg_ParseTuple(args, "OOOOOOO", &pyengine, &pyuserpref, &pydata, &pyscene, &pyregion, &pyv3d, &pyrv3d))
+	if(!PyArg_ParseTuple(args, "OOOOOOOp", &pyengine, &pyuserpref, &pydata, &pyscene, &pyregion, &pyv3d, &pyrv3d, &preview_osl))
 		return NULL;
 
 	/* RNA */
@@ -91,14 +92,22 @@
 	Py_BEGIN_ALLOW_THREADS
 
 	if(rv3d) {
-		/* interactive session */
+		/* interactive viewport session */
 		int width = region.width();
 		int height = region.height();
 
 		session = new BlenderSession(engine, userpref, data, scene, v3d, rv3d, width, height);
 	}
 	else {
-		/* offline session */
+		/* override some settings for preview */
+		if(engine.is_preview()) {
+			PointerRNA cscene = RNA_pointer_get(&sceneptr, "cycles");
+
+			RNA_boolean_set(&cscene, "shading_system", preview_osl);
+			RNA_boolean_set(&cscene, "use_progressive_refine", true);
+		}
+
+		/* offline session or preview render */
 		session = new BlenderSession(engine, userpref, data, scene);
 	}
 

Modified: trunk/blender/intern/cycles/blender/blender_session.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_session.cpp	2013-01-28 13:33:40 UTC (rev 54152)
+++ trunk/blender/intern/cycles/blender/blender_session.cpp	2013-01-28 17:37:51 UTC (rev 54153)
@@ -288,7 +288,14 @@
 
 void BlenderSession::update_render_tile(RenderTile& rtile)
 {
-	do_write_update_render_tile(rtile, true);
+	/* use final write for preview renders, otherwise render result wouldn't be
+	 * be updated in blender side
+	 * would need to be investigated a bit further, but for now shall be fine
+	 */
+	if (!b_engine.is_preview())
+		do_write_update_render_tile(rtile, true);
+	else
+		do_write_update_render_tile(rtile, false);
 }
 
 void BlenderSession::render()

Added: trunk/blender/release/datafiles/preview_cycles.blend
===================================================================
--- trunk/blender/release/datafiles/preview_cycles.blend	                        (rev 0)
+++ trunk/blender/release/datafiles/preview_cycles.blend	2013-01-28 17:37:51 UTC (rev 54153)
@@ -0,0 +1,7427 @@

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list