ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΡΠ»ΠΎΠ²Π°ΡΠ΅ cameras ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π»ΠΈ ΠΎΠ½Π° ΡΠΆΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΠ»Π΅Π½Π΄Π΅ΡΠ°. ΠΡΠ»ΠΈ ΡΡΠΎ ΡΠ°ΠΊ, ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΠΈΠΌΠ΅Π΅Ρ Π»ΠΈ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΠ»Π΅Π½Π΄Π΅ΡΠ° ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ Π½ΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΠ°ΠΌΠ΅ΡΡ. ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΡΠΈΠ½ΠΎΠΉ, ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ (Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ), ΠΈ Π°ΡΡΠΎΡΠΈΠΈΡΡΠ΅ΠΌ Π΅Π³ΠΎ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° link():
for cam in cameras:
try:
ob = Object.Get(cam)
camob = ob.getData()
if camob == None:
camob = Camera.New('persp',cam)
ob.link(camob)
ΠΡΠ»ΠΈ ΡΠ°ΠΌ Π΅ΡΡ Π½Π΅ Π±ΡΠ»ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΈ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ Ρ Π½ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΠ°ΠΌΠ΅ΡΡ:
except ValueError:
ob = Object.New('Camera',cam)
Scene.GetCurrent().link(ob)
camob = Camera.New('persp',cam)
ob.link(camob)
ΠΡ Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ, ΠΏΠΎΠ²ΠΎΡΠΎΡ, ΠΈ Π°ΡΡΠΈΠ±ΡΡ lens. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ ΡΠ³Π»Ρ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° Π²ΡΡΠ°ΠΆΠ°ΡΡΡΡ Π² ΡΠ°Π΄ΠΈΠ°Π½Π°Ρ , ΡΠ°ΠΊ ΡΡΠΎ ΠΌΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ ΠΈΡ ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½ΡΡ Π³ΡΠ°Π΄ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π² Π½Π°ΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ (Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ). ΠΡ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΠΌ, Π²ΡΠ·ΡΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Redraw() (ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ), ΡΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ:
ob.setLocation(cameras[cam][0])
ob.setEuler([radians(a) for a in cameras[cam][1]])
camob.lens=cameras[cam][2]
Blender.Redraw()
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ run(), ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ Π²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π²ΠΌΠ΅ΡΡΠ΅. ΠΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π°ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΡΠΈΠΊΠ»ΠΎΠΌ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡ ΠΈΠΌΠ΅Π½ ΠΊΠ°ΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΎΡΡΠ΅Π½Π΄Π΅ΡΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π²ΠΈΠ΄ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° Π² ΡΠΏΠΈΡΠΎΠΊ (Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ):
def run():
ob = Scene.GetCurrent().objects.active
cameras = ('Top','Right','Front','Free')
frame(cameras,ob.getBoundBox())
files = []
for cam in cameras:
files.append(render(cam))
ΠΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΠΌ ΡΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠΎΡ ΠΆΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΡΡΠΎ ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π²ΠΈΠ΄Ρ, ΠΈ Π½Π°Π·ΠΎΠ²ΡΠΌ Π΅Π³ΠΎ result.png:
outfile = os.path.join(os.path.dirname(
files[0]),'result.png')
ΠΡ Π·Π°ΡΠ΅ΠΌ Π½Π°Π·ΡΠ²Π°Π΅ΠΌ Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ paste(), ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠΌΡΠ½ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΡΠ°Π·Π²ΡΡΠ½ΡΡΡΠΉ Π² ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ Π·Π²Π΅Π·Π΄ΠΎΡΠΊΠ° (*), ΠΈ, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΡΡΠΈΡ , Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΠ°ΠΉΠ» ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΊΠ°ΠΊ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΠ»Π΅Π½Π΄Π΅ΡΠ° ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π² ΠΎΠΊΠ½Π΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ (Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ Π½ΠΈΠΆΠ΅). Π€ΡΠ½ΠΊΡΠΈΡ reload (ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠ°) Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΡΡΠΎΠ±Ρ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠΈΡΡΡΡ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠ°ΠΌΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ:
paste(*files, output=outfile)
im=Image.Load(outfile)
bpy.data.images.active = im
im.reload()
Window.RedrawAll()
Π€ΡΠ½ΠΊΡΠΈΡ run() ΡΠΌΡΡΠ»Π΅Π½Π½ΠΎ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΊΠ°ΠΌΠ΅Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Ρ ΠΎΡΠ΅ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ°ΠΌ. Π‘Π°ΠΌ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΊΡΠΈΠΏΡ Π·Π°Π±ΠΎΡΠΈΡΡΡ ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΊΠ°ΠΌΠ΅Ρ, Π½ΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΡ. ΠΠΎΡΠ»Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, Π΅ΡΠ»ΠΈ ΡΠΊΡΠΈΠΏΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΠΎ, ΠΎΠ½ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ run:
if __name__ == "__main__":
createcams()
run()
ΠΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΊΠ°ΠΊ combine.py Π² ΡΠ°ΠΉΠ»Π΅ combine.blend.
Π‘ΠΊΡΠΈΠΏΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
1. ΠΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ Π²Π°Ρ ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ Π² Π½Π°ΡΠ°Π»ΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ (ΠΏΠΎΠ·ΠΈΡΠΈΡ (0, 0, 0)).
2. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ.
3. ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ combine.py.
Π‘ΠΊΡΠΈΠΏΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Alt + P, Π½ΠΎ ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π΅Π³ΠΎ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ scripts ΠΠ»Π΅Π½Π΄Π΅ΡΠ°, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΠΈΠ· ΠΌΠ΅Π½Ρ Scripts | Render.
Now, strip β ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΈΠ½ΠΎΠ»Π΅Π½ΡΡ ΠΈΠ· Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ
ΠΠΎΠ½ΡΠ°ΠΆ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠ°ΠΌΠ΅Ρ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠΎΡΠ΅ΠΊ Π·ΡΠ΅Π½ΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ - ΠΏΡΠΎΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², Π³Π΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Ρ Π² Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅. ΠΡΡΠ³ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ - ΠΊΠΎΠ³Π΄Π° ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΊΠ°Π΄ΡΡ ΠΈΠ· Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Ρ Π½Π°Ρ Π½Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΊ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌ Π΄Π»Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ. Π ΡΠ°ΠΊΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅Π΅ Π½Π° ΠΊΠΈΠ½ΠΎΠ»Π΅Π½ΡΡ, Π³Π΄Π΅ ΠΌΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄Π΅ΡΡΡΠΎΠ³ΠΎ ΠΊΠ°Π΄ΡΠ°, Π½Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΌ Π»ΠΈΡΡΠ΅. ΠΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ.
Π₯ΠΎΡΡ ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΡΠ΅ΠΌ ΠΏΡΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π²ΠΈΠ΄Π°Ρ ΠΊΠ°ΠΌΠ΅Ρ, ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΈΠ½ΠΎΠΏΠ»ΡΠ½ΠΊΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΠΎΡ ΠΎΠΆ.
ΠΠ΅ΡΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ, Π±ΡΠ΄Π΅Ρ strip() (Π»Π΅Π½ΡΠ°), ΠΊΠΎΡΠΎΡΠ°Ρ Π±Π΅ΡΠ΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠΌΡΠ½ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ Π΄Π°Π½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π’ΡΠ΅ΡΠΈΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ - cols, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π² ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ½ ΡΠ°Π²Π΅Π½ ΡΠ΅ΡΡΡΡΠΌ, Π½ΠΎ Π΄Π»Ρ Π΄Π»ΠΈΠ½Π½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΠΈΡ Π½Π° Π³ΠΎΡΠΈΠ·ΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ Π±ΡΠΌΠ°Π³Π΅, ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π΄Π΅ΡΡ Π±ΠΎΠ»ΡΡΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ. Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Image ΠΠ»Π΅Π½Π΄Π΅ΡΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
ΠΡ ΡΠ½ΠΎΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠΎΠ΄ΡΠ»Ρ pim, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠΌ Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»Ρ PIL, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΄ΠΎΡΡΡΠΏΠ΅Π½, ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° Π½Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, Π΅ΡΠ»ΠΈ PIL Π½Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½. ΠΠ°ΠΆΠ½ΡΠ΅ ΠΎΡΠ»ΠΈΡΠΈΡ ΠΎΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π²ΡΠ΄Π΅Π»Π΅Π½Ρ. ΠΠ΅ΡΠ²Π°Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π½Π°Ρ ΡΠ°ΡΡΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ Π²ΡΡΠΈΡΠ»ΡΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΈΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΡΡΠΎΠΊ ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΏΠ»ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π΄Π»Ρ ΡΠ²Π΅ΡΠ½ΡΡ ΠΎΠΊΠ°Π½ΡΠΎΠ²ΠΎΠΊ Π²ΠΎΠΊΡΡΠ³ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. ΠΡΠΎΡΠ°Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π½Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, Π³Π΄Π΅ ΠΌΡ Π²ΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π² ΡΠ΅Π»Π΅Π²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅:
def strip(files,name='Strip',cols=4):
rows = int(len(files)/cols)
if len(files)%int(cols) : rows += 1
im = pim.open(files.pop(0))
w,h= im.size
edge=2
edgecolor=(0.0,0.0,0.0)
comp = pim.new(im.mode,
(w*cols+(cols+1)*edge,
h*rows+(rows+1)*edge),
edgecolor)
for y in range(rows):
for x in range(cols):
comp.paste(im,(edge+x*(w+edge),edge+y*(h+edge)))
if len(files)>0:
im = pim.open(files.pop(0))
else:
comp.save(name,format='png')
return Image.Load(name)
Π€ΡΠ½ΠΊΡΠΈΡ render(), ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅ΠΌΡΡ ΠΊΠ°Π΄ΡΠΎΠ² Π² Π²ΠΈΠ΄Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈ ΡΠ΅Π½Π΄Π΅ΡΠΈΡ Π»ΡΠ±ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ°Π΄ΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΌ ΠΊΠ°Π΄ΡΠ°ΠΌΠΈ. ΠΡΠΈ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΠΊΠ°Π΄ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°Π΄Π°Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π² ΠΏΠ°Π½Π΅Π»ΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΡΠ΅Π½Π΄Π΅ΡΠ°. ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠ΅Π½Π΄Π΅ΡΠ° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΡΠ°Π³Π°, Π½ΠΎ ΡΡΠ° Π²Π΅Π»ΠΈΡΠΈΠ½Π° Π½Π΅ Π΄ΠΎΡΡΡΠΏΠ½Π° Π² API ΠΠΈΡΠΎΠ½Π°. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ·Π±ΡΡΠΎΡΠ½Π΅Π΅, ΡΠ΅ΠΌ Π½Π°ΠΌ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΈΠΊΠ», ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π½Π΄Π΅ΡΠΈΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΊΠ°Π΄Ρ (Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅) Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΡΠΌΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° renderAnim(). Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ startFrame ΠΈ endFrame ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΠ΅Π½Π΄Π΅ΡΠ° (ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅), Π½ΠΎ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΡΠΌΠΈ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΡΠΈ Π°ΡΡΠΈΠ±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠΎΠΌ ΡΠΏΠΈΡΠΊΠ° ΠΈΠΌΡΠ½ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΡΡΠ΅Π½Π΄Π΅ΡΠ΅Π½Π½ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ Π½Π΅ Π½ΡΠΆΠ΄Π°Π»ΠΈΡΡ Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΠΏΡΠΎΠΏΡΡΠΊΠ°, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π²ΡΠ·ΠΎΠ² render() Π²ΡΠ·ΠΎΠ²ΠΎΠΌ renderAnim():
def render(skip=10):
context = Scene.GetCurrent().getRenderingContext()
filenames = []
e = context.endFrame()
s = context.startFrame()
context.displayMode=0
for frame in range(s,e+1,skip):
context.currentFrame(frame)
context.startFrame(frame)
context.endFrame(frame)
context.renderAnim()
filenames.append(context.getFrameFilename())
context.startFrame(s)
context.endFrame(e)
return filenames
ΠΠΎΡΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΠΌ ΡΠΊΡΠΈΠΏΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ render(), ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΈ strip(), ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈΡ . Π Π΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΠ»Π΅Π½Π΄Π΅ΡΠ° ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ (reload) Π΄Π»Ρ Π΅Π³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½Π΅, Π΅ΡΠ»ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΡΠ°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠΆΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°Π»ΠΎ, Π·Π°ΡΠ΅ΠΌ Π²ΡΠ΅ ΠΎΠΊΠ½Π° ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΡΠ²Π°ΡΡΡΡ (Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ):
def run():
files = render()
im=strip(files)
bpy.data.images.active = im
im.reload()
Window.RedrawAll()
if __name__ == "__main__":
run()
ΠΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΊΠ°ΠΊ strip.py Π² ΡΠ°ΠΉΠ»Π΅ combine.blend.
Π‘ΠΎΠ·Π΄Π°ΡΡ Π»Π΅Π½ΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΠΊΠ°Π΄ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
1. Π‘ΠΎΠ·Π΄Π°ΡΡ Π²Π°ΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ. (ΠΠ³Π°, ΡΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠ½ΠΊΡ ;) -ΠΏΡΠΈΠΌ. ΠΏΠ΅Ρ.)
2. ΠΠ°ΠΏΡΡΡΠΈΡΡ strip.py ΠΈΠ· ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°.
3. ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ Π² ΠΎΠΊΠ½Π΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° UV/image.
4. Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎ Π²Π°ΡΠ΅ΠΌΡ Π²ΡΠ±ΠΎΡΡ.