You can use a script for that. This repo on github has Render.py. It uses a settings file for each camera (or the default if no camera specific setting is found). So for each camera multiple resolutions and sampling settings can be defined. Put the render_settings.json file in the same dir as the blender file. Open the blender file and goto the scripting tab. Load and run the script.
Render.py script
import bpy
import json
import os
renderPath = bpy.path.abspath("//Renders\\")
print('Render path: ' + renderPath)
renderSettingsJsonPath = bpy.path.abspath("//render_settings.json")
print('Settings file: ' + renderSettingsJsonPath)
def ensureDirExists(file_path):
if not os.path.exists(file_path):
os.makedirs(file_path)
def loadRenderSettings():
file = open(renderSettingsJsonPath,"r+")
contents = file.read()
file.close()
return json.loads(contents)
ensureDirExists(renderPath)
renderSettings = loadRenderSettings()
print('Render settings loaded')
for obj in bpy.data.objects:
if obj.type != "CAMERA":
continue
print('Camera with name "' + obj.name +'" found')
renderSettingName = 'default'
if obj.name in renderSettings:
print('Render settings for camera found')
renderSettingName = obj.name
else:
print('No settings for camera found, default settings will apply.')
if renderSettingName not in renderSettings:
print('No render settings for "' + renderSettingName + '" not found, skipping')
continue;
bpy.context.scene.camera = obj
print('Active camera set to ' + obj.name)
for renderSetting in renderSettings[renderSettingName]:
resolution = renderSetting['resolution']
resX = resolution['x']
resY = resolution['y']
samples = renderSetting['samples']
engine = renderSetting['engine']
fileName = obj.name + "_" + str(resX) + "x" + str(resY) + "_s" + str(samples) + ".png"
print('Render file name: ' + fileName)
bpy.context.scene.render.filepath = renderPath + "\\" + fileName
bpy.context.scene.render.resolution_x = resX
bpy.context.scene.render.resolution_y = resY
bpy.context.scene.render.engine = engine
if engine == 'CYCLES':
bpy.context.scene.cycles.samples = samples
elif engine == 'EEVEE':
bpy.context.scene.eevee.taa_render_samples = samples
print('Render engine settings set')
print('Render start')
bpy.ops.render.render(write_still=True)
print('Render finished')
render_settings.json
{
"default": [
{
"engine": "CYCLES",
"samples": 32,
"resolution": {
"x": 320,
"y": 240
}
}
],
"Camera": [
{
"engine": "CYCLES",
"samples": 128,
"resolution": {
"x": 640,
"y": 480
}
},
{
"engine": "CYCLES",
"samples": 512,
"resolution": {
"x": 1920,
"y": 1080
}
}
],
"Camera.001": [
{
"engine": "CYCLES",
"samples": 128,
"resolution": {
"x": 640,
"y": 480
}
},
{
"engine": "CYCLES",
"samples": 512,
"resolution": {
"x": 1920,
"y": 1080
}
}
]
}