15
$\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$
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$
  • 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 May 30 '13 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 Jun 2 '13 at 17:15
  • 1
    $\begingroup$ @Dan the Man. correct $\endgroup$ – ideasman42 Jun 2 '13 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 Jan 14 '15 at 20:14
  • 1
    $\begingroup$ blender.stackexchange.com/a/2653/55 - checked and the metadata is stored and readable. $\endgroup$ – ideasman42 Jan 14 '15 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$
  • $\begingroup$ I'm using 2.67a, and the setting doesn't exist, even on saved file. Is it an addon? $\endgroup$ – Adhi May 30 '13 at 13:20
  • $\begingroup$ @Adhi it is. I added that just added that to the answer. $\endgroup$ – CharlesL May 30 '13 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 May 30 '13 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 May 31 '13 at 0:00
  • $\begingroup$ @Adhi I can't find it in 2.67a. Even with "testing" checked. $\endgroup$ – Daniel Pendergast Jun 2 '13 at 16:30
5
$\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$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.