XSIforum.com

Crear "montaña" de particulas

0 Usuarios y 5 Visitantes están viendo este tema.

alanf

  • *****
  • 6029
  • Pipeline Developer @ Felix & Paul Studios
Re: Crear "montaña" de particulas
« Respuesta #20 en: 08 Noviembre 2007, 04:32:31 »
Curioso.

Por lo que veo, no colisiona si no es un volumen cerrado. Cerre tu piscina y ya va bien.

Adjunto la escena arreglada. (6.02) ;)

Re: Crear "montaña" de particulas
« Respuesta #21 en: 08 Noviembre 2007, 12:11:17 »
Curioso.

Por lo que veo, no colisiona si no es un volumen cerrado. Cerre tu piscina y ya va bien.

Adjunto la escena arreglada. (6.02) ;)
alanf, no se si leiste mi post anterior al tuyo pero no es necesario que sea un objeto cerrado, con cambiar el tipo de colision ya funciona bien, aqui 6.5

Unaided

  • ***
  • 3293
Re: Crear "montaña" de particulas
« Respuesta #22 en: 08 Noviembre 2007, 12:46:06 »
No se la causa, porque no deberia darte ese error, pero si cambias en la esfera el tipo de colision, de actual shape a convex hull (o incluso sphere) colisiona como deberia con el cilindro.

Lo lógico sería que usara el actual shape, porque quiero que colisiones con el interior del cilindro. El convex hull traza unas lineas que viene a ser el cilindro cerrado.

No leí la versión de XSI que usas (6.5), yo estoy con la 6.01. De todos modos si el Actual Shape no se aplica correctamente a un objeto abierto, pues no sé....


Unaided

  • ***
  • 3293
Re: Crear "montaña" de particulas
« Respuesta #23 en: 08 Noviembre 2007, 13:01:19 »
Pues es lo que dice Alanf, por lo menos en su versión y en la 6.01. El tesselado interno que hace en los cuerpos para cálcular la simulación, lo debe hacer cerrando el objeto. En el segundo ejemplo tampoco está cerrado del todo el objeto, pero el patch que hace no interfiere con el resultado esperado.

Piscina "mal cerrada": http://www.sendmefile.com/00593134

Piscina cerrada: http://www.sendmefile.com/00593133

Bueno el escollo este lo doy por resuelto. Tendré en cuenta el volumen del contenedor sabiendo esto.
Gracias por vuestras respuestas.
« Última modificación: 08 Noviembre 2007, 13:10:16 por Unaided »

Unaided

  • ***
  • 3293
Re: Crear "montaña" de particulas
« Respuesta #24 en: 08 Noviembre 2007, 13:16:45 »
Siguiendo con el tema inicial, quería apilar o hacer una montaña de bolas. Como la idea inicial era usar un emisor de particulas, con ello el número de instancias de cada bola lo generaba el programa.

Ahora, siguiendo por el camino que Sumatra dijo (usar solo dinamicas), la generación de bolas solo se me ocurre hacerla clonando el objeto, lo que hace que haya un número estático de bolas.

A alguien se le ocurre cómo hacer algo más parecido al emisor de particulas para la generación de las bolas?

Se me olvida decir, que tendré al menos tres tipos de bolas o pelotas diferentes. Estoy pensando en meterlas en un modelo y hacer instancias, o en un grupo y ver si se puede clonar el grupo.

Re: Crear "montaña" de particulas
« Respuesta #25 en: 08 Noviembre 2007, 13:32:17 »
Pues es lo que dice Alanf, por lo menos en su versión y en la 6.01. El tesselado interno que hace en los cuerpos para cálcular la simulación, lo debe hacer cerrando el objeto. En el segundo ejemplo tampoco está cerrado del todo el objeto, pero el patch que hace no interfiere con el resultado esperado.

Piscina "mal cerrada": http://www.sendmefile.com/00593134

Piscina cerrada: http://www.sendmefile.com/00593133

Bueno el escollo este lo doy por resuelto. Tendré en cuenta el volumen del contenedor sabiendo esto.
Gracias por vuestras respuestas.

Unaided, lo que probe era para que funcione rapido sin tener que cambiar geometria, por eso la solucion de cambiar el tipo de colision, si en cambio queres usar si o si actual shape, entonces debes seguir las pautas que dice el manual, te las pongo aqui:

Tips for Successful Collisions
• Collisions don’t generally work well with very thin objects. Grids are generally not a good idea to use: it’s better to use a flattened cube that has some thickness, such as for creating a ground plane or table.

Actual Shape - physX
When you select Actual Shape with physX as the dynamics engine, collision data is created to calculate each rigid body’s geometry for the collision. This collision data is based on the rigid body’s actual shape collision volume.

Actual shape collisions work best on high-resolution geometry: the more triangles, the better. An advantage of using highly tessellated geometry is that the surface normals are smoother, which results in more realistic-looking collisions.

In addition to making sure your collision geometry is detailed enough, you should try to keep the sizes of the facets roughly the same among the rigid bodies; for example, having a rigid body made of very small triangles collide with a rigid body made of very large triangles is probably not going to work very well.

Actual shape collisions also work better on geometry that is thicker or closed—not flat, like a sheet of paper. Grids are generally not a good idea to use: it’s better to use a flattened cube that has some thickness.

Para tener en cuenta cuando crees el proyecto "real".

