Blender: рендеринг изображений и создание анимации - PullRequest
1 голос
/ 05 мая 2020

Я новичок в Blender, и мне сложно понять его ключевые концепции. Я использую Blender 2.82 и работаю со сценариями Python. Мой проект состоит из использования Python для следующих действий:

  1. Слегка переместить объект.
  2. Сделать снимок с помощью камеры 1, камеры 2, камеры 3 и камеры 4.
  3. Повторите.

У меня был сценарий, который это делал. Однако я хотел сохранять положение моего объекта (сферы) каждый раз, когда я менял его в течение l oop в анимации, чтобы позже я мог увидеть, что я сделал. При попытке вставить ключевые кадры для анимации в мой l oop кажется, что моя сфера не двигалась. Ниже мой код. Когда я удаляю строки, включающие frame_set и keyframe_insert, моя сфера перемещается, как я могу видеть по визуализированным изображениям. Я думаю, что сбиваю с толку какое-то понятие… Любая помощь будет принята с благодарностью. Цель этого состоит в том, чтобы получить изображения, которые я бы получил с четырех камер, размещенных вокруг движущегося объекта, чтобы имитировать систему мокап. Почему при вставке ключевого кадра изменяются все визуализируемые изображения?

import bpy, bgl, blf,sys
import numpy as np
from bpy import data, ops, props, types, context

cameraNames=''

# Loop all command line arguments and try to find "cameras=east" or similar
for arg in sys.argv:
    words=arg.split('=')
    if ( words[0] == 'cameras'):
     cameraNames = words[1]

sceneKey = bpy.data.scenes.keys()[0]

# Loop all objects and try to find Cameras
bpy.data.scenes[sceneKey].render.image_settings.file_format = 'JPEG'
bpy.data.scenes[sceneKey].cycles.max_bounces=12
bpy.data.scenes[sceneKey].render.tile_x=8
bpy.data.scenes[sceneKey].render.tile_y=8
bpy.data.scenes[sceneKey].cycles.samples = 16
bpy.data.scenes[sceneKey].cycles.caustics_reflective = False
bpy.data.scenes[sceneKey].cycles.caustics_refractive = False

bpy.data.objects['Sphere'].location=[1,1,1] 
frame_num=0
for i in range(0,2): #nframes
    bpy.context.scene.frame_set(frame_num)
    for obj in bpy.data.objects:
        # Find cameras that match cameraNames
        if ( obj.type =='CAMERA') and ( cameraNames == '' or obj.name.find(cameraNames) != -1) :

          # Set Scenes camera and output filename
            bpy.data.scenes[sceneKey].camera = obj
            bpy.data.scenes[sceneKey].render.filepath = '//'+obj.name+"_"+str(i) 

          # Render Scene and store the scene
            bpy.ops.render.render( write_still=True )

    bpy.data.objects['Sphere'].keyframe_insert(data_path="location",index=-1)
    frame_num+=1
    bpy.data.objects['Sphere'].location=[2,2,1]

1 Ответ

0 голосов
/ 05 мая 2020

Я ничего не знаю о python, но вы можете попробовать выполнить анимацию по ключевым кадрам вручную и создать сценарий, который будет отображать изображения после набора ключевых кадров (всякий раз, когда объект перемещается в новое место)

Это не так уж сложно (я говорю только об анимации), просто нажмите кнопку с кружком рядом с кнопкой воспроизведения анимации на шкале времени. Это включит автоматическое формирование ключевого кадра, и вам просто нужно go установить нужный ключевой кадр и переместить объект в соответствии с вашими потребностями.

...