在Blender中,我试图以非常大的图像输出(30000 x 18000)渲染一个巨大的场景。
这是用于游戏背景资产,将被分割成更小的POT图像,我试图保留细节,因为相机在游戏中放大(因此大图像输出)。
从技术上讲,我可以按原样渲染它,但它可能会导致一些渲染性能问题。
所以我想知道是否有办法将我的相机分成4个较小的相机,每个相机渲染15000x9000的图像,整个图像的象限,然后我将在PS中合并,然后再将其切片。
或者有没有办法精确定位4台相机,以便它们像素精确地呈现整个图像的象限?
感谢。
答案 0 :(得分:2)
您无需设置多个摄像头甚至移动摄像头。一个小的python脚本可以为你切割渲染。这样做的一个缺点是,当从脚本渲染时,blender不会更新它的窗口。
听起来你想要剪切最终图像,你可能想用这个将它剪成最终的部分。
不要期望看到任何好处,只要提高性能或减少RAM使用,因为每个渲染需要加载整个场景数据,考虑反射和阴影。这样做还有一些好处,你可以在渲染时创建最终的图像文件,只需要一次完成一个图像就可以停止并开始渲染,你也可以分享多个负载计算机,让每台计算机渲染一组不同的图块。
Blender有一个名为Render Border的功能,它允许您只渲染最终图像的一部分。使用python,您可以将边框设置为所需的大小并多次渲染。最好的部分是你也可以将最终图像裁剪到指定的边框,但是如果你不裁剪并保存为支持alpha的图像格式,你最终会得到一个透明的最终分辨率图像。渲染区域,这意味着您可以将每个图像作为新图层打开,并且这些图像会自动位于最终图像的正确位置。
边界最小值/最大值是最终分辨率的百分比,以0.0到1.0之间的值输入。
import bpy
import os
# cut final image into 10 by 10 smaller images
cut_into = 10
# location of folder to save images to
output_folder = '//renders'
rndr = bpy.context.scene.render
rndr.use_border = True
rndr.use_crop_to_border = False
for row in range(cut_into):
for column in range(cut_into):
filename = "chunk_{}_{}".format(row + 1, column + 1)
rndr.filepath = os.path.join(output_folder, filename)
rndr.border_min_x = (1 / cut_into) * row
rndr.border_max_x = (1 / cut_into) * (row + 1)
rndr.border_min_y = (1 / cut_into) * column
rndr.border_max_y = (1 / cut_into) * (column + 1)
bpy.ops.render.render( write_still=True )
如果之前没有在blender中使用python,可以将此脚本粘贴到blender的text editor中,然后单击Run Script按钮。或者您可以在没有GUI的情况下使用它,方法是将其保存到文本文件并使用终端 -
blender -b myfile.blend -P this_script.py