Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2017-10-05 19:12:10 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2017-10-05 19:13:30 +0300
commit63482a5f2e2ad76989c2d2901c1f34f2f0cb59d4 (patch)
tree5efe4f037535dd5bbce7c2dacabadc3afe37dd82 /release/scripts/modules/bl_previews_utils
parent4537e8558468c71a03bf53f59c60f888b3412de2 (diff)
Fix T53002: Batch-Generate Previews generate empty or none image for large objects.
Camera clipping was left to default values, which won't work well for very large (or small) objects. Now recompute valid clipping start/end based on boundingbox of rendered data, and final location of camera.
Diffstat (limited to 'release/scripts/modules/bl_previews_utils')
-rw-r--r--release/scripts/modules/bl_previews_utils/bl_previews_render.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/release/scripts/modules/bl_previews_utils/bl_previews_render.py b/release/scripts/modules/bl_previews_utils/bl_previews_render.py
index b4f0b8dd3b8..71208ef3485 100644
--- a/release/scripts/modules/bl_previews_utils/bl_previews_render.py
+++ b/release/scripts/modules/bl_previews_utils/bl_previews_render.py
@@ -278,7 +278,7 @@ def do_previews(do_objects, do_groups, do_scenes, do_data_intern):
bbox[1].z = v.z
def objects_bbox_calc(camera, objects, offset_matrix):
- bbox = (Vector((1e9, 1e9, 1e9)), Vector((-1e9, -1e9, -1e9)))
+ bbox = (Vector((1e24, 1e24, 1e24)), Vector((-1e24, -1e24, -1e24)))
for obname, libpath in objects:
ob = bpy.data.objects[obname, libpath]
object_bbox_merge(bbox, ob, camera, offset_matrix)
@@ -305,6 +305,17 @@ def do_previews(do_objects, do_groups, do_scenes, do_data_intern):
cos = objects_bbox_calc(camera, objects, offset_matrix)
loc, ortho_scale = camera.camera_fit_coords(scene, cos)
camera.location = loc
+ # Set camera clipping accordingly to computed bbox.
+ min_dist = 1e24
+ max_dist = -1e24
+ for co in zip(*(iter(cos),) * 3):
+ dist = (Vector(co) - loc).length
+ if dist < min_dist:
+ min_dist = dist
+ if dist > max_dist:
+ max_dist = dist
+ camera.data.clip_start = min_dist / 2
+ camera.data.clip_end = max_dist * 2
if lamp:
loc, ortho_scale = lamp.camera_fit_coords(scene, cos)
lamp.location = loc