XSIforum.com
Foros 3D => Autodesk Softimage => Rigging y Scripting => Mensaje iniciado por: Unaided en 07 Noviembre 2007, 01:26:43
-
Estoy intentando crear una montaña de pelotas con un emisor de particulas. (Ej. tirar azucar sobre una superficie mojada creando montaña.
He puesto un emitter from disc y he instanciado un grupo de objetos esfericos (pelotas varias). Estoy jugando tanto con el valor friction de la superficie colisionador y con el interparticle collision, pero no consigo que se me forme el efecto apilamiento.
¿Dónde andan otros parametros como la friccion entre particulas? O que parámetros debo tocar para conseguir un efecto de apilamiento?
Me importa sobre todo la forma que tenga la montaña por lo que me estoy complicando al hacerlo con un emisor de particulas y no poniendo las pelotas donde me interese, pero siempre me frustro con las particulas, supongo que por eso lo hago :/
-
en lugar de comerte el coco con todos esos parámetros, por qué no creas un recipiente (obstáculo) que les de forma de montaña y no se renderice?
vamos es una idea
-
Eso he terminado haciendo, pero me gustaría saber cómo hacerlo sin recipiente. También porque incluso con recipiente no consigo que se apilen sino incremento en exceso el numero de particulas.
Con exceso me refiero a una cantidad que no se corresponde al tamaño de la particula y su radius para el interpaticle colision. No sé si me explico. Quiero decir que con el tamaño de particula que pongo deberían caber 50 particulas y no más de 1000. Tengo el life forever activado.
He probado tanto con un emisor de tipo fluid como normal, y no consigo que se forme una masa creciente.
-
Estoy viendo que las particulas se solapan entre sí, por más que suba el radius del interparticle colision. No sé si me está tirando de cache, pero tengo puesto el modo Standard No Caching.
-
No creo que apilar arena sea algo tan sencillo que se pueda resolver sólo con un sistema de partículas simples :)
-
No con contenedor ni sin, que no hay forma de llenar un bote de canicas. Siempre se me mezclan las particulas. Parece que ignora el Interparticle Collision. Se hacen hueco entre ellas, en lugar de posicionarse una encima de otra.
-
No es arena, pero si lo fuese la única diferencia evidente es la escala. Propiedades de fricción de superficie es lo que determina el que tienda a desparramarse o a hacer pila, pero con un contenedor debería llenarse.
El emisor genera nuevas particulas, y tengo el life forever activado.
Creo que es mejor el ejemplo de un bote de canicas para lo que quiero hacer.
No acabo de ver la complejidad que ha de necesitar un contenedor, un emisor de particulas con un tamaño, y masa determinados, y un area de influencia, para que sea incapaz de llenar el contenedor sin mezclar particulas.
Ignora los parametros o no sé...
-
Las partículas simplemente toman en consideración un punto, el pivote, si necesitas que considere la forma real debes usar cuerpos rígidos, en producciones muchas veces se combinan las partículas con cuerpos rígidos para obtener esos fantásticos resultados que vemos en el cine (Spiderman 3 por ejemplo).
Yo si le veo complejidad pero de seguro es porque no es mi área y me supera el tema, suerte con la búsqueda O0
-
Voy a ver.
De todos modos, entonces no entiendo para que sirven los parametros del interparticle collision.
Yo no quiero hacer los efectos de spiderman, solo llenar un bote de canicas. Algo increiblemente complicado en XSI.
-
He hecho una esfera, aplicado un active rigid body, seteado el bounce como acual shape, e instanciado el grupo que contiene solo la esfera con el emisor de particulas. No sé si se hace así, pero no colisionan entre si.
Me parece estúpido tener que usar cuerpos rigidos si quiero que sean esferas. El emisor de particulas toma en cuenta un punto en el espacio, pero para algo están los parametros size y interpartcle_colision.radius no???
-
llenar un bote con canicas, hummm recuerdo que en los tutos gratuitos de digital tutors, habia un ejemplo de como llenar un frasco con unas pildoras, bueno almenos eso es lo que recuerdo, y no le veia muy complicado, no se.
-
El tuto al que se refiere Evolve era el de demostración del motor de dinámicas PhysiX o como se escriba. Efectivamente, lo habían hecho con rigid bodies.
Para lo que quiere hacer Unaided yo me centraría en investigar en la linea de las dinámicas y abandonaría la idea de hacerlo con partículas. Por mucho que tenga parámetros que supuestamente me han de resolver la vida, las actuales partículas de XSI me han dado más disgustos que alegrías.
-
Pues nuevamente entonces voy a tener que abandonar el hacer algo con particulas.
No necesito hacerlo con particulas porque es para una imagen estatica, y me importa más la forma de la montaña que el movimiento que hagan.
Si lo hago solo con rigid bodies he de clonar las bolas manualmente, con lo que entonces ya si que no sé si aún será más tonto que lo que ya estaba intentando.
Bueno igualmente lo pruebo con una docena de bolas a ver si me sale.
-
Los rigidbodies de XSI (Ageia physX) van muy bien. Se pueden hacer muchas cosas. (http://softimage.wiki.avid.com/index.php/Fun_With_PhysX)
-
Pues llevo 1 hora con un cilindrio (Passive Rigid Body) un grid (Passive Rigid Body), una esfera (Active Rigid Body), y un Force Gravity, y lo único que me funciona de manera lógica es cuando selecciono la esfera y creo el gravity. Los pasive bodies hacen de obstaculo cuando quieren. He tenido que cambiar al open dynamics engine, para que actue un collide
-
He reiniciado y ahora parece que va, pero no del todo bien. El cilindro es un cilindro con sin la tapa de arriba con las normales hacia adentro y un passive rigid body con actual shape, y la esfera rebota como si estuviese cerrado. Le he dado veintemil veces al set initial state... pero esto va mal.
http://www.sendmefile.com/00593034
-
No va el link. :/
-
No se puede bajar el video.
Quieres pasar esa escena simple asi vemos que puede haber mal?
-
He cambiado las subidivisiones del cilindro (porque la escena comprimida superaba los 100KB) , eliminado el PRB y vuelto a poner, y ahora ni afecta como obstacle.
-
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.
Si veo porque da el error con actual shape te aviso. Saludos!
-
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) ;)
-
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
-
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é....
-
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.
-
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.
-
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".
-
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;
}
-
Si, leí ese post pero no entiendo el script, y me parece demasiado complicado para lo que quiero hacer.
-
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").
-
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
-
No se si es esto lo que quieres, pero esto se hace en menos de un minuto sin script ni nada.
www.animarte-3d.com.ar/Test_canicas.zip
-
Otra version
www.animarte-3d.com.ar/Test_canicas1.zip
-
Si, es eso.
Yo me tirado todo el día de hoy y sigo con problemas. Y las únicas variantes que tengo son esferas de diferente tamaño y que el contenedor es conico. Si con esas dos variables ya tengo problemas de cáculo...
-
No te puedo pasar la escena porque estoy con 6.5, pero si quieres pasame la escena y veo que puede ser.
Si quieres subela aqui o a mi mail pablotesta@animarte-3d.com.ar
-
Bueno ya he borrado el "tobogan" y las pelotas, porque voy a probar colarlas por un tubo vertical. Si se me salen algunas de forma extraña te paso la escena.
-
ok, suerte!
-
No ha habido suerte. Algunas pelotas atraviesan el contenedor.
Dejo la escena del caos aquí: http://www.sendmefile.com/00593248
-
He activado el Continuous Collisions en las propiedades de la simulación y puesto a 0 el Bounce Threshold, y no se escapa ninguna, pero no entiendo muy bien que eos parametros tengan el valor en negativo.
El skin width a -0.05.
De todos modos esto no funciona bien, porque si cambio algun parametro de lapestaña advanced y me "explota" la simulación, cuando vuelvo a poner el valor que estaba antes, siguie "explotando"... ya no vuelve a funcionar bien.
Esto es una cosa que me estresa mucho. Que unas veces 2+2 sean 4 y otras veces 2+2 sea 5,34... parece que hayan usado randoms para programar este programa.
-
A ver... en simulacion para que siempre 2 + 2 sea 4 te aconsejo usar el cache... Y si bien concuerdo que xsi nos brinda diariamente muchas sorpresitas, no siempre es culpa del programa.
Algunos consejos segun la escena
*Cambia el Play Mode a Standard y pon Cache, asi puedes simular y luego mover la linea de tiempo hacia atras sin sorpresas.
*El cilindro, subdividilo mucho, ya que como te puse arriba, cuando usas el modo Actual Shape, es mejor que tenga muchos poligonos... Tambien freeza el objeto antes de aplicar RBD, a veces complica tener operadores funcionando (que en este caso no necesitas)
*El mas importante en este caso, y que seguro este solo te arregla el problema, sube los SubSteps a 20.
Para cambiar la distribucion de las pelotas puedes cambiarle la masa, por ej. si pones en las pelotas de tenis con masa 10 te quedan todas abajo.
Tu problema era que las pelotas mas grandes chocaban a las chiquitas y las sacaban del recipiente.
www.animarte-3d.com.ar/Test_canicas2.zip
-
Pero que choquen no ha de implicar que salgan fuera del collide atravesandolo. No se puede establecer la densidad para el obstacle para que no se rompa?
-
Pero que choquen no ha de implicar que salgan fuera del collide atravesandolo. No se puede establecer la densidad para el obstacle para que no se rompa?
Justamente para eso subes los SubSteps, para que la calculacion sea correcta.
-
Ok, gracias PabloT.
-
Suerte con esto! Avisa cualquier cosa.