Cycles: merge of changes from tomato branch.
Regular rendering now works tiled, and supports save buffers to save memory during render and cache render results. Brick texture node by Thomas. http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Cycles/Nodes/Textures#Brick_Texture Image texture Blended Box Mapping. http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Cycles/Nodes/Textures#Image_Texture http://mango.blender.org/production/blended_box/ Various bug fixes by Sergey and Campbell. * Fix for reading freed memory in some node setups. * Fix incorrect memory read when synchronizing mesh motion. * Fix crash appearing when direct light usage is different on different layers. * Fix for vector pass gives wrong result in some circumstances. * Fix for wrong resolution used for rendering Render Layer node. * Option to cancel rendering when doing initial synchronization. * No more texture limit when using CPU render. * Many fixes for new tiled rendering.
This commit is contained in:
@@ -40,8 +40,9 @@ CCL_NAMESPACE_BEGIN
|
||||
|
||||
/* Constructor */
|
||||
|
||||
BlenderSync::BlenderSync(BL::BlendData b_data_, BL::Scene b_scene_, Scene *scene_, bool preview_)
|
||||
: b_data(b_data_), b_scene(b_scene_),
|
||||
BlenderSync::BlenderSync(BL::RenderEngine b_engine_, BL::BlendData b_data_, BL::Scene b_scene_, Scene *scene_, bool preview_, Progress &progress_)
|
||||
: b_engine(b_engine_),
|
||||
b_data(b_data_), b_scene(b_scene_),
|
||||
shader_map(&scene_->shaders),
|
||||
object_map(&scene_->objects),
|
||||
mesh_map(&scene_->meshes),
|
||||
@@ -49,7 +50,8 @@ BlenderSync::BlenderSync(BL::BlendData b_data_, BL::Scene b_scene_, Scene *scene
|
||||
particle_system_map(&scene_->particle_systems),
|
||||
world_map(NULL),
|
||||
world_recalc(false),
|
||||
experimental(false)
|
||||
experimental(false),
|
||||
progress(progress_)
|
||||
{
|
||||
scene = scene_;
|
||||
preview = preview_;
|
||||
@@ -229,8 +231,7 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer)
|
||||
}
|
||||
else {
|
||||
render_layer.use_localview = (b_v3d.local_view() ? true : false);
|
||||
render_layer.scene_layer = get_layer(b_v3d.layers(), b_v3d.layers_local_view());
|
||||
CYCLES_LOCAL_LAYER_HACK(render_layer.use_localview, render_layer.scene_layer);
|
||||
render_layer.scene_layer = get_layer(b_v3d.layers(), b_v3d.layers_local_view(), render_layer.use_localview);
|
||||
render_layer.layer = render_layer.scene_layer;
|
||||
render_layer.holdout_layer = 0;
|
||||
render_layer.material_override = PointerRNA_NULL;
|
||||
@@ -296,7 +297,7 @@ bool BlenderSync::get_session_pause(BL::Scene b_scene, bool background)
|
||||
return (background)? false: get_boolean(cscene, "preview_pause");
|
||||
}
|
||||
|
||||
SessionParams BlenderSync::get_session_params(BL::UserPreferences b_userpref, BL::Scene b_scene, bool background)
|
||||
SessionParams BlenderSync::get_session_params(BL::RenderEngine b_engine, BL::UserPreferences b_userpref, BL::Scene b_scene, bool background)
|
||||
{
|
||||
SessionParams params;
|
||||
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
|
||||
@@ -350,25 +351,39 @@ SessionParams BlenderSync::get_session_params(BL::UserPreferences b_userpref, BL
|
||||
}
|
||||
}
|
||||
|
||||
/* tiles */
|
||||
if(params.device.type != DEVICE_CPU && !background) {
|
||||
/* currently GPU could be much slower than CPU when using tiles,
|
||||
* still need to be investigated, but meanwhile make it possible
|
||||
* to work in viewport smoothly
|
||||
*/
|
||||
int debug_tile_size = get_int(cscene, "debug_tile_size");
|
||||
|
||||
params.tile_size = make_int2(debug_tile_size, debug_tile_size);
|
||||
}
|
||||
else {
|
||||
int tile_x = b_engine.tile_x();
|
||||
int tile_y = b_engine.tile_y();
|
||||
|
||||
params.tile_size = make_int2(tile_x, tile_y);
|
||||
}
|
||||
|
||||
params.resolution = 1 << get_int(cscene, "resolution_divider");
|
||||
|
||||
/* other parameters */
|
||||
params.threads = b_scene.render().threads();
|
||||
params.tile_size = get_int(cscene, "debug_tile_size");
|
||||
params.min_size = get_int(cscene, "debug_min_size");
|
||||
|
||||
params.cancel_timeout = get_float(cscene, "debug_cancel_timeout");
|
||||
params.reset_timeout = get_float(cscene, "debug_reset_timeout");
|
||||
params.text_timeout = get_float(cscene, "debug_text_timeout");
|
||||
|
||||
if(background) {
|
||||
params.progressive = true;
|
||||
params.min_size = INT_MAX;
|
||||
params.progressive = false;
|
||||
params.resolution = 1;
|
||||
}
|
||||
else
|
||||
params.progressive = true;
|
||||
|
||||
/* todo: multi device only works with single tiles now */
|
||||
if(params.device.type == DEVICE_MULTI)
|
||||
params.tile_size = INT_MAX;
|
||||
|
||||
return params;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user