Скрипты Python в Blender: как сохранить последовательность визуализированных изображений?

Я очень новичок в написании сценариев на Python, поэтому я пробовал что-то простое — анимацию группы кубов, совершающих трехмерное случайное блуждание.

Мне удалось заставить программу отображать каждый кадр процесса, но я понятия не имею, как сохранить каждый кадр. Кто-нибудь может помочь?

Вот код. Чего мне не хватает, так это функции def render_and_save.

Ваше здоровье!

import bpy
import random

number_of_cubes = 10
animation_length = 10

def create_cubes(number_to_make):
    i = 0
    while i < number_to_make:
        bpy.ops.mesh.primitive_cube_add(radius=1, view_align=False, enter_editmode=False, location=(0, 0, 0))
        i += 1

def move_cube():
    bpy.ops.transform.translate(value=(random.randint(-1,1), random.randint(-1,1), random.randint(-1,1)), constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1)

def select_cube(cube_name):
    bpy.ops.object.select_all(action = "DESELECT")
    bpy.ops.object.select_pattern(pattern = cube_name)

def move_all():
    j = 0
    while j < number_of_cubes:
        if j == 0:
            name_of_cube = "Cube"
            print(name_of_cube)
        elif j < 10:
            name_of_cube = "Cube.00" + str(j)
            print(name_of_cube)
        elif j < 100:
            name_of_cube = "Cube.0" + str(j)
            print(name_of_cube)
        select_cube(name_of_cube)
        move_cube()
        j += 1

def render_and_save(moves):
    bpy.ops.render.render(use_viewport = True)
    filename = str(moves)+".png"
    #But what should go here to make it save each image?

create_cubes(number_of_cubes)

moves = 0
while moves < animation_length:
    move_all()
    render_and_save(moves)
    moves += 1

person Adam    schedule 29.10.2014    source источник


Ответы (1)


По умолчанию bpy.ops.render.render() не сохранять рендеры отдельных изображений. Просто установите write_still=True, чтобы включить его.

def render_and_save(moves):
    bpy.context.scene.render.filepath = "//renders/"+str(moves)+".png"
    bpy.ops.render.render(use_viewport = True, write_still=True)

Параметр пути к файлу — это то же значение, которое доступно на панели вывода настроек рендеринга. Если поставить «//render/» в начале, изображения будут помещены в папку с именем renders, которая находится в той же папке, что и файл смешивания — «//» является сокращением от текущей родительской папки файла смешивания.

person sambler    schedule 02.11.2014