Menjalankan Proses Render Secara Offline
17.02.11
Kategori: Animation
Menyambung tulisan saya minggu lalu, kali ini saya akan sedikit membahas beberapa komponen proses render yang dapat kita kendalikan secara offline (melalui baris perintah). Pendeknya tulisan ini bukan berarti hanya sedikit hal yang dapat kita lakukan di Blender melalui script Python.
Dengan API Python Blender seluruh data kontekstual Blender dapat diakses melalui modul bpy.context, termasuk objek Scene aktif dalam variabel bpy.context.scene. Objek tersebut, seperti semua objek bertipe bpy.types.Scene memiliki atribut render bertipe bpy.types.RenderSettings, dan lewat atribut inilah kita dapat mengubah konfigurasi hasil render.
Melihat rincian atribut bpy.types.RenderSettings dapat kita lihat berbagai komponen proses dan hasil render yang dapat kita utak-utik, mulai dari resolusi dan format gambar, sampai jumlah thread yang digunakan untuk render. Karena sedemikian mudahnya mengakses semua setting tersebut, saya tidak akan membahasnya. Cukup atur setting, lalu panggil fungsi bpy.ops.render.render(animation=True) untuk memulai proses render... selesai!
Alih-alih, berikut ini saya hanya akan membahas dua kasus khusus yang tidak dapat langsung ditangani dengan trik pada tulisan sebelumnya.
Render preview (menggunakan OpenGL)
Satu trik khusus membuat kita dapat me-render seluruh film yang tengah kita buat dengan sangat cepat, yaitu render preview. Bayangkan kita dapat segera menyaksikan karya kita, memeriksa kualitas animasi dan narasinya, tanpa perlu menunggu proses render yang terlalu lama. Render preview memanfaatkan pustaka OpenGL yang menggambar seluruh antarmuka Blender termasuk viewport 3D ke layar, sehingga meski ia mengorbankan kualitas visual, jenis render ini dapat dilakukan dengan sangat cepat.
Satu-satunya kendala adalah bahwa jenis render ini tidak dapat langsung dilakukan melalui baris perintah. Blender harus terlebih dahulu memiliki "kanvas" OpenGL, yang artinya proses render harus dimulai saat antarmuka grafis tersedia. Eksekusi perintah render dilakukan dengan injeksi perintah Python, dengan satu-satunya perbedaan adalah fungsi yang dipanggil. Bila render normal dipanggil dengan fungsi bpy.ops.render.render(animation=True), maka render OpenGL dipanggil dengan fungsi
bpy.ops.render.opengl(animation=True, view_context=False)
Parameter view_context harus bernilai false agar gambar tidak diambil dengan sudut pandang viewport manapun yang tengah aktif, melainkan dengan kamera.
Menggabungkan gambar dan suara dalam satu file.
Sampai Blender 2.54, prosedur render melalui CLI belum dapat memasukkan audio ke dalam file video yang dihasilkan, meski semua setting render telah memperhitungkan keberadaan track audio. Yang ada, track audio file hasil hanya akan berisi suara berdecit atau kosong sama sekali. Trik yang saya gunakan adalah, lagi-lagi, melalui injeksi perintah Python. Contoh baris Makefile untuk proses ini adalah:
vid_opening_title.avi: seq_opening_title.blend renderseq.py blender $< --scene 'Scene' -P renderseq.py >> /dev/null renderseq.py: @echo 'import bpy' > $@ @echo 'bpy.ops.render.render(animation=True)' >> $@ @echo 'bpy.ops.wm.exit_blender()' >> $@
artinya, untuk file vid_opening_title.avi yang membutuhkan track audio, diperlukan file renderseq.py (yang akan otomatis dibuat jika belum ada).
Contoh kode
Semua trik di atas saya manfaatkan dalam menulis program pengelola renderfarm yang tengah saya rakit, PRAJA, yang saat ini masih dalam tahap eksperimen. Program tersebut terdiri atas beberapa komponen, meski satu-satunya komponen yang telah saya terbitkan adalah yang terkait dengan proses render di masing-masing slave. Itu pun masih berupa prototip dalam bahasa Python (komponen ini harus punya footprint sekecil mungkin dalam memori, hal yang mustahil saya capai bila memakai Python). Bagi rekan-rekan programmer yang menggunakan Mercurial, dapat mengambil komponen program tersebut dengan perintah
hg clone https://praja.googlecode.com/hg/
atau mengunjungi situs proyek Praja.