Cycles: Optimization for black world backgrounds
* If a Background node is set to a black color or zero strength, it now gets removed from the shader graph. * In case the graph is empty (no background node), the kernel will skip evaluating it and save some rendertime. This can help quite a bit in scenes, where the majority of the image consists of a black background. Example: http://www.pasteall.org/pic/show.php?id=82650 In this case the render is ~16% faster. Differential Revision: https://developer.blender.org/D972
This commit is contained in:
@@ -72,16 +72,23 @@ void Background::device_update(Device *device, DeviceScene *dscene, Scene *scene
|
||||
else
|
||||
kbackground->volume_shader = SHADER_NONE;
|
||||
|
||||
if(!(visibility & PATH_RAY_DIFFUSE))
|
||||
kbackground->surface_shader |= SHADER_EXCLUDE_DIFFUSE;
|
||||
if(!(visibility & PATH_RAY_GLOSSY))
|
||||
kbackground->surface_shader |= SHADER_EXCLUDE_GLOSSY;
|
||||
if(!(visibility & PATH_RAY_TRANSMIT))
|
||||
kbackground->surface_shader |= SHADER_EXCLUDE_TRANSMIT;
|
||||
if(!(visibility & PATH_RAY_VOLUME_SCATTER))
|
||||
kbackground->surface_shader |= SHADER_EXCLUDE_SCATTER;
|
||||
if(!(visibility & PATH_RAY_CAMERA))
|
||||
kbackground->surface_shader |= SHADER_EXCLUDE_CAMERA;
|
||||
/* No background node, make world shader invisible to all rays, to skip evaluation in kernel. */
|
||||
if(scene->shaders[shader]->graph->nodes.size() <= 1) {
|
||||
kbackground->surface_shader |= SHADER_EXCLUDE_ANY;
|
||||
}
|
||||
/* Background present, check visibilities */
|
||||
else {
|
||||
if(!(visibility & PATH_RAY_DIFFUSE))
|
||||
kbackground->surface_shader |= SHADER_EXCLUDE_DIFFUSE;
|
||||
if(!(visibility & PATH_RAY_GLOSSY))
|
||||
kbackground->surface_shader |= SHADER_EXCLUDE_GLOSSY;
|
||||
if(!(visibility & PATH_RAY_TRANSMIT))
|
||||
kbackground->surface_shader |= SHADER_EXCLUDE_TRANSMIT;
|
||||
if(!(visibility & PATH_RAY_VOLUME_SCATTER))
|
||||
kbackground->surface_shader |= SHADER_EXCLUDE_SCATTER;
|
||||
if(!(visibility & PATH_RAY_CAMERA))
|
||||
kbackground->surface_shader |= SHADER_EXCLUDE_CAMERA;
|
||||
}
|
||||
|
||||
need_update = false;
|
||||
}
|
||||
|
Reference in New Issue
Block a user