mookie Napisano 27 Listopad 2015 Napisano 27 Listopad 2015 Witam; mam problem z eksportem cząstek/obiektów generowanych z ruchomego, deformowanego Plane'a (przesuwający się emiter wypluwający sfery). Jak przenieść taką symulację do Maxa? Próbowałem Particles Instance, opcji export animation dla .obj ale nic nie działa. Może napisanie skryptu, który co klatka convertowałby cząstki na obiekty i zapisywał jako .obj, nie byłby zbyt skomplikowanym zadaniem? Dodam, że muszę przeprowadzić taka operację dla około 300 klatek dość ciężkiego mesha.
szczuro Napisano 27 Listopad 2015 Napisano 27 Listopad 2015 takie cos da rade ? import bpy firstFrame = 0 lastFrame = 10 exportName = "frame" dirPath = "d:\\" extension = ".obj" def exportSelected(fileName): bpy.ops.export_scene.obj( filepath=dirPath + fileName + extension, use_selection=True ) active = bpy.context.active_object for frameNumber in range(firstFrame,lastFrame+1): bpy.context.scene.frame_current = frameNumber bpy.ops.object.duplicates_make_real() exportSelected(exportName+str(frameNumber)) active.select = False # change this line with export line above to export without emiter bpy.ops.object.delete(use_global=False) active.select = True
mookie Napisano 28 Listopad 2015 Autor Napisano 28 Listopad 2015 (edytowane) Szczuro, działa prawie idealnie! Wielkie dzięki za czas i pomoc! Mam tylko 2 problemy związane z tym skryptem; czy jest możliwość, aby nie był eksportowany obiekt emitujący cząstki (nie wiem, na przykład mogę dać mu modyfikator MASK i byłoby fajnie, gdyby był zaapplykowany po eksporcie)? I czy ustawienia eksportu .obj mogłyby być (te domyślne) zmienione na: Objects as Obj Groups (domyślnie - objects) i aktywne Keep vertex order? Wszystko działa IDEALNIE, ale po imporcie do maxa pojawiają się dodatkowe cząstki obok generowanych, które psują efekt (po imporcie do Blendera ich nie ma więc jest to kwestia importera maxa). Byłbym wdzięczny! Edytowane 28 Listopad 2015 przez mookie
szczuro Napisano 29 Listopad 2015 Napisano 29 Listopad 2015 (edytowane) masz tu wszystkie opcje exportera obj ;) mam nadzieje ze wlaczyłem wlasciwe jesli nie przełacz sobie sam. Mam jeszcze problem z nieexportowaniem emitera to co myslalem ze zadziala wywala exporter def exportSelected(fileName): bpy.ops.export_scene.obj( filepath=dirPath + fileName + extension, use_selection=True, group_by_object=True, keep_vertex_order=True, # other default check_existing=True, axis_forward='-Z', axis_up='Y', filter_glob="*.obj;*.mtl", use_animation=False, use_mesh_modifiers=True, use_edges=True, use_smooth_groups=False, use_smooth_groups_bitflags=False, use_normals=True, use_uvs=True, use_materials=True, use_triangles=False, use_nurbs=False, use_vertex_groups=False, use_blen_objects=True, group_by_material=False, global_scale=1, path_mode='AUTO') edit:// ok cały kod, wywala sie jak po odznaczeniu emitera nie ma co exportowac (nie ma żadnych particli) i nie wiem jak to obejść import bpy firstFrame = 1 lastFrame = 10 exportName = "frame" dirPath = "d:\\" extension = ".obj" def exportSelected(fileName): bpy.ops.export_scene.obj( filepath=dirPath + fileName + extension, use_selection=True, group_by_object=True, keep_vertex_order=True, # other default check_existing=True, axis_forward='-Z', axis_up='Y', filter_glob="*.obj;*.mtl", use_animation=False, use_mesh_modifiers=True, use_edges=True, use_smooth_groups=False, use_smooth_groups_bitflags=False, use_normals=True, use_uvs=True, use_materials=True, use_triangles=False, use_nurbs=False, use_vertex_groups=False, use_blen_objects=True, group_by_material=False, global_scale=1, path_mode='AUTO') active = bpy.context.active_object for frameNumber in range(firstFrame, lastFrame + 1): bpy.context.scene.frame_current = frameNumber bpy.ops.object.duplicates_make_real() bpy.context.scene.update() active.select = False exportSelected(exportName+str(frameNumber)) bpy.ops.object.delete(use_global=False) active.select = True Edytowane 29 Listopad 2015 przez szczuro
mookie Napisano 30 Listopad 2015 Autor Napisano 30 Listopad 2015 (edytowane) Dzięki szczuro! Jesteś niewiarygodnie pomocny! Jednak w dalczym ciągu co kilka klatek, a nawet i przez kilkanaście, pojawiają się zbędne cząstki, bądź wszystkie znikają kosztem innej; czy można by dodać gdzieś linijkę, żeby cząstki łączyć do jednego obiektu? Joinować je w całość? Może wtedy uniknę tego paskudnego buga? PS Niestety to jest feler generowany przez Blendera, bo on sam importuje dodatkowe zbędne cząsteczki Edytowane 30 Listopad 2015 przez mookie
szczuro Napisano 30 Listopad 2015 Napisano 30 Listopad 2015 nie mam teraz czasu na testy, jak nie zadziała coś wieczorem podrzuce: spróbuj wstawić bpy.ops.object.join() pod linijka active.select = False
szczuro Napisano 30 Listopad 2015 Napisano 30 Listopad 2015 import bpy firstFrame = 1 lastFrame = 10 exportName = "frame" dirPath = "d:\\" extension = ".obj" def exportSelected(fileName): bpy.ops.export_scene.obj( filepath=dirPath + fileName + extension, use_selection=True, #group_by_object=True, #keep_vertex_order=True, # other default check_existing=True, axis_forward='-Z', axis_up='Y', filter_glob="*.obj;*.mtl", use_animation=False, use_mesh_modifiers=True, use_edges=True, use_smooth_groups=False, use_smooth_groups_bitflags=False, use_normals=True, use_uvs=True, use_materials=True, use_triangles=False, use_nurbs=False, use_vertex_groups=False, use_blen_objects=True, group_by_material=False, global_scale=1, path_mode='AUTO') def createTempEmpty(): me = bpy.data.meshes.new("mesh") ob = bpy.data.objects.new("obj", me) scn = bpy.context.scene scn.objects.link(ob) scn.objects.active = ob ob.select = True active = bpy.context.active_object for frameNumber in range(firstFrame, lastFrame + 1): bpy.context.scene.frame_current = frameNumber bpy.ops.object.duplicates_make_real() bpy.context.scene.update() active.select = False createTempEmpty() bpy.ops.object.join() exportSelected(exportName+str(frameNumber)) bpy.ops.object.delete(use_global=False) active.select = True bpy.context.scene.objects.active = active
mookie Napisano 30 Listopad 2015 Autor Napisano 30 Listopad 2015 Szczuro, jesteś genialny, ale jeszcze tylko jeden detal, o ile wystarczy Ci cierpliwości. Rzuć okiem na link, jest super, ale np. po użyciu tego skryptu na moim emiterze np. w 12 klatce i kolejnych pojawia się sześcian daleko poza emiterem i w kolejnych się zbliża, zupełnie, jakby do Makes Duplicate Real dodawany był jakiś dodatkowy obiekt, niewidoczny na scenie w czasie symulacji, ale generujący się w czasie applykowania Particles (tudzież ich konwertowania na Meshe). Skąd to ustrojstwo się bierze? Myślałem, że to kwestia łączenia tych cząstek, ale to musi być duplikowana chyba jakaś dodatkowa, zbędna geometria (jak gdyby Cube będący tylko wskazaniem do wykorzystywania w systemie cząstek)... http://speedy.sh/C4XRg/test-particles.zip
mookie Napisano 1 Grudzień 2015 Autor Napisano 1 Grudzień 2015 (edytowane) Działa! Szczuro, dzięki wielkie za pomoc, z Twoim skryptem pomógł mi blenderowiec z pracy, Andrzej, za co z tego miejsca chylę przed nim czoła. Przed Wami obydwoma! Poprawny skrypt wygląda tak: import bpy firstFrame = 1 lastFrame = 100 exportName = "frame" dirPath = "d:\\test\" extension = ".obj" active = bpy.context.active_object def exportSelected(fileName): bpy.ops.export_scene.obj( filepath=dirPath + fileName + extension, use_selection=True, #group_by_object=True, keep_vertex_order=True, # other default check_existing=True, axis_forward='-Z', axis_up='Y', filter_glob="*.obj;*.mtl", use_animation=False, use_mesh_modifiers=True, use_edges=True, use_smooth_groups=False, use_smooth_groups_bitflags=False, use_normals=True, use_uvs=True, use_materials=True, use_triangles=False, use_nurbs=False, use_vertex_groups=False, use_blen_objects=True, group_by_material=False, global_scale=1, path_mode='AUTO') def createTempEmpty(): me = bpy.data.meshes.new("mesh") ob = bpy.data.objects.new("obj", me) scn = bpy.context.scene scn.objects.link(ob) scn.objects.active = ob ob.select = True active = bpy.context.active_object frameNumber = firstFrame for frameNumber in range(firstFrame, lastFrame+1): bpy.context.scene.frame_set(frameNumber) bpy.context.scene.update() bpy.ops.object.duplicates_make_real() active.select = False createTempEmpty() bpy.ops.object.join() exportSelected(exportName+str(frameNumber)) print ("%d" % frameNumber ) bpy.ops.object.delete(use_global=False) frameNumber += 1 active.select = True Edytowane 2 Grudzień 2015 przez mookie
szczuro Napisano 1 Grudzień 2015 Napisano 1 Grudzień 2015 (edytowane) super ze udało sie dojść bo ja wlasnie nie mogłem znaleźć sposobu na obejscie ;) edit: ok teraz czaje to miało być bpy.context.scene.frameSet(frame) a nie bpy.context.scene.frame_current = frame Edytowane 1 Grudzień 2015 przez szczuro
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się