Hi everyone!
I’d like to animate the resolution of the camera so I can automate rendering out different vantage points of my scene at unique resolutions. I know this isn’t possible by default in Blender so I wrote some code to remedy that but I’m still having issues.
When I play the timeline in my viewport, the camera cycles through the correct resolution per frame as intended. But when I render out this animation, all frames are exported using the resolution of frame one.
Here is the code I used.
import bpy
res_carousel1 = [2560,941]
res_carousel2 = [2560,941]
res_carousel3 = [2560,941]
res_banner4 = [1700,540]
res_banner5 = [840,530]
res_banner6 = [840,530]
res_dotm7 = [840,1090]
res_banner8 = [313,550]
res_banner9 = [635,270]
res_banner10 = [312,270]
res_banner11 = [312,270]
res_banner12 = [312,270]
res_banner13 = [312,270]
res_banner14 = [635,270]
res_banner15 = [635,270]
res_banner16 = [313,349]
res_banner17 = [312,349]
res_banner18 = [313,349]
res_banner19 = [312,349]
frame_res = {
1: res_carousel1,
2: res_carousel2,
3: res_carousel3,
4: res_banner4,
5: res_banner5,
6: res_banner6,
7: res_dotm7,
8: res_banner8,
9: res_banner9,
10: res_banner10,
11: res_banner11,
12: res_banner12,
13: res_banner13,
14: res_banner14,
15: res_banner15,
16: res_banner16,
17: res_banner17,
18: res_banner18,
19: res_banner19,
}
# Define a callback function to call when scene current frame changes
def chg_res(scene):
# Get frame number
f = scene.frame_current
if frame_res[f] :
scene.render.resolution_x = frame_res[f][0]
scene.render.resolution_y = frame_res[f][1]
else:
scene.render.resolution_x = 100
scene.render.resolution_y = 100
# Register callback in Blender event system (once)
bpy.app.handlers.frame_change_pre.append(chg_res)