Re: Crear "montaña" de particulas
« Respuesta #26 en: 08 Noviembre 2007, 13:51:41 »
Siguiendo con el tema inicial, quería apilar o hacer una montaña de bolas. Como la idea inicial era usar un emisor de particulas, con ello el número de instancias de cada bola lo generaba el programa.

Ahora, siguiendo por el camino que Sumatra dijo (usar solo dinamicas), la generación de bolas solo se me ocurre hacerla clonando el objeto, lo que hace que haya un número estático de bolas.

A alguien se le ocurre cómo hacer algo más parecido al emisor de particulas para la generación de las bolas?

Se me olvida decir, que tendré al menos tres tipos de bolas o pelotas diferentes. Estoy pensando en meterlas en un modelo y hacer instancias, o en un grupo y ver si se puede clonar el grupo.

Fijate si esto te sirve, no lo probe nunca. Sacado de XSIBASE.

>>>>>>>

There you go. This is JScript. Just select a bunch of objects and you
get a particle cloud which you can drive with any forces. Currently the
script only transfers the objects' positions to the particles, not their
rotations (yep, I have been lazy). In other words, if your objects have
rotation applied, the particles will reset them to 0/0/0, so do a freeze
rotation beforehand if this applies to your scene.
If you want to combine this with RBDs, you can make the objects passive
RBDs and simply switch them to active at any time you like, the RBD
engine will instantly take over and make the objects leave their
particle trails.

Hope that helps, cheers!

  -André
-
/*========================================================
"Selection To Particles" / André Adam
Constrains a selection of objects to a newly created particle cloud.
Resets the objects rotation in the current implementation!
========================================================*/


//Create a particle type for later use
var oPTypeRtn = CreateParticleType(siBillboardType);
var oPType = oPTypeRtn.Value("Output");

//Create an empty particle cloud and get its primitive
var oCloud = ActiveSceneRoot.AddParticleCloud(oPType, "Sketched Particles");
var oPrimitive = oCloud.ActivePrimitive;

//Copy the selection into a new collection to avoid trouble with selection changes
var cSel = Selection;
var cCopySel = new ActiveXObject("XSI.Collection");
cCopySel.AddItems(cSel);

//Create an empty array and fill it with position data from selected objects
var aPos = new Array();
for(var i=0; i<cCopySel.Count; i++){
aPos.push(cCopySel(i).Kinematics.Global.Transform.PosX);
aPos.push(cCopySel(i).Kinematics.Global.Transform.PosY);
aPos.push(cCopySel(i).Kinematics.Global.Transform.PosZ);
}

//Create particles in the cloud
oPrimitive.AddParticles(cCopySel.Count, oPType);
//Position particles in the cloud
oPrimitive.Particles.PositionArray = aPos;

//Create a new cloud using the old one as an initial state; the new cloud owns simulation properties
var oInitialStateCloud = CreateParticleCloud(oCloud)(0);
oInitialStateCloud.Name = "Simulation Particles";

//Make particles live forever
oCloud.Properties("Initial State Property").Parameters("liveforever").Value = true;

//Create clusters from the new cloud's particles and constrain the former selected objects to them
var oGeo = oInitialStateCloud.ActivePrimitive.Geometry;
for(i=0; i<cCopySel.Count; i++){

//Create cluster
var oCluster = oGeo.AddCluster(siVertexCluster, cCopySel(i).Name, (i));

//Create constraint and set tangent and upvectors
var oConstraint = cCopySel(i).Kinematics.AddConstraint("ObjectToCluster", oCluster);
oConstraint.Parameters("tangent").Value = true;
oConstraint.Parameters("dirx").Value = 0;
oConstraint.Parameters("diry").Value = 0;
oConstraint.Parameters("dirz").Value = 1;

oConstraint.Parameters("upvct_active").Value = true;
oConstraint.Parameters("upx").Value = 1;
oConstraint.Parameters("upy").Value = 0;
oConstraint.Parameters("upz").Value = 0;
}

Unaided

  • ***
  • 3293
Re: Crear "montaña" de particulas
« Respuesta #27 en: 08 Noviembre 2007, 15:25:00 »
Si, leí ese post pero no entiendo el script, y me parece demasiado complicado para lo que quiero hacer.

Re: Crear "montaña" de particulas
« Respuesta #28 en: 08 Noviembre 2007, 15:44:12 »
Si, leí ese post pero no entiendo el script, y me parece demasiado complicado para lo que quiero hacer.
Bueno, una solucion de pocos clicks no vas a encontrar, recuerda que XSI no es el mejor soft para dinamicas y simulaciones. Si quieres algo simple duplica tus 3 bolas por la cantidad que quieras, le aplicas RBD, simulas, y luego mueves algunas bolas para dejarlo mejor acomodado, al fin y al cabo solo necesitas una imagen fija, no una animacion (ahi si se complicaria buscar una solucion "simple").

Unaided

  • ***
  • 3293
Re: Crear "montaña" de particulas
« Respuesta #29 en: 08 Noviembre 2007, 19:37:41 »
Bueno, sigo teniendo problemas con las dinámicas. Después de clonar las pelotas y estar posicioando, poniendo y quitando RBs, no sé porqué hay un tipo de pelotas (las amarillas) las cuales algunas de ellas colisionan (ok) y otras atraviesan.
Agrego los RBs con la linea de script, CreateActiveRigidBody("ball_*"); y aplico el tipo de bounce sphere SetValue("ball_*.RigidBodyProp.colltype", 1, null);

http://www.sendmefile.com/00593231
« Última modificación: 08 Noviembre 2007, 20:06:41 por Unaided »