[Bf-committers] SVN commit: /data/svn/bf-blender [16716] trunk/blender/source: BGE patch: add advanced parameters for SoftBody.

blender at erwincoumans.com blender at erwincoumans.com
Thu Sep 25 23:18:02 CEST 2008


To be more precise, the Bullet soft body _settings_ re-use some of the 
existing Blender soft body settings in blenderobject->soft. 

This means, you have to first create a Blender soft body, before the Game 
buttons show the soft body option. Also, before copying physics information 
(using CTRL-C), you have to copy soft body properties. We could automate 
this copy step. 

Hope this helps,
Erwin 

 

blender at erwincoumans.com writes: 

> 
> It has been fixed now.  
> 
> Bullet soft bodies re-use some of the existing Blender soft bodies.
> Thanks,
> Erwin  
> 
> 
> Ton Roosendaal writes:  
> 
>> Hi Benoit,  
>> 
>> Just adding options for this in Object struct is not correct.
>> First off it's an experimental function only available in GE, secondly  
>> it will make future improvements in Blender for proper Bullet physics  
>> very confused.  
>> 
>> You're safer with adding a pointer to a new struct BulletSoftbody or  
>> so, and allocate this struct on first usage (like how  
>> DNA_object_force.h now).  
>> 
>> I'd also recommend to re-use existing softbody settings, where or if  
>> possible? An integrated approach where Blender softbody works in GE  
>> would also be preferable.  
>> 
>> -Ton-  
>> 
>> ------------------------------------------------------------------------
>> Ton Roosendaal  Blender Foundation   ton at blender.org    www.blender.org
>> Blender Institute BV  Entrepotdok 57A  1018AD Amsterdam The Netherlands  
>> 
>> On 25 Sep, 2008, at 0:58, Benoit Bolsee wrote:  
>> 
>>> Revision: 16716
>>>            
>>> http://projects.blender.org/plugins/scmsvn/viewcvs.php? 
>>> view=rev&root=bf-blender&revision=16716
>>> Author:   ben2610
>>> Date:     2008-09-25 00:58:49 +0200 (Thu, 25 Sep 2008)  
>>>
>>> Log Message:
>>> -----------
>>> BGE patch: add advanced parameters for SoftBody. Add  
>>> Rasterizer.drawLine() Python function.  
>>>
>>> Modified Paths:
>>> --------------
>>>     trunk/blender/source/blender/blenkernel/intern/object.c
>>>     trunk/blender/source/blender/blenloader/intern/readfile.c
>>>     trunk/blender/source/blender/makesdna/DNA_object_types.h
>>>     trunk/blender/source/blender/src/buttons_logic.c
>>>     trunk/blender/source/blender/src/editobject.c
>>>     trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
>>>     trunk/blender/source/gameengine/PyDoc/Rasterizer.py  
>>>
>>> Modified: trunk/blender/source/blender/blenkernel/intern/object.c
>>> ===================================================================
>>> --- trunk/blender/source/blender/blenkernel/intern/object.c	2008-09-24  
>>> 11:52:31 UTC (rev 16715)
>>> +++ trunk/blender/source/blender/blenkernel/intern/object.c	2008-09-24  
>>> 22:58:49 UTC (rev 16716)
>>> @@ -964,6 +964,10 @@
>>>  	ob->anisotropicFriction[2] = 1.0f;
>>>  	ob->gameflag= OB_PROP|OB_COLLISION;
>>>  	ob->margin = 0.0;
>>> +	ob->linearStiffness = 1.0f;
>>> +	ob->angularStiffness = 1.0f;
>>> +	ob->volumePreservation = 1.0f;
>>> +	ob->gamesoftFlag = 0;  
>>>
>>>  	/* NT fluid sim defaults */
>>>  	ob->fluidsimFlag = 0;  
>>>
>>> Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
>>> ===================================================================
>>> ---  
>>> trunk/blender/source/blender/blenloader/intern/readfile.c	2008-09-24  
>>> 11:52:31 UTC (rev 16715)
>>> +++  
>>> trunk/blender/source/blender/blenloader/intern/readfile.c	2008-09-24  
>>> 22:58:49 UTC (rev 16716)
>>> @@ -7849,6 +7849,10 @@
>>>  			// Before it was conditioning all the other dynamic flags
>>>  			if (!(ob->gameflag & OB_ACTOR))
>>>  				ob->gameflag &=  
>>> ~(OB_GHOST|OB_DYNAMIC|OB_RIGID_BODY|OB_SOFT_BODY|OB_COLLISION_RESPONSE) 
>>> ;
>>> +			/* suitable default for older files */
>>> +			ob->linearStiffness = 1.0f;
>>> +			ob->angularStiffness = 1.0f;
>>> +			ob->volumePreservation = 1.0f;
>>>  		}
>>>  	}  
>>>
>>>
>>> Modified: trunk/blender/source/blender/makesdna/DNA_object_types.h
>>> ===================================================================
>>> ---  
>>> trunk/blender/source/blender/makesdna/DNA_object_types.h	2008-09-24  
>>> 11:52:31 UTC (rev 16715)
>>> +++  
>>> trunk/blender/source/blender/makesdna/DNA_object_types.h	2008-09-24  
>>> 22:58:49 UTC (rev 16716)
>>> @@ -156,9 +156,16 @@  
>>>
>>>  	float formfactor;
>>>  	float rdamping, sizefac;
>>> -	float margin, pad3;
>>> +	float margin;
>>> +	/* for game engine soft body */
>>> +	float linearStiffness;
>>> +	float angularStiffness;
>>> +	float volumePreservation;
>>> +	int   gamesoftFlag;
>>> +	int   pad3;  
>>>
>>>
>>> +
>>>  	char dt, dtx;
>>>  	char totcol;	/* copy of mesh or curve or meta */
>>>  	char actcol;	/* currently selected material in the user interface */
>>> @@ -411,6 +418,9 @@
>>>  #define OB_RECALC_TIME		4
>>>  #define OB_RECALC			7  
>>>
>>> +/* ob->gamesoftFlag */
>>> +#define OB_SOFT_SHAPE_MATCHING	1
>>> +
>>>  /* ob->gameflag */
>>>  #define OB_DYNAMIC		1
>>>  #define OB_CHILD		2  
>>>
>>> Modified: trunk/blender/source/blender/src/buttons_logic.c
>>> ===================================================================
>>> --- trunk/blender/source/blender/src/buttons_logic.c	2008-09-24  
>>> 11:52:31 UTC (rev 16715)
>>> +++ trunk/blender/source/blender/src/buttons_logic.c	2008-09-24  
>>> 22:58:49 UTC (rev 16716)
>>> @@ -2979,11 +2979,11 @@
>>>  {
>>>  	uiBlock *block;
>>>  	Object *ob = arg_ob;
>>> -	short yco = 65, xco = 0;
>>> +	short yco = 105, xco = 0;  
>>>
>>>  	block= uiNewBlock(&curarea->uiblocks, "advanced_bullet_options",  
>>> UI_EMBOSS, UI_HELV, curarea->win);
>>>  	/* use this for a fake extra empy space around the buttons */
>>> -	uiDefBut(block, LABEL, 0, "", -5, -10, 255, 100, NULL, 0, 0, 0, 0,  
>>> "");
>>> +	uiDefBut(block, LABEL, 0, "", -5, -10, 255, 140, NULL, 0, 0, 0, 0,  
>>> "");  
>>>
>>>  	uiDefButBitI(block, TOG, OB_ACTOR, 0, "Sensor actor",
>>>  				xco, yco, 118, 19, &ob->gameflag, 0, 0, 0, 0,
>>> @@ -3008,6 +3008,25 @@
>>>  				xco, yco, 118, 19, &ob->margin, 0.0, 1.0, 1, 0,
>>>  				"Collision margin");
>>>  	}
>>> +	if (ob->gameflag & OB_SOFT_BODY) {
>>> +		uiDefButBitI(block, TOG, OB_SOFT_SHAPE_MATCHING, 0, "Shape  
>>> matching",
>>> +					xco+=120, yco, 118, 19, &ob->gamesoftFlag, 0, 0, 0, 0,
>>> +					"Enable soft body shape matching");
>>> +		yco -= 25;
>>> +		xco = 0;
>>> +		uiDefButF(block, NUMSLI, 0, "LinStiff ", xco, yco, 238, 19,
>>> +				&ob->linearStiffness, 0.0, 1.0, 1, 0,
>>> +				"Linear stiffness of the soft body vertex spring");
>>> +		yco -= 25;
>>> +		uiDefButF(block, NUMSLI, 0, "AngStiff ", xco, yco, 238, 19,
>>> +				&ob->angularStiffness, 0.0, 1.0, 1, 0,
>>> +				"Angular stiffness of the soft body vertex spring");
>>> +		yco -= 25;
>>> +		uiDefButF(block, NUMSLI, 0, "Volume ", xco, yco, 238, 19,
>>> +				&ob->volumePreservation, 0.0, 1.0, 1, 0,
>>> +				"Factor of soft body volume preservation");
>>> +	}
>>> +
>>>  			
>>>  	uiBlockSetDirection(block, UI_TOP);  
>>>
>>>
>>> Modified: trunk/blender/source/blender/src/editobject.c
>>> ===================================================================
>>> --- trunk/blender/source/blender/src/editobject.c	2008-09-24 11:52:31  
>>> UTC (rev 16715)
>>> +++ trunk/blender/source/blender/src/editobject.c	2008-09-24 22:58:49  
>>> UTC (rev 16716)
>>> @@ -3529,6 +3529,10 @@
>>>  						base->object->boundtype = ob->boundtype;
>>>  					}
>>>  					base->object->margin= ob->margin;
>>> +					base->object->linearStiffness= ob->linearStiffness;
>>> +					base->object->angularStiffness= ob->angularStiffness;
>>> +					base->object->volumePreservation= ob->volumePreservation;
>>> +					base->object->gamesoftFlag= ob->gamesoftFlag;
>>>  				}
>>>  				else if(event==17) {	/* tex space */
>>>  					copy_texture_space(base->object, ob);  
>>>
>>> Modified: trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
>>> ===================================================================
>>> ---  
>>> trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp	2008-09-24  
>>> 11:52:31 UTC (rev 16715)
>>> +++  
>>> trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp	2008-09-24  
>>> 22:58:49 UTC (rev 16716)
>>> @@ -797,6 +797,36 @@
>>>  	return PyInt_FromLong(flag);
>>>  }  
>>>
>>> +static PyObject* gPyDrawLine(PyObject*, PyObject* args)
>>> +{
>>> +	PyObject* ob_from;
>>> +	PyObject* ob_to;
>>> +	PyObject* ob_color;
>>> +
>>> +	if (!gp_Rasterizer) {
>>> +		PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
>>> +		return NULL;
>>> +	}
>>> +
>>> +	if (!PyArg_ParseTuple(args,"OOO",&ob_from,&ob_to,&ob_color))
>>> +		return NULL;
>>> +
>>> +	MT_Vector3 from(0., 0., 0.);
>>> +	MT_Vector3 to(0., 0., 0.);
>>> +	MT_Vector3 color(0., 0., 0.);
>>> +	if (!PyVecTo(ob_from, from))
>>> +		return NULL;
>>> +	if (!PyVecTo(ob_to, to))
>>> +		return NULL;
>>> +	if (!PyVecTo(ob_color, color))
>>> +		return NULL;
>>> +
>>> +	gp_Rasterizer->DrawDebugLine(from,to,color);
>>> +	
>>> +	Py_RETURN_NONE;
>>> +}
>>> +
>>> +
>>>  STR_String	gPyGetWindowHeight__doc__="getWindowHeight doc";
>>>  STR_String	gPyGetWindowWidth__doc__="getWindowWidth doc";
>>>  STR_String	gPyEnableVisibility__doc__="enableVisibility doc";
>>> @@ -838,6 +868,8 @@
>>>     METH_VARARGS, "set the state of a GLSL material setting"},
>>>    {"getGLSLMaterialSetting",(PyCFunction) gPyGetGLSLMaterialSetting,
>>>     METH_VARARGS, "get the state of a GLSL material setting"},
>>> +  {"drawLine", (PyCFunction) gPyDrawLine,
>>> +   METH_VARARGS, "draw a line on the screen"},
>>>    { NULL, (PyCFunction) NULL, 0, NULL }
>>>  };  
>>>
>>>
>>> Modified: trunk/blender/source/gameengine/PyDoc/Rasterizer.py
>>> ===================================================================
>>> --- trunk/blender/source/gameengine/PyDoc/Rasterizer.py	2008-09-24  
>>> 11:52:31 UTC (rev 16715)
>>> +++ trunk/blender/source/gameengine/PyDoc/Rasterizer.py	2008-09-24  
>>> 22:58:49 UTC (rev 16716)
>>> @@ -181,4 +181,15 @@
>>>  	@type setting: string (lights, shaders, shadows, ramps, nodes,  
>>> extra_textures)
>>>  	@rtype: boolean
>>>  	"""
>>> +def drawLine(from,to,color):
>>> +	"""
>>> +	Draw a line in the 3D scene.
>>> +	
>>> +	@param from: the origin of the line
>>> +	@type from: list [x, y, z]
>>> +	@param to: the end of the line
>>> +	@type to: list [x, y, z]
>>> +	@param color: the color of the line
>>> +	@type color: list [r, g, b]
>>> +	"""  
>>>
>>>  
>>>
>>> _______________________________________________
>>> Bf-blender-cvs mailing list
>>> Bf-blender-cvs at blender.org
>>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs  
>>>
>> 
>> _______________________________________________
>> Bf-committers mailing list
>> Bf-committers at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-committers
>   
> 
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers
 



More information about the Bf-committers mailing list