From 5412389af61f55d4e6a8ff271df01411b195e659 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 23 Jul 2012 14:48:19 +0000 Subject: fix for cycles bug in localview: see r48269, bits used for localview gave collisions with PathRayFlag's --- intern/cycles/blender/blender_object.cpp | 1 + intern/cycles/blender/blender_sync.cpp | 3 +++ intern/cycles/blender/blender_sync.h | 15 +++++++++++++++ 3 files changed, 19 insertions(+) (limited to 'intern/cycles/blender') diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp index a928bd9a6ea..242f7c8ecef 100644 --- a/intern/cycles/blender/blender_object.cpp +++ b/intern/cycles/blender/blender_object.cpp @@ -306,6 +306,7 @@ void BlenderSync::sync_objects(BL::SpaceView3D b_v3d, int motion) for(b_sce.objects.begin(b_ob); b_ob != b_sce.objects.end(); ++b_ob) { bool hide = (render_layer.use_viewport_visibility)? b_ob->hide(): b_ob->hide_render(); uint ob_layer = get_layer(b_ob->layers(), b_ob->layers_local_view(), object_is_light(*b_ob)); + CYCLES_LOCAL_LAYER_HACK(render_layer.use_localview, ob_layer); hide = hide || !(ob_layer & scene_layer); if(!hide) { diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp index c9d2d68da0a..ae28453a696 100644 --- a/intern/cycles/blender/blender_sync.cpp +++ b/intern/cycles/blender/blender_sync.cpp @@ -219,7 +219,9 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer) layer = layername.c_str(); } 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.layer = render_layer.scene_layer; render_layer.holdout_layer = 0; render_layer.material_override = PointerRNA_NULL; @@ -245,6 +247,7 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer) render_layer.material_override = b_rlay->material_override(); render_layer.use_background = b_rlay->use_sky(); render_layer.use_viewport_visibility = false; + render_layer.use_localview = false; render_layer.samples = b_rlay->samples(); } diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h index 8c31c4b86ba..1a6c04db10c 100644 --- a/intern/cycles/blender/blender_sync.h +++ b/intern/cycles/blender/blender_sync.h @@ -127,10 +127,25 @@ private: BL::Material material_override; bool use_background; bool use_viewport_visibility; + bool use_localview; int samples; } render_layer; }; +/* we don't have spare bits for localview (normally 20-28) + * because PATH_RAY_LAYER_SHIFT uses 20-32. + * So - check if we have localview and if so, shift local + * view bits down to 1-8, since this is done for the view + * port only - it should be OK and not conflict with + * render layers. - Campbell. + * + * ... as an alternative we could use uint64_t + */ +#define CYCLES_LOCAL_LAYER_HACK(use_localview, layer) \ + if (use_localview) { \ + layer >>= 20; \ + } (void)0 + CCL_NAMESPACE_END #endif /* __BLENDER_SYNC_H__ */ -- cgit v1.2.3 From fec872ef9c0bb6904cbe9a7b59b3f51ae7bb0702 Mon Sep 17 00:00:00 2001 From: Lukas Toenne Date: Thu, 26 Jul 2012 11:40:58 +0000 Subject: Added a particle index output to the Particle Info Cycles node. This is required to get consistent ID numbers for particles. The Object ID is not usable since it's a user defined value of the instanced object, which does not vary per instance. Also the random value from the object info node is not consistent over time, since it only depends on the index in the dupli list (so each emitted or dying particle shifts the value). The particle index is always the same for a specific particle. Randomized values can be generated from this with the use of a noise texture. --- intern/cycles/blender/blender_particles.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'intern/cycles/blender') diff --git a/intern/cycles/blender/blender_particles.cpp b/intern/cycles/blender/blender_particles.cpp index f591aaa6d83..d669aa34a68 100644 --- a/intern/cycles/blender/blender_particles.cpp +++ b/intern/cycles/blender/blender_particles.cpp @@ -144,16 +144,20 @@ void BlenderSync::sync_particles(Object *ob, BL::Object b_ob) BL::Object::particle_systems_iterator b_psys; for(b_ob.particle_systems.begin(b_psys); b_psys != b_ob.particle_systems.end(); ++b_psys) { if (use_particle_system(*b_psys)) { + int pa_index = 0; BL::ParticleSystem::particles_iterator b_pa; for(b_psys->particles.begin(b_pa), index = 0; b_pa != b_psys->particles.end(); ++b_pa, ++index) { if(use_particle(*b_pa)) { Particle pa; + pa.index = pa_index; pa.age = b_scene.frame_current() - b_pa->birth_time(); pa.lifetime = b_pa->lifetime(); ob->particles.push_back(pa); } + + ++pa_index; } } } -- cgit v1.2.3