Is there a simple way to log/save every render that you make in a Blender scene? Maybe an add-on? This would be helpful to visually see progress on modeling, materials, lighting, and whatnot. It would also be helpful if it could "print on" the date/time, vertex count, and the camera settings. Am I just dreaming or is there a way to do this?
3 Answers
The closest thing to logging a render in Blender is to render to different slots. Each slot can store a different render for comparisons etc. In the Image Editor, there is a popup menu in the header that has 8 different slots that you can render to. Before rendering, choose a slot. ( You can also quickly cycle through these by using AltJ for the previous render slot and J for next render slot.)
As for the second part, there is a Stamp pane in the Render tab that you can use to attach the date, time and render time etc to your render.
-
3$\begingroup$ @zeffii, stamp options are written into metadata of EXR/JPEG/PNG files. So if you dont want to see them, you can use a tool to read them back (exrheader command for openexr for example). $\endgroup$ Commented May 30, 2013 at 11:45
-
2$\begingroup$ @Dan the Man, because
Stamp
button is pressed, if its not, the metadata still gets written to the file. $\endgroup$ Commented Jun 2, 2013 at 17:15 -
1
-
1$\begingroup$ @ideasman42 - In what metadata format does Blender store Stamp info in PNGs? I'm struggling to find the RenderTime value with ExifTool $\endgroup$ Commented Jan 14, 2015 at 20:14
-
1$\begingroup$ blender.stackexchange.com/a/2653/55 - checked and the metadata is stored and readable. $\endgroup$ Commented Jan 14, 2015 at 21:14
You can have Blender automatically save files if you check the Auto Save checkbox in the render settings.
Renders will automatically be saved to *blendfile location*/auto_save/
. If you check subfolders renders will be saved to: *blendfile location*/auto_save/*blendfile name*/
(useful if you have multiple .blend files saved in the same directory)
Since it uses the location of the .blend file as a base, you must save your file before this feature can work.
It is an addon, so make sure to enable it in the settings:
-
$\begingroup$ I'm using 2.67a, and the setting doesn't exist, even on saved file. Is it an addon? $\endgroup$– AdhiCommented May 30, 2013 at 13:20
-
$\begingroup$ @Adhi it is. I added that just added that to the answer. $\endgroup$– CharlesLCommented May 30, 2013 at 13:30
-
1$\begingroup$ Wow, I need to check out the installed addons more. Its support level is Testing, filtered off by default in my install. Thanks for pointing that one out :) $\endgroup$– AdhiCommented May 30, 2013 at 13:48
-
1$\begingroup$ @Gwenn: It wasn't included in 2.66a. In fact, not a single addon with support level Testing is included before 2.67 IIRC (it's there by the heapload in 2.67a). $\endgroup$– AdhiCommented May 31, 2013 at 0:00
-
$\begingroup$ @Adhi I can't find it in 2.67a. Even with "testing" checked. $\endgroup$– DanielCommented Jun 2, 2013 at 16:30
I had a similar need before and I did a test. By making use of the handlers (bpy.app.handlers), once can define render_pre, render_post, render_complete callbacks on render (bpy.app.handlers.render_pre.append(preRenderFunc), etc.,).
import bpy
from bpy.app.handlers import persistent
@persistent
def PostLoadSession(self):
print("post load")
scene = bpy.context.scene
srrid = 'srrid'
if srrid not in scene or not scene[srrid]:
print("Nothing was rendered previously")
else:
print('Last image rendered was {0}.{1}.png'.format('RenderResult' ,scene[srrid]))
bpy.app.handlers.load_post.append(PostLoadSession)
@persistent
def PreRender(self):
print("pre render")
scene = bpy.context.scene
srrid = 'srrid'
if srrid not in scene:
print('This is the first time you are rendering from this file')
scene[srrid] = 0
print('Created {0}'.format(srrid))
bpy.app.handlers.render_pre.append(PreRender)
@persistent
def PostRender(self):
print("post render")
scene = bpy.context.scene
srrid = 'srrid'
if srrid not in scene:
print('PreRender was not called')
else:
scene[srrid] += 1
print('Saved render result as {0}.{1}.png'.format('RenderResult', scene[srrid]))
bpy.app.handlers.render_complete.append(PostRender)
You can find more details on my blog post.
http://learningblender3dsoftware.blogspot.in/2012/10/messing-around-with-prepost-handlers.html
The code available on my blog does not actually save the images yet, but it can be easily achievable. I am actually in the process of creating an add-on that saves the images. I hope to release a beta version soon.