Napisano 27 Listopad 20159 l 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.
Napisano 27 Listopad 20159 l 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
Napisano 28 Listopad 20159 l Autor 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 20159 l przez mookie
Napisano 29 Listopad 20159 l 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 20159 l przez szczuro
Napisano 30 Listopad 20159 l Autor 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 20159 l przez mookie
Napisano 30 Listopad 20159 l 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
Napisano 30 Listopad 20159 l 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
Napisano 30 Listopad 20159 l Autor 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
Napisano 1 Grudzień 20159 l Autor 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ń 20159 l przez mookie
Napisano 1 Grudzień 20159 l 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ń 20159 l przez szczuro
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto