16
$\begingroup$

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?

$\endgroup$

3 Answers 3

11
$\begingroup$

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.)

enter image description here

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.

enter image description here

$\endgroup$
9
  • 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$
    – ideasman42
    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$
    – ideasman42
    Commented Jun 2, 2013 at 17:15
  • 1
    $\begingroup$ @Dan the Man. correct $\endgroup$
    – ideasman42
    Commented Jun 2, 2013 at 18:37
  • 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$
    – futurehack
    Commented Jan 14, 2015 at 20:14
  • 1
    $\begingroup$ blender.stackexchange.com/a/2653/55 - checked and the metadata is stored and readable. $\endgroup$
    – ideasman42
    Commented Jan 14, 2015 at 21:14
12
$\begingroup$

You can have Blender automatically save files if you check the Auto Save checkbox in the render settings.

autosave checkbox

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: enable in the settings

$\endgroup$
8
  • $\begingroup$ I'm using 2.67a, and the setting doesn't exist, even on saved file. Is it an addon? $\endgroup$
    – Adhi
    Commented May 30, 2013 at 13:20
  • $\begingroup$ @Adhi it is. I added that just added that to the answer. $\endgroup$
    – CharlesL
    Commented 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$
    – Adhi
    Commented 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$
    – Adhi
    Commented May 31, 2013 at 0:00
  • $\begingroup$ @Adhi I can't find it in 2.67a. Even with "testing" checked. $\endgroup$
    – Daniel
    Commented Jun 2, 2013 at 16:30
6
$\begingroup$

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.

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .