[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58999] trunk/blender/intern/cycles/ blender/blender_object.cpp: Fix #36355: cycles render of objects with both duplis and hair would not render

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Aug 7 21:02:15 CEST 2013


Revision: 58999
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58999
Author:   blendix
Date:     2013-08-07 19:02:15 +0000 (Wed, 07 Aug 2013)
Log Message:
-----------
Fix #36355: cycles render of objects with both duplis and hair would not render
the hair in some cases.

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/blender_object.cpp

Modified: trunk/blender/intern/cycles/blender/blender_object.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_object.cpp	2013-08-07 18:31:26 UTC (rev 58998)
+++ trunk/blender/intern/cycles/blender/blender_object.cpp	2013-08-07 19:02:15 UTC (rev 58999)
@@ -348,32 +348,41 @@
 
 	bool hair_present = false;
 	bool show_emitter = false;
-	bool hide = false;
+	bool hide_as_dupli_parent = false;
+	bool hide_as_dupli_child_original = false;
 
 	for(b_ob.particle_systems.begin(b_psys); b_psys != b_ob.particle_systems.end(); ++b_psys) {
 		if((b_psys->settings().render_type() == BL::ParticleSettings::render_type_PATH) &&
 		   (b_psys->settings().type()==BL::ParticleSettings::type_HAIR))
 			hair_present = true;
 
-		if(b_psys->settings().use_render_emitter()) {
-			hide = false;
+		if(b_psys->settings().use_render_emitter())
 			show_emitter = true;
-		}
 	}
 
 	/* duplicators hidden by default, except dupliframes which duplicate self */
 	if(b_ob.is_duplicator())
 		if(top_level || b_ob.dupli_type() != BL::Object::dupli_type_FRAMES)
-			hide = true;
+			hide_as_dupli_parent = true;
 
 	/* hide original object for duplis */
 	BL::Object parent = b_ob.parent();
 	if(parent && object_render_hide_original(b_ob.type(), parent.dupli_type()))
 		if(parent_hide)
-			hide = true;
-
-	hide_triangles = (hair_present && !show_emitter);
-	return hide && !show_emitter;
+			hide_as_dupli_child_original = true;
+	
+	if(show_emitter) {
+		hide_triangles = false;
+		return (hide_as_dupli_parent || hide_as_dupli_child_original);
+	}
+	else if(hair_present) {
+		hide_triangles = true;
+		return hide_as_dupli_child_original;
+	}
+	else {
+		hide_triangles = false;
+		return (hide_as_dupli_parent || hide_as_dupli_child_original);
+	}
 }
 
 static bool object_render_hide_duplis(BL::Object b_ob)




More information about the Bf-blender-cvs mailing list