Gracias Gracias:  0
Resultados 1 al 3 de 3

Tema: Melting Script - Porque elimina pocas particulas

  1. #1
    Miembro
    Fecha de ingreso
    Feb 2009
    Ubicación
    Barcelona
    Mensajes
    85

    Melting Script - Porqué elimina pocas partículas?

    Hola!,

    estoy haciendo un script para hacer el derretido de unas letras. La idea es simple; uso dos emisores, uno para llenar el objeto y al cual luego haré un freeze a sus partículas y otro que generara las nuevas partículas partiendo de la posición de las partículas des primer emisor.

    De momento funciona más o menos, pero me encuentro que elimina muy pocas partículas en cada frame y además pilla más partículas de la parte de abajo.

    alguien tiene experiencia con scripting de RealFlow?, si me pudierais ayudar lo agradecería mucho.

    El script es este (tengo algunas partes como comentarios de las pruebas que he hecho, jeje):

    #--------------------------------------------------
    # Function: onSimulationBegin
    #--------------------------------------------------
    def onSimulationBegin():

    emitter = scene.getEmitter("lleno2")
    letra = scene.getObject("T")
    particle = emitter.getFirstParticle()

    while (particle):
    particle.freeze()
    particle = particle.getNextParticle()

    letra.setParameter("Simulation", "Inactive")

    #--------------------------------------------------
    # Function: onSimulationStep
    #--------------------------------------------------

    def onSimulationStep():

    emitter=scene.getEmitter("lleno2")
    foam=scene.getEmitter("foam")

    removeList = []

    particles = emitter.getParticles()

    for particle in particles:
    if ( particle.id == 0 ):
    break;
    neighbors = particle.getNeighbors(.025)
    id=particle.getId()
    pos=particle.getPosition()
    vel=particle.getVelocity()
    #count = 0
    #i=0
    #if (i <=1000):
    threshold = 5000
    if (len(neighbors) > threshold) and (len(neighbors)!=0) :
    pos = particle.getPosition()
    vel = particle.getVelocity()
    removeList.append(particle.getId())
    foam.addParticle(pos,vel)

    if (len(removeList) > 0):
    for i in range(len(removeList)):
    lleno2.removeParticle(removeList[i])

    #if (len(neighbors) >0.01):
    #count=count +1
    #i=i+1
    #foam.addParticle(pos, vel)
    #lleno2.removeParticle(id)
    #else:
    #scene.message(str(count))

    #id=particles.getId()
    #pos=particles.getPosition()

    #while (particles):

    #if (neighbors > 1):
    #lleno.removeParticle(id)
    #foam.addParticle(pos)
    #particles.getNext.Particle()

    #--------------------------------------------------
    # Function: onSimulationFrame
    #--------------------------------------------------
    def onSimulationFrame():
    pass

    #--------------------------------------------------
    # Function: onSimulationEnd
    #--------------------------------------------------

    def onSimulationEnd():
    pass

    #--------------------------------------------------
    # Function: onChangeToFrame
    #--------------------------------------------------

    def onChangeToFrame():
    pass

    Si hace falta puedo enviar el archivo que uso para hacer el test, tiene pocas partículas y poca resolución. Por eso parece que elimina más partículas, peor en cuando quieres ponerlo en un proyecto serio... la cosa cambia.

    Un saludo y muchas gracias
    Un saludo a todos! y siempre muy agradecido!.

    www.thevode.com

  2. #2
    Burninating albion Avatar de bealobo
    Fecha de ingreso
    Dec 2004
    Ubicación
    Teatown
    Mensajes
    1,868

    Re: Melting Script - Porqué elimina pocas partículas?

    Hola,

    pues a ver no se muy bien por que no elimina muchas partículas. Cuantos substeps tienes igual es que tienes muy pocos, prueba a poner el código en onSimulationFrame a ver que tal.
    Luego veo que te sobran líneas en tu script. si tu defines una variable en onSimulationBegin, no la tienes que volver a definir, la puedes llamar directamente, lo mismo si la defines fuera de un loop, no la tienes que volver a definir dentro del loop. Quizás las tengas que definir como variables globales (no lo he probado), pero merece la pena porque así haces el código más eficiente.

    Una cosa, puedes vovler a pegar el código con una etiqueta CODE? es muy difícil llerlo sin las indentaciones, quizás tengas algún loop mal, pero no puedo saberlo.
    Última edición por bealobo; 14-06-2010 a las 12:53
    E moet roeien met de riemen die je hebt.

  3. #3
    Miembro
    Fecha de ingreso
    Feb 2009
    Ubicación
    Barcelona
    Mensajes
    85

    Re: Melting Script - Porqué elimina pocas partículas?

    Hola!,

    perdona, es que he estado últimamente con este proyecot taaan liado que... pufff.

    Muchas gracia spor responder, jeje.

    Ahora que ya entregué el trabajo sigo investigando por mi cuenta y he hecho un script algo más corto. Parece que funciona bien, no pilla las partículas pro orden, sino que lo hace por númeor de vecinos. EL problema es que tarda horas para un solo step.

    Est empieza a hacer que me plantee dudas sobre como funcionan las listas en RF. Si la creo en simulationstep creo que cada step vuelve a mirar todas las partcículas para buscar cual eliminar. YO creo que debe haber alguna forma de crear la lista al inicio, con toda la información de las partículas y luego cada step ir obteniéndolas y borrandolas de esta lista.

    En realflowforum tengo unos hilos abiertos con mis avances y uno con lo que entregué al final.

    Código:
    #--------------------------------------------------
    # Function: onSimulationBegin 
    #--------------------------------------------------
    def onSimulationBegin():
    
     emitter = scene.getEmitter("V")
     
    
     letra = scene.getObject("Extrude NURBS 0_1")
     particle = emitter.getFirstParticle()
     
     
     while (particle):
     particle.freeze()
     particle = particle.getNextParticle()
     
    
    #--------------------------------------------------
    # Function: onSimulationStep 
    #--------------------------------------------------
    
    def onSimulationStep():
    
     emitter=scene.getEmitter("V")
     foam=scene.getEmitter("foam")
     removeList = []
     particles = emitter.getParticles()
     
     for particle in particles: 
     #particleNext = particle.getNextParticle()
     pos = particle.getPosition()
     vel = particle.getVelocity()
     neighbors = particle.getNeighbors(1/(10*(1000^(1/3)))+0.02)
     scene.message(str(len(neighbors)))
     threshold = 38
     if (len(neighbors) < threshold):
     pos = particle.getPosition()
     vel = particle.setVelocity(0)
     id = particle.getId()
     removeList.append(particle.getId())
     #emitter.removeParticle(particle.getId())
     foam.addParticle(pos,vel)
     if (len(removeList) > 0):
     for i in range(len(removeList)):
     emitter.removeParticle(removeList[i])
    Intento conseguir algo como este:

    General MElt Test


    Luego si me sale bien intentaré añadirle erosión por las partículas que caen.
    Última edición por dpproject; 20-06-2010 a las 15:43
    Un saludo a todos! y siempre muy agradecido!.

    www.thevode.com

Temas similares

  1. Como se elimina un mensaje
    Por Gisela en el foro Ayuda con el uso del foro
    Respuestas: 4
    Último mensaje: 15-01-2010, 11:29
  2. alguna idea para proyecto final En pocas palabras aYU
    Por Beleashar en el foro Todo menos Infografía
    Respuestas: 25
    Último mensaje: 12-08-2004, 20:06
  3. Unas pocas de dudas
    Por Mario en el foro Postproducción
    Respuestas: 1
    Último mensaje: 11-02-2004, 00:19
  4. como hacer un bosque de geometria con pocas caras
    Por cantamanyanas en el foro Materiales y Texturizado
    Respuestas: 1
    Último mensaje: 15-11-2003, 15:45
  5. Hacer un bosque de de geometria con pocas caras
    Por cantamanyanas en el foro Modelado
    Respuestas: 2
    Último mensaje: 11-11-2003, 12:34

Actualmente estos son sus permisos de publicación en el foro.

  • -No puedes crear nuevos temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes responder temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes subir archivos adjuntos al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes editar tus mensajes al no estar registrado o no haber iniciado sesión en el foro.
  •