PsychoBlend: rendering a cropped image using border feature now works.
This commit is contained in:
parent
71c320d87c
commit
9d92bd099d
|
@ -34,17 +34,20 @@ class PsychopathRender(bpy.types.RenderEngine):
|
||||||
return psy_binary
|
return psy_binary
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
def _render(self, scene, psy_filepath, use_stdin):
|
def _render(self, scene, psy_filepath, use_stdin, crop):
|
||||||
psy_binary = PsychopathRender._locate_binary()
|
psy_binary = PsychopathRender._locate_binary()
|
||||||
if not psy_binary:
|
if not psy_binary:
|
||||||
print("Psychopath: could not execute psychopath, possibly Psychopath isn't installed")
|
print("Psychopath: could not execute psychopath, possibly Psychopath isn't installed")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# TODO: figure out command line options
|
# Figure out command line options
|
||||||
|
args = []
|
||||||
|
if crop != None:
|
||||||
|
args += ["--crop", str(crop[0]), str(self.size_y - crop[3]), str(crop[2] - 1), str(self.size_y - crop[1] - 1)]
|
||||||
if use_stdin:
|
if use_stdin:
|
||||||
args = ["--spb", str(scene.psychopath.max_samples_per_bucket), "--blender_output", "--use_stdin"]
|
args += ["--spb", str(scene.psychopath.max_samples_per_bucket), "--blender_output", "--use_stdin"]
|
||||||
else:
|
else:
|
||||||
args = ["--spb", str(scene.psychopath.max_samples_per_bucket), "--blender_output", "-i", psy_filepath]
|
args += ["--spb", str(scene.psychopath.max_samples_per_bucket), "--blender_output", "-i", psy_filepath]
|
||||||
|
|
||||||
# Start Rendering!
|
# Start Rendering!
|
||||||
try:
|
try:
|
||||||
|
@ -59,9 +62,13 @@ class PsychopathRender(bpy.types.RenderEngine):
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _draw_bucket(self, bucket_info, pixels_encoded):
|
def _draw_bucket(self, crop, bucket_info, pixels_encoded):
|
||||||
x = bucket_info[0]
|
if crop != None:
|
||||||
y = self.size_y - bucket_info[3]
|
x = bucket_info[0] - crop[0]
|
||||||
|
y = self.size_y - bucket_info[3] - crop[1]
|
||||||
|
else:
|
||||||
|
x = bucket_info[0]
|
||||||
|
y = self.size_y - bucket_info[3]
|
||||||
width = bucket_info[2] - bucket_info[0]
|
width = bucket_info[2] - bucket_info[0]
|
||||||
height = bucket_info[3] - bucket_info[1]
|
height = bucket_info[3] - bucket_info[1]
|
||||||
|
|
||||||
|
@ -84,6 +91,23 @@ class PsychopathRender(bpy.types.RenderEngine):
|
||||||
|
|
||||||
export_path = scene.psychopath.export_path.strip()
|
export_path = scene.psychopath.export_path.strip()
|
||||||
use_stdin = False
|
use_stdin = False
|
||||||
|
|
||||||
|
r = scene.render
|
||||||
|
# compute resolution
|
||||||
|
self.size_x = int(r.resolution_x * r.resolution_percentage / 100)
|
||||||
|
self.size_y = int(r.resolution_y * r.resolution_percentage / 100)
|
||||||
|
|
||||||
|
# Calculate border cropping, if any.
|
||||||
|
if scene.render.use_border == True:
|
||||||
|
minx = r.resolution_x * scene.render.border_min_x * (r.resolution_percentage / 100)
|
||||||
|
miny = r.resolution_y * scene.render.border_min_y * (r.resolution_percentage / 100)
|
||||||
|
maxx = r.resolution_x * scene.render.border_max_x * (r.resolution_percentage / 100)
|
||||||
|
maxy = r.resolution_y * scene.render.border_max_y * (r.resolution_percentage / 100)
|
||||||
|
crop = (int(minx), int(miny), int(maxx), int(maxy))
|
||||||
|
else:
|
||||||
|
crop = None
|
||||||
|
|
||||||
|
# Are we using an output file or standard in/out?
|
||||||
if export_path != "":
|
if export_path != "":
|
||||||
export_path += "_%d.psy" % scene.frame_current
|
export_path += "_%d.psy" % scene.frame_current
|
||||||
else:
|
else:
|
||||||
|
@ -92,7 +116,7 @@ class PsychopathRender(bpy.types.RenderEngine):
|
||||||
|
|
||||||
if use_stdin:
|
if use_stdin:
|
||||||
# Start rendering
|
# Start rendering
|
||||||
if not self._render(scene, export_path, use_stdin):
|
if not self._render(scene, export_path, use_stdin, crop):
|
||||||
self.update_stats("", "Psychopath: Not found")
|
self.update_stats("", "Psychopath: Not found")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -107,7 +131,7 @@ class PsychopathRender(bpy.types.RenderEngine):
|
||||||
|
|
||||||
self.update_stats("", "Psychopath: Rendering")
|
self.update_stats("", "Psychopath: Rendering")
|
||||||
else:
|
else:
|
||||||
# start export
|
# Export to file
|
||||||
self.update_stats("", "Psychopath: Exporting data from Blender")
|
self.update_stats("", "Psychopath: Exporting data from Blender")
|
||||||
with open(export_path, 'w+b') as f:
|
with open(export_path, 'w+b') as f:
|
||||||
if not psy_export.PsychoExporter(f, self, scene).export_psy():
|
if not psy_export.PsychoExporter(f, self, scene).export_psy():
|
||||||
|
@ -117,15 +141,10 @@ class PsychopathRender(bpy.types.RenderEngine):
|
||||||
|
|
||||||
# Start rendering
|
# Start rendering
|
||||||
self.update_stats("", "Psychopath: Rendering from %s" % export_path)
|
self.update_stats("", "Psychopath: Rendering from %s" % export_path)
|
||||||
if not self._render(scene, export_path, use_stdin):
|
if not self._render(scene, export_path, use_stdin, crop):
|
||||||
self.update_stats("", "Psychopath: Not found")
|
self.update_stats("", "Psychopath: Not found")
|
||||||
return
|
return
|
||||||
|
|
||||||
r = scene.render
|
|
||||||
# compute resolution
|
|
||||||
self.size_x = int(r.resolution_x * r.resolution_percentage / 100)
|
|
||||||
self.size_y = int(r.resolution_y * r.resolution_percentage / 100)
|
|
||||||
|
|
||||||
# If we can, make the render process's stdout non-blocking. The
|
# If we can, make the render process's stdout non-blocking. The
|
||||||
# benefit of this is that canceling the render won't block waiting
|
# benefit of this is that canceling the render won't block waiting
|
||||||
# for the next piece of input.
|
# for the next piece of input.
|
||||||
|
@ -186,7 +205,7 @@ class PsychopathRender(bpy.types.RenderEngine):
|
||||||
pixels = contents[2]
|
pixels = contents[2]
|
||||||
|
|
||||||
# Draw the bucket
|
# Draw the bucket
|
||||||
self._draw_bucket(bucket_info, pixels)
|
self._draw_bucket(crop, bucket_info, pixels)
|
||||||
|
|
||||||
# Update render progress bar
|
# Update render progress bar
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user