here...
This commit is contained in:
81
scenecapturescript.py
Normal file
81
scenecapturescript.py
Normal file
@ -0,0 +1,81 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import bpy
|
||||
import os,sys,math
|
||||
import numpy as np
|
||||
|
||||
"""
|
||||
Rendering script for translating a blender scene into a full sky HDR image.
|
||||
This script takes a series of screenshots at different camera angles, and outputs them to a directory
|
||||
|
||||
In this setup, the camera is adjusted to have a 50 degree field of view (so that the renders overlap slightly) and a square image output (equal aspect ratio)
|
||||
"""
|
||||
|
||||
#X and Z camera angles for 50 degree fov screenshots to form a full-sky panorama
|
||||
xorient = np.arange(-90,90,15)
|
||||
zorient = np.arange(0,360,15)
|
||||
|
||||
#Unfortunately, this must be an absolute path in blender on Linux
|
||||
# Output directory for which to output a series of screenshots
|
||||
outdir = "/absolute/path/to/your/outdir"
|
||||
|
||||
def orient_camera(x,y,z):
|
||||
"""_
|
||||
orient_camera(x,y,z)
|
||||
x,y,z - camera angles in degrees.
|
||||
Called from within blender to orient the camera, assumed to be named "Camera"
|
||||
"""
|
||||
camera = bpy.data.objects["Camera"]
|
||||
camera.rotation_mode = 'XYZ'
|
||||
camera.rotation_euler[0] = x
|
||||
camera.rotation_euler[1] = y
|
||||
camera.rotation_euler[2] = z
|
||||
|
||||
#update scene to apply changes
|
||||
bpy.context.view_layer.update()
|
||||
|
||||
return
|
||||
|
||||
def render(outdir = outdir, fname="tmp.png"):
|
||||
"""
|
||||
render(outdir, fname)
|
||||
outdir - the output directory in which to place the rendered image
|
||||
fname - the output filename for the rendered image
|
||||
|
||||
Called from within blender to render a still image at the given location
|
||||
"""
|
||||
|
||||
|
||||
fname = os.path.join(outdir,fname)
|
||||
|
||||
camera = bpy.data.objects["Camera"]
|
||||
|
||||
scene = bpy.context.scene
|
||||
|
||||
scene.render.filepath = fname
|
||||
|
||||
bpy.ops.render.render(write_still=True)
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
def main1():
|
||||
"""
|
||||
The main script.
|
||||
Rotates the camera around and saves a series of named outputs
|
||||
output names are scene_{x_angle_in_degrees}_{z_angle_in_degrees}
|
||||
"""
|
||||
|
||||
for I in range(0,len(xorient)):
|
||||
for J in range(0,len(zorient)):
|
||||
|
||||
xx = np.floor(xorient[I])
|
||||
zz = np.floor(zorient[J])
|
||||
|
||||
fnout = "scene_{:d}_{:d}.png".format(int(xx),int(zz))
|
||||
|
||||
orient_camera((xorient[I]+90)*np.pi/180,0,zorient[J]*np.pi/180)
|
||||
render(outdir=outdir,fname=fnout)
|
||||
|
||||
main1()
|
||||
Reference in New Issue
Block a user