2
$\begingroup$

I was wondering if there was a way to only calculate the things that are currently visible in the frame. My scene has a lot of trees that are slowing down my render times, and these are mostly out of sight. This would be especially efficient especially in my scene.

TL;DR Is there a way to stop things in the background that are out of sight from being processed/ slowing down rendering?

$\endgroup$
1
  • $\begingroup$ You could try to move them to a different collection and render them seperatly if needed and then combine the layers the compositor $\endgroup$ Commented Apr 26, 2019 at 12:42

1 Answer 1

3
$\begingroup$

and these are mostly out of sight

but we can still see them!

Please read How is Cycles different from Blender Internal first.

Most materials [and objects] scatter light, so Cycles needs to account for light bouncing in different directions. How this is done depends on which [Integrator][6] is used.

Objects scatter light even if they are outside of the visible frame.

objects

If you remove them, you will likely receive a different result, even if they weren't directly visible. There are many ways to restrict rendering manually.

You could do a check with python to see if an object is in the cameras frustum. Adapting the code from this reddit post1 we can select all the objects which don't contain points in the frustum. However for a production ready check, we would also have to take edges/faces modifiers and reflections into account.+

import bpy import bmesh from mathutils import Vector from bpy_extras.object_utils import world_to_camera_view def check_if_vertices_in_frustum(scene, cam, obj): mat_world = obj.matrix_world cs, ce = cam.data.clip_start, cam.data.clip_end for v in obj.data.vertices: co_ndc = world_to_camera_view(scene, cam, mat_world * v.co) #check wether point is inside frustum if (0.0 < co_ndc.x < 1.0 and 0.0 < co_ndc.y < 1.0 and cs < co_ndc.z < ce): return True return False scene = bpy.context.scene cam = scene.camera for obj in scene.objects: if obj.type == 'MESH': if (check_if_vertices_in_frustum(scene, cam, obj)): obj.select = False # obj.hide_render = False else: obj.select = True # obj.hide_render = True 

1 Help with finding whether a vertex is visible from a camera or not

$\endgroup$

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.