Posted November 27, 20159 yr 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.
November 27, 20159 yr 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
November 28, 20159 yr Author 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! Edited November 28, 20159 yr by mookie
November 29, 20159 yr 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 Edited November 29, 20159 yr by szczuro
November 30, 20159 yr Author 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 Edited November 30, 20159 yr by mookie
November 30, 20159 yr 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
November 30, 20159 yr 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
November 30, 20159 yr Author 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
December 1, 20159 yr Author 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 Edited December 2, 20159 yr by mookie
December 1, 20159 yr 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 Edited December 1, 20159 yr by szczuro
Create an account or sign in to comment