[Bf-blender-cvs] [b28c35daef4] hair_guides: Merge branch 'blender2.8' into hair_guides

Lukas Tönne noreply at git.blender.org
Tue Jun 5 21:59:28 CEST 2018


Commit: b28c35daef4a39d6bfa53af702bd66006ee9c7f1
Author: Lukas Tönne
Date:   Tue Jun 5 20:59:15 2018 +0100
Branches: hair_guides
https://developer.blender.org/rBb28c35daef4a39d6bfa53af702bd66006ee9c7f1

Merge branch 'blender2.8' into hair_guides

===================================================================



===================================================================

diff --cc intern/cycles/blender/blender_curves.cpp
index 417d845537c,e9270ee5539..558657d61d2
--- a/intern/cycles/blender/blender_curves.cpp
+++ b/intern/cycles/blender/blender_curves.cpp
@@@ -124,327 -125,139 +124,325 @@@ static void ObtainCacheDataFromParticle
  	Transform tfm = get_transform(b_ob->matrix_world());
  	Transform itfm = transform_quick_inverse(tfm);
  
 -	BL::Object::modifiers_iterator b_mod;
 -	for(b_ob->modifiers.begin(b_mod); b_mod != b_ob->modifiers.end(); ++b_mod) {
 -		if((b_mod->type() == b_mod->type_PARTICLE_SYSTEM) && (background ? b_mod->show_render() : b_mod->show_viewport())) {
 -			BL::ParticleSystemModifier psmd((const PointerRNA)b_mod->ptr);
 -			BL::ParticleSystem b_psys((const PointerRNA)psmd.particle_system().ptr);
 -			BL::ParticleSettings b_part((const PointerRNA)b_psys.settings().ptr);
 -
 -			if((b_part.render_type() == BL::ParticleSettings::render_type_PATH) && (b_part.type() == BL::ParticleSettings::type_HAIR)) {
 -				int shader = clamp(b_part.material()-1, 0, mesh->used_shaders.size()-1);
 -				int draw_step = background ? b_part.render_step() : b_part.draw_step();
 -				int totparts = b_psys.particles.length();
 -				int totchild = background ? b_psys.child_particles.length() : (int)((float)b_psys.child_particles.length() * (float)b_part.draw_percentage() / 100.0f);
 -				int totcurves = totchild;
 -
 -				if(b_part.child_type() == 0 || totchild == 0)
 -					totcurves += totparts;
 -
 -				if(totcurves == 0)
 +	if((b_part.type() != BL::ParticleSettings::type_HAIR) ||
 +	   (b_part.render_type() != BL::ParticleSettings::render_type_PATH))
 +	{
 +		return;
 +	}
 +	
 +	int shader = clamp(b_part.material()-1, 0, mesh->used_shaders.size()-1);
 +	int draw_step = background ? b_part.render_step() : b_part.draw_step();
 +	int totparts = b_psys.particles.length();
 +	int totchild = background ? b_psys.child_particles.length() : (int)((float)b_psys.child_particles.length() * (float)b_part.draw_percentage() / 100.0f);
 +	int totcurves = totchild;
 +	
 +	if(b_part.child_type() == 0 || totchild == 0)
 +		totcurves += totparts;
 +	
 +	if(totcurves == 0)
 +		return;
 +	
 +	int ren_step = (1 << draw_step) + 1;
 +	if(b_part.kink() == BL::ParticleSettings::kink_SPIRAL)
 +		ren_step += b_part.kink_extra_steps();
 +	
- 	PointerRNA cpsys = RNA_pointer_get(&b_part.ptr, "cycles");
- 	
 +	CData->psys_firstcurve.push_back_slow(*curvenum);
 +	CData->psys_curvenum.push_back_slow(totcurves);
 +	CData->psys_shader.push_back_slow(shader);
 +	
- 	float radius = get_float(cpsys, "radius_scale") * 0.5f;
++	float radius = b_part.radius_scale() * 0.5f;
 +	
- 	CData->psys_rootradius.push_back_slow(radius * get_float(cpsys, "root_width"));
- 	CData->psys_tipradius.push_back_slow(radius * get_float(cpsys, "tip_width"));
- 	CData->psys_shape.push_back_slow(get_float(cpsys, "shape"));
- 	CData->psys_closetip.push_back_slow(get_boolean(cpsys, "use_closetip"));
++	CData->psys_rootradius.push_back_slow(radius * b_part.root_radius());
++	CData->psys_tipradius.push_back_slow(radius * b_part.tip_radius());
++	CData->psys_shape.push_back_slow(b_part.shape());
++	CData->psys_closetip.push_back_slow(b_part.use_close_tip());
 +	
 +	int pa_no = 0;
 +	if(!(b_part.child_type() == 0) && totchild != 0)
 +		pa_no = totparts;
 +	
 +	int num_add = (totparts+totchild - pa_no);
 +	CData->curve_firstkey.reserve(CData->curve_firstkey.size() + num_add);
 +	CData->curve_keynum.reserve(CData->curve_keynum.size() + num_add);
 +	CData->curve_length.reserve(CData->curve_length.size() + num_add);
 +	CData->curvekey_co.reserve(CData->curvekey_co.size() + num_add*ren_step);
 +	CData->curvekey_time.reserve(CData->curvekey_time.size() + num_add*ren_step);
 +	
 +	for(; pa_no < totparts+totchild; pa_no++) {
 +		int keynum = 0;
 +		CData->curve_firstkey.push_back_slow(*keyno);
 +		
 +		float curve_length = 0.0f;
 +		float3 pcKey;
 +		for(int step_no = 0; step_no < ren_step; step_no++) {
 +			float nco[3];
 +			b_psys.co_hair(*b_ob, pa_no, step_no, nco);
 +			float3 cKey = make_float3(nco[0], nco[1], nco[2]);
 +			cKey = transform_point(&itfm, cKey);
 +			if(step_no > 0) {
 +				float step_length = len(cKey - pcKey);
 +				if(step_length == 0.0f)
  					continue;
 -
 -				int ren_step = (1 << draw_step) + 1;
 -				if(b_part.kink() == BL::ParticleSettings::kink_SPIRAL)
 -					ren_step += b_part.kink_extra_steps();
 -
 -				CData->psys_firstcurve.push_back_slow(curvenum);
 -				CData->psys_curvenum.push_back_slow(totcurves);
 -				CData->psys_shader.push_back_slow(shader);
 -
 -				float radius = b_part.radius_scale() * 0.5f;
 -
 -				CData->psys_rootradius.push_back_slow(radius * b_part.root_radius());
 -				CData->psys_tipradius.push_back_slow(radius * b_part.tip_radius());
 -				CData->psys_shape.push_back_slow(b_part.shape());
 -				CData->psys_closetip.push_back_slow(b_part.use_close_tip());
 -
 -				int pa_no = 0;
 -				if(!(b_part.child_type() == 0) && totchild != 0)
 -					pa_no = totparts;
 -
 -				int num_add = (totparts+totchild - pa_no);
 -				CData->curve_firstkey.reserve(CData->curve_firstkey.size() + num_add);
 -				CData->curve_keynum.reserve(CData->curve_keynum.size() + num_add);
 -				CData->curve_length.reserve(CData->curve_length.size() + num_add);
 -				CData->curvekey_co.reserve(CData->curvekey_co.size() + num_add*ren_step);
 -				CData->curvekey_time.reserve(CData->curvekey_time.size() + num_add*ren_step);
 -
 -				for(; pa_no < totparts+totchild; pa_no++) {
 -					int keynum = 0;
 -					CData->curve_firstkey.push_back_slow(keyno);
 -
 -					float curve_length = 0.0f;
 -					float3 pcKey;
 -					for(int step_no = 0; step_no < ren_step; step_no++) {
 -						float nco[3];
 -						b_psys.co_hair(*b_ob, pa_no, step_no, nco);
 -						float3 cKey = make_float3(nco[0], nco[1], nco[2]);
 -						cKey = transform_point(&itfm, cKey);
 -						if(step_no > 0) {
 -							float step_length = len(cKey - pcKey);
 -							if(step_length == 0.0f)
 -								continue;
 -							curve_length += step_length;
 -						}
 -						CData->curvekey_co.push_back_slow(cKey);
 -						CData->curvekey_time.push_back_slow(curve_length);
 -						pcKey = cKey;
 -						keynum++;
 -					}
 -					keyno += keynum;
 -
 -					CData->curve_keynum.push_back_slow(keynum);
 -					CData->curve_length.push_back_slow(curve_length);
 -					curvenum++;
 -				}
 +				curve_length += step_length;
  			}
 +			CData->curvekey_co.push_back_slow(cKey);
 +			CData->curvekey_time.push_back_slow(curve_length);
 +			pcKey = cKey;
 +			keynum++;
  		}
 +		*keyno += keynum;
 +		
 +		CData->curve_keynum.push_back_slow(keynum);
 +		CData->curve_length.push_back_slow(curve_length);
 +		(*curvenum)++;
  	}
 -
 -	return true;
  }
  
 -static bool ObtainCacheParticleUV(Mesh *mesh,
 -                                  BL::Mesh *b_mesh,
 -                                  BL::Object *b_ob,
 -                                  ParticleCurveData *CData,
 -                                  bool background,
 -                                  int uv_num)
 +static void ObtainCacheUVFromParticleSystem(BL::Mesh *b_mesh,
 +                                            BL::ParticleSystemModifier *b_psmd,
 +                                            ParticleCurveData *CData,
 +                                            bool background,
 +                                            int uv_num)
  {
 -	if(!(mesh && b_mesh && b_ob && CData))
 -		return false;
 -
 -	CData->curve_uv.clear();
 +	BL::ParticleSystem b_psys((const PointerRNA)b_psmd->particle_system().ptr);
 +	BL::ParticleSettings b_part((const PointerRNA)b_psys.settings().ptr);
  
 -	BL::Object::modifiers_iterator b_mod;
 -	for(b_ob->modifiers.begin(b_mod); b_mod != b_ob->modifiers.end(); ++b_mod) {
 -		if((b_mod->type() == b_mod->type_PARTICLE_SYSTEM) && (background ? b_mod->show_render() : b_mod->show_viewport())) {
 -			BL::ParticleSystemModifier psmd((const PointerRNA)b_mod->ptr);
 -			BL::ParticleSystem b_psys((const PointerRNA)psmd.particle_system().ptr);
 -			BL::ParticleSettings b_part((const PointerRNA)b_psys.settings().ptr);
 +	if((b_part.type() != BL::ParticleSettings::type_HAIR) ||
 +	   (b_part.render_type() != BL::ParticleSettings::render_type_PATH))
 +	{
 +		return;
 +	}
  
 -			if((b_part.render_type() == BL::ParticleSettings::render_type_PATH) && (b_part.type() == BL::ParticleSettings::type_HAIR)) {
 -				int totparts = b_psys.particles.length();
 -				int totchild = background ? b_psys.child_particles.length() : (int)((float)b_psys.child_particles.length() * (float)b_part.draw_percentage() / 100.0f);
 -				int totcurves = totchild;
 +	int totparts = b_psys.particles.length();
 +	int totchild = background ? b_psys.child_particles.length() : (int)((float)b_psys.child_particles.length() * (float)b_part.draw_percentage() / 100.0f);
 +	int totcurves = totchild;
 +	
 +	if(b_part.child_type() == 0 || totchild == 0)
 +		totcurves += totparts;
 +	
 +	if(totcurves == 0)
 +		return;
 +	
 +	int pa_no = 0;
 +	if(!(b_part.child_type() == 0) && totchild != 0)
 +		pa_no = totparts;
 +	
 +	int num_add = (totparts+totchild - pa_no);
 +	CData->curve_uv.reserve(CData->curve_uv.size() + num_add);
 +	
 +	BL::ParticleSystem::particles_iterator b_pa;
 +	b_psys.particles.begin(b_pa);
 +	for(; pa_no < totparts+totchild; pa_no++) {
 +		/* Add UVs */
 +		BL::Mesh::tessface_uv_textures_iterator l;
 +		b_mesh->tessface_uv_textures.begin(l);
 +		
 +		float3 uv = make_float3(0.0f, 0.0f, 0.0f);
 +		if(b_mesh->tessface_uv_textures.length())
 +			b_psys.uv_on_emitter(*b_psmd, *b_pa, pa_no, uv_num, &uv.x);
 +		CData->curve_uv.push_back_slow(uv);
 +		
 +		if(pa_no < totparts && b_pa != b_psys.particles.end())
 +			++b_pa;
 +	}
 +}
  
 -				if(b_part.child_type() == 0 || totchild == 0)
 -					totcurves += totparts;
 +static void ObtainCacheVColFromParticleSystem(BL::Mesh *b_mesh,
 +                                              BL::ParticleSystemModifier *b_psmd,
 +                                              ParticleCurveData *CData,
 +                                              bool background,
 +                                              int vcol_num)
 +{
 +	BL::ParticleSystem b_psys((const PointerRNA)b_psmd->particle_system().ptr);
 +	BL::ParticleSettings b_part((const PointerRNA)b_psys.setting

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list