Problema con gravedad afectando per particle
Hola a todos. Tenía una duda sobre los atributos per particle que esperaba pudieseis resolverme. Tengo un emisor lanzando instancias de 2 objetos diferentes. He puesto en una expresión un random para que vayan saliendo aleatoriamente esos objetos.
Lo que quería era conseguir que cada vez que salga uno de los objetos, le afecte la gravedad que tengo incluida en la escena, y cuando salga el otro, no le afecte.
He intentado añadirlo en la expresión, pero va cambiando la gravedad conforme se van creando, a pesar de que tengo la expresión en runtime After dynamics.
Como podría hacerlo? Gracias a todos.
Por si acaso, dejo el código que tengo puesto de momento.
En runtime After dynamics:
If (particleshape1. Indexp < 1.0){.
Particleshape1.velocity=<<1,0,0>>.
Geoconnector1.resilience=3.
Gravityfield1.magnitude=9.8.
}.
Else{.
Particleshape1.velocity=<<3,0,0>>.
Geoconnector1.resilience=0.
Gravityfield1.magnitude=0.
}.
En creation.
Particleshape1. Indexp = Rand(0,1.9) . Gracias otra vez.
Controlar gravedad por tipo de partícula en Maya con Particle Shape
En Maya, la forma correcta de asignar atributos per particle para controlar la gravedad de forma independiente es no modificar directamente el campo de gravedad global, porque eso afecta a todos los objetos del campo. En lugar de eso, se usa un atributo per particle llamado isDynamic o se ajusta la influencia de los campos sobre cada partícula con el atributo acceleration o mass por partícula.
Primero, creo un atributo por partícula que identifique el tipo de instancia, por ejemplo, tipo, que puede valer 0 o 1. Esto lo puedes asignar en el Creation Expression:
Particleshape1.tipo = rand(0,1);
Luego, en el Runtime After Dynamics, no modifico la magnitud del campo de gravedad global. En su lugar, ajusto la aceleración de cada partícula dependiendo del tipo:
Código:
if (Particleshape1.tipo == 0) {
// Partículas afectadas por gravedad
Particleshape1.acceleration = <<0,-9.8,0>>;
} else {
// Partículas que ignoran la gravedad
Particleshape1.acceleration = <<0,0,0>>;
}
De esta forma, cada partícula tiene su propia aceleración vertical y no afecta al campo de gravedad general. Esto evita que la gravedad cambie para todas las partículas conforme se generan nuevas, y mantiene la aleatoriedad de instancias que ya habías definido. También puedes combinar esto con resistance o mass para ajustar cómo cada partícula responde a la física de la escena.