Автор Тема: fluid simulation  (Прочитано 1820 раз)

Оффлайн ASKR

  • Житель
fluid simulation
« : 03 Июнь 2012, 18:42:01 »
При просчете жидкости таймлайн не движется и это неудобно. Как установить таймлайн на нужное время разобрался - bpy.context.scene.frame_current=%нужное значение%.
Вопрос: как отловить событие что симулятор дожевал кадр? (мониторить в idle папку с просчитанным кешем не хочется - как-то костыльно)

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: fluid simulation
« Ответ #1 : 03 Июнь 2012, 21:51:09 »
... вот так сходу не знаю, но могу посмотреть как оно в сырцах организовано ...
... только через неделю, а то у мну паровоз через час отходит ...
Для Кота

Оффлайн ASKR

  • Житель
Re: fluid simulation
« Ответ #2 : 03 Июнь 2012, 22:05:55 »
<offtop>удачной дороги!  8)</offtop>

буду очень ждать, может направление хоть куда рыть подскажете? (в питоновском апи вроде только в настройках можно поковырятся, а коллбеков не узрел)
поиском по сорцам нашел "wmJob *steve= WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene, "Fluid Simulation", WM_JOB_PROGRESS);"
вот тут: blender-2.63\blender-2.63\source\blender\editors\physics\physics_fluid.c

однако представления не имею как оттуда дергать питон  :o

update:
вот этот код:
Код
import bpy
 
def scene_update(context):
    if bpy.data.objects.is_updated:
        print("One or more objects were updated!")
        for ob in bpy.data.objects:
            if ob.is_updated:
                print("=>", ob.name)
 
bpy.app.handlers.scene_update_post.append(scene_update)
отсюда: "http://wiki.blender.org/index.php/Dev:2.6/Source/Render/UpdateAPI"

успешно палит изменения, но нервничает и по куче других поводов, что печалит. также "print("=>", ob.name)" не выдает ничего, возможно потому как изменения идут не в данных объекта, а в модификаторе.

вкривь и вкось вариант с "bpy.context.scene.frame_current=bpy.context.scene.frame_current+1" работает
« Последнее редактирование: 03 Июнь 2012, 22:49:17 от ASKR »

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: fluid simulation
« Ответ #3 : 09 Июнь 2012, 23:59:35 »
вот еще некоторая информация
 так создается бар информирующий о ходе процесса:
wmJob *steve= WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene, "Fluid Simulation", WM_JOB_PROGRESS);

для которого назначено:
WM_jobs_customdata(steve, fb, fluidbake_free);
WM_jobs_timer(steve, 0.1, NC_SCENE|ND_FRAME, NC_SCENE|ND_FRAME);
WM_jobs_callbacks(steve, fluidbake_startjob, NULL, NULL, fluidbake_endjob);


примечательно, что в качестве параметров передаются указатель на структуру FluidBakeJob, в которой есть значение текущего кадра int current_frame и указатель на сцену scene, однако, насколько понял в самой сцене нет информации о текущем кадре просчета

и после просчета блока меняется номер кадра
glob->setAniCount( glob->getAniCount()  1 );

нужно время еще поразобраться

но вот пока попробовал такой костыль на питоне для одного Fluid domain

Код: python
import bpy

def mupdate(scene):
    global fTest,fOff

    if(fTest):               
        if(fOff<=scene.frame_end):
            print("frame_current",fOff)
            scene.frame_current=fOff
            fOff=fOff 1
        else:
            fTest=False
            fOff=-1
            print("end fTest")

    else:
        if(scene.frame_current==scene.frame_end):
            fTest=True
            print("start fTest")
   
def main():
    global fTest,fOff
    fTest=False
    fOff=-1

    print("start main")
    bpy.app.handlers.frame_change_post.append(mupdate)
   
main()

вот мовик как это работает
https://www.youtube.com/watch?v=Iu8GNS_UAwc
« Последнее редактирование: 10 Июнь 2012, 18:37:53 от sungreen »
Для Кота

 


Яметрика

* По форуму

* Рекламный блок

* Последние вложения

1 (1).png
Скачано: 89
Автор: LEXA ANЭGROWND
blender.png
Скачано: 96
Автор: ipv2007
4.png
Скачано: 127
Автор: hiroyukiss
2.png
Скачано: 146
Автор: hiroyukiss

Скачано: 156
Автор: Dilifa12