blender python api 使用指令碼對一個靜幀 進行全方位渲染

大话人生發表於2024-04-17

程式碼:

import bpy

#Define which objects to use
placement_ob = bpy.context.scene.objects['Sphere']
camera_ob = bpy.context.scene.objects['Camera'] 

render = bpy.context.scene.render

# Set the render path
render_path = 'renders\\vertex-{:03d}'  # Use backslash for Windows paths

for index, vert in enumerate(placement_ob.data.vertices):
    # Apply the object's world matrix to the vertex's local coordinates to get world coordinates
    vcoord = placement_ob.matrix_world @ vert.co
    
    # Set the render filepath for the current vertex
    render.filepath = render_path.format(index)
    
    # Move the camera to the vertex's world position
    camera_ob.location = vcoord
    
    # Render the scene
    bpy.ops.render.render(write_still=True)
    
    # If you want to render all vertices, remove the break statement
    # If you only want to test if it works, you can leave the break statement
    # break  # Remove after you see it works


print('Done!')

中文註釋:

import bpy

# 定義要使用的物體
placement_ob = bpy.context.scene.objects['Sphere']  # 'Sphere' 是要渲染的物體名稱
camera_ob = bpy.context.scene.objects['Camera']  # 'Camera' 是攝像機的名稱

render = bpy.context.scene.render  # 獲取渲染場景的引用

# 設定渲染路徑
render_path = 'renders\\vertex-{:03d}'  # 使用反斜槓作為Windows路徑分隔符

for index, vert in enumerate(placement_ob.data.vertices):  # 遍歷所有頂點
    # 應用物體的世界矩陣到頂點的區域性座標以獲取世界座標
    vcoord = placement_ob.matrix_world @ vert.co  # 使用矩陣乘法運算子
    
    # 設定當前頂點的渲染檔案路徑
    render.filepath = render_path.format(index)  # 使用頂點索引格式化路徑
    
    # 將攝像機移動到頂點的世界位置
    camera_ob.location = vcoord  # 設定攝像機的位置
    
    # 渲染場景
    bpy.ops.render.render(write_still=True)  # 執行靜態影像渲染操作
    
    # 如果你想要渲染所有頂點,移除下面的break語句
    # 如果你只想測試指令碼是否工作,可以保留break語句
    # break  # 一旦看到它工作,就移除這個break語句

print('Done!')  # 列印完成資訊

物體介面截圖

說明:

新建一個空物體,放在平面與地面中間,

新建一個UV球體,應用精簡修改6級,讓球面變為17個點(能圍繞一圈,且點數不多),

攝像機新增標準跟隨(目標為空物體,保證相機始終對著要拍攝的物體),

執行指令碼,就可以渲染出17張當前靜幀的圖片

相關文章