En Houdini, digamos que quiero hacer una copia de un suelo con un número determinado de objetos encima. O sea, muchos suelos iguales, pero con un número aleatorio de objetos encima.
De la box original selecciono los puntos interiores de su cara superior (la que apunta a +z). Vale.
Luego agrego un delete SOP para borrar el resto de puntos y uso la selección como template para un copy SOP.
Ahora, ¿cómo hago que el número de objetos (para el ejemplo, esferas) que se copien encima del box sea aleatorio por instancia? Con el copy stamp, claro, pero ¿dónde colocarlo y con que expresión? Gracias.
Para lograr un número aleatorio de esferas por cada suelo en Houdini, el método más directo y actual es usar un For-Each Loop con Copy to Points y controlarlo con atributos aleatorios. El Copy Stamp está obsoleto.
Primero, prepara tu geometría de suelos. Si tienes múltiples suelos, asegúrate de que cada uno sea una pieza separada o un grupo. Crea un Attribute Wrangle en modo Detail (sobre toda la geometría) para definir el número máximo de esferas por suelo. Por ejemplo, escribe @max_spheres = 5;.
Luego, agrega un For-Each Loop en modo Piece (iterar sobre cada suelo). Dentro del loop, el primer nodo debe ser un Attribute Wrangle en modo Detail. Aquí, genera un número aleatorio entero para ese suelo específico. Usa la variable @iteration como semilla. La expresión sería algo como @num_spheres = int(rand(@iteration + 456) * @max_spheres) + 1;. Esto da un número entre 1 y el máximo.
Después, en el mismo loop, añade un Scatter SOP. En el parámetro Force Count, activa la expresión y escribe detail(-1, "num_spheres", 0). Esto leerá el atributo que creaste y esparcirá exactamente ese número de puntos en la superficie de ese suelo en particular. Conecta la entrada del Scatter a la geometría del suelo que está siendo procesada en la iteración.
A continuación, dentro del loop, agrega un nodo Sphere (o tu objeto a copiar) y finalmente un Copy to Points SOP. Conecta la esfera a la primera entrada y los puntos del Scatter a la segunda. Esto copiará la esfera en cada punto generado aleatoriamente para ese suelo.
El loop se repetirá por cada suelo, generando un num_spheres aleatorio diferente en cada iteración y esparciendo esa cantidad de puntos. Al salir del loop, tendrás todos los suelos con un número aleatorio de esferas en cada uno.