Menengok Sejenak dan Berdoa

Studio pertama tempatku bekerja dulu telah resmi tutup, dan meski sudah lama tidak ada ikatan lagi dengan mereka, toh rasa kehilangan ini tidak dapat kuabaikan. Di permukaan, sebenarnya mudah kutemui pelajaran dari peristiwa ini, bahwa kualitas dan integritas harus diutamakan; siapapun dan apapun yang menghambat setidaknya salah satu sewajarnya disingkirkan. Di permukaan, sebenarnya mudah kurasionalkan keacuhan, bahwa ini hanya bisnis, dan hukum alam kapitalis berbicara no survival for the unfit.

Di sisi lain, sebagai makhluk yang selalu haus akan keterhubungan dan makna, aku tidak bisa tidak berdiri di hadapan puing yang dibangun teman-temanku ini dengan rasa pilu. Begitu besar potensinya. Begitu besar momentum awalnya. Setiap kata-kata tajamku dulu, tidak ada niat bergunjing atau hati yang busuk di baliknya, setidaknya jika kuingat waktu yang telah jauh itu dari sini. Hanya rasa frustasi bahwa bayi yang dulu ikut kurawat itu bukan anakku, tidak ada hak dan kewajibanku atasnya, dan sekarang harus kusaksikan proses meninggalnya di usia yang begitu muda.

Tulisanku ini tidak kuniatkan untuk menyebar rasa duka, sentimentalisme yang irasional untuk hal-hal semacam ini. Hanya ingin memunculkan satu observasi, bahwa untuk dapat acuh angkat-bahu memandang reruntuhan jerih payah sekian banyak orang, membutuhkan hati yang telah mengeras oleh pragmatisme menjalani hidup, makhluk batu di hutan beton yang hidup dan mati berdasar hukum rimba, bergerak semata demi kepeng di genggaman. Kurasakan langkahku perlahan ke arah sana, dan ini sedikit usahaku untuk bertahan.

 •  Personal  •   • 

Tentang Lisan

Kenapa tidak banyak berbicara? Karena sedang tidak ada yang cukup berharga untuk dibicarakan. Sebenarnya berpikir ingin ikut nimbrung di sana-sini. Terkadang pula kagum dengan rekan yang dengan begitu lancarnya berbicara dan bercerita. Tapi sering kali saat mulut terbuka, tersadar bahwa kata-kata di ujung lidah saat itu hanya remeh-temeh dan ucapan kosong. Lalu mulut kembali terkatup.

Duniaku tulisan. Yang komposisinya masih dapat dirombak dan diperbaiki. Yang rasio informasi:data-nya begitu tinggi, karena minim basa-basi dan berbagai artefak bahasa lisan dari "eh" sampai keheningan tak nyaman. Ingin tahu pendapatku tentang sesuatu, tanyakan lewat tulisan, sehingga memberiku kesempatan menjawab dalam tulisan. Dan akan kautemui jawaban yang terukur dan teratur. Karena sempat kupindah-pindah struktur kalimatnya agar mengalir. Karena sempat kucari referensinya agar kokoh. Karena sempat kubuat ilustrasinya agar jelas. Karena sempat kubaca kembali, lalu kubuang bagian yang tak diperlukan, kadang semuanya.

Semua itu tak tersaring dalam bahasa lisan, dan itu yang tidak kusukai. Begitu banyak sampah. Pikiran tak terolah. Akhirnya hal-hal buruk terucap. Perilaku yang tak akan tergambar dalam bahasa tulisan mewujud. Hal yang sama terkadang terlihat pada moda tulisan pendek seperti status, twit dan chat, terutama saat kita memperlakukannya sebagai corong ucapan instan. Ada pemikiran mendalam dan berhati-hati di balik tulisan-tulisan panjang, dan hal sebaliknya mungkin berlaku pada teks-teks pendek. Dan banyak kata-kata bijak yang kita cantumkan sebagai teks pendek, tidakkah mereka kita kutip dari tulisan yang lebih panjang, proses pemikiran yang lebih menyeluruh, tidak instan?

Sementara ini kutemui, bahwa teks pendek bermanfaat sebagai benih cerita. Membalik observasi bahwa sebuah cerita panjang dapat diringkas menjadi satu logline (sinopsis satu kalimat), satu ucapan pendek dapat menjadi awal percakapan dan penceritaan yang menarik jika kita inginkan. Dan karena pendeknya kalimat ucapan, kita tidak keberatan jika pendek pula umur ucapan tersebut. Lalu kita beralih pada topik lain, atau beranjak pergi, tak ada waktu terbuang. Lebih mudah melakukannya sebagai tulisan, sulur diskusi yang terabaikan, ketimbang secara lisan di mana pilihan lanjutannya hanya jawaban kosong atau keheningan.

Ini prosesku, jalan yang kupilih, yang mungkin menutup jalan dan kesempatan lain. Namun jika melihat yang kuhasilkan, dan menilik yang kurasakan, aku tidak keberatan. Duniaku tulisan.

 •  Personal  •   • 

Memasang Satu Custom Shape Ke Beberapa Tulang

Satu lagi operator sederhana untuk rigging. Ada kalanya beberapa tulang perlu menggunakan custom shape yang sama, misalnya setiap ruas jemari atau ekor. Pemasangannya cukup menjemukan, dan sebenarnya bisa diotomatisasi.

Operator berikut ini mempermudah penerapan satu custom shape ke beberapa tulang sekaligus. Cara penggunaan pertama adalah dengan memilih dahulu semua tulang yang ingin diberi custom shape, tulang yang sudah diberi custom shape dipilih terakhir, lalu jalankan operator.

Operator ini tetap dapat digunakan meski belum ada tulang yang diberi custom shape. Cukup pilih objek mesh yang akan menjadi custom shape, lalu tulang2 yang akan diberi custom shape tersebut (dalam pose mode), lalu jalankan operator. Untuk satu tulang pun sepertinya cara ini cukup efisien, jika dibanding cara biasanya: pilih custom shape, salin namanya, pilih tulang, tempel string nama ke field Custom Shape... apalagi kalau operatornya sudah punya tombol di antarmuka 3D View.

import bpy

class UseSameCustomShape(bpy.types.Operator):
    bl_idname = 'object.use_same_customshape'
    bl_label = 'Use Same Custom Shape'
    bl_options = {'REGISTER', 'UNDO'}
    
    def execute(self, context):
        if not (context.active_object.type == 'ARMATURE' and
                context.mode == 'POSE'):
            return {'FINISHED'}

        custom_shape = context.active_pose_bone.custom_shape
        for obj in context.selected_objects:
            if obj.type == 'MESH':
                custom_shape = obj
                break

        for bone in context.selected_pose_bones:
            bone.custom_shape = custom_shape

        return {'FINISHED'}

def register():
    bpy.utils.register_class(UseSameCustomShape)
    
register()

 •  Visual  •   • 

Switch Tampilan Wireframe Seluruh Badan Karakter

Operator yang saya buat hari ini masih sederhana, tapi penting (bagi saya) di tahap awal rigging. Namanya sebenarnya toggle wire display, tapi agar akurat saya beri nama Display Wire For Skinned Objects. Apa manfaat operator ini? Setiap kali rigging, saya selalu mengusahakan peletakan sendi2 tulang persis pada batas topologis antar anggota badan:

Alasannya agar ada satu edge-loop dengan influence dua tulang yang seimbang, berfungsi sebagai poros sendi. Memperlihatkan wireframe di atas bentuk solid objek biasanya memudahkan kita menentukan sendi artikulasi, juga untuk mendeteksi cacat skinning. Masalahnya terkadang satu karakter punya banyak mesh komponen (bolamata, sabuk, kaus, jaket, rambut...), yang selama ini sebagian besar harus saya aktifkan --dan non-aktifkan saat selesai, agar rapi-- tampilan wireframe-nya satu-persatu. Dengan operator ini, sebanyak apapun objek komponen karakter, sekali eksekusi operator saja sudah cukup:

Read More

 •  Visual  •   • 

Menyamakan Posisi Custom Shape dengan Tulang

Akhir pekan kemarin saya manfaatkan untuk belajar membuat operator dalam Blender Python dan membongkar Rigify. Ternyata ada kode-kode yang bisa dimanfaatkan untuk aktivitas rigging secara umum, di luar konteks Rigify. Salah satunya adalah fungsi rigify.utils.obj_to_bone.

Saya agak obsesif-kompulsif dalam menghasilkan rig yang rapi (harus diredam sedikit demi memenuhi deadline). Sejak pertama melihat tingkat kerapian rig hasil Rigify, obsesi tersebut sampai ke urusan peletakan custom shape setiap tulang. Posisi, rotasi dan skala custom shape Rigify selalu sama persis dengan tulang yang menggunakannya. Ini memudahkan kita jika harus menyunting bentuk sebuah tulang relatif terhadap objek lain (kedua mata, kendali2 form-fitting, atau rig wajah yang kombinasi kontrolnya menyerupai wajah si karakter).

Masalahnya, melakukannya secara manual tidak selalu bisa rapi, terutama jika sudut rotasi dan skala-nya bukan dalam kelipatan bulat. Lebih mudah melakukannya lewat kode, yang dapat langsung mengakses matriks koordinat setiap objek, dan itulah yang dilakukan rigify.utils.obj_to_bone. Script berikut memanfaatkan fungsi Rigify tersebut; jika dijalankan dalam Blender, ia akan menambahkan operator Object Position to Bone, yang dapat diakses lewat menu Spacebar. Tinggal pilih tulang2 tertentu dalam Pose Mode, lalu jalankan operator ini. Objek custom shape tulang2 tersebut (jika ada) akan berada persis di posisi yang sama dengan setiap tulang. Operator ini tetap bekerja meski objek itu sedang tersembunyi (tapi layer objek2 tersebut tetap harus aktif).

import bpy
import rigify

class ObjectPositionToBone(bpy.types.Operator):
    bl_idname = 'object.position_to_bone'
    bl_label = 'Object Position to Bone'
    bl_options = {'REGISTER', 'UNDO'}
    
    def execute(self, context):
        if not (context.active_object.type == 'ARMATURE' and
                context.mode == 'POSE'):
            return {'FINISHED'}

        for bone in context.selected_pose_bones:
            obj = bone.custom_shape
            if obj:
                rigify.utils.obj_to_bone(obj, context.active_object,
                                         bone.name)

        return {'FINISHED'}

def register():
    bpy.utils.register_class(ObjectPositionToBone)
    
if __name__ == '__main__':
    register()

Saya coba di rig non-Rigify, hasilnya cukup memadai:

Lumayan juga untuk memangkas objek2 yang tidak diperlukan. Saya jadi terpikir mengemas kode-kode yang saya pakai untuk rigging sebagai kumpulan operator dalam satu addon rapi. Saat ini semuanya masih fragmen2 ad-hoc. Sambil jalan saja, lihat2 mana yang penting...

 •  Visual  •   • 

Armatur dan Modifier Mirror

Saya bayangkan tidak sedikit di antara rekan2 yang menghadapi masalah seperti ini: memasang kerangka utuh pada karakter simetris, namun hanya tulang2 di salah satu sisi yang mengendalikan vertex di kedua sisi simetris karakter:

Kalau bukan kesalahan weight painting, biasanya ini disebabkan keberadaan modifier Mirror. Kalau saya sendiri harus memberi kerangka pada karakter seperti ini, biasanya saya terapkan (apply) dulu modifier Mirror tersebut, karena biasanya merepotkan saat weight painting dan saat membuat blend shapes. Ini solusi termudah.

Tapi bagaimana jika kita benar2 menginginkan modifier Mirror tetap ada? Mungkin agar mempermudah jika karakternya nanti harus diperbaiki lagi? Meski ini mencerminkan kurang rapinya alur kerja kita, sebenarnya bisa saja dilakukan. Caranya mudah:

Read More

 •  Visual  •   • 

Teknik Sederhana Agar Rig Mata Terlihat Lebih Hidup

Jika Anda perhatikan, ada yang kurang pada rig mata yang dibuat sekadar dengan konstrain Track To atau Damped Track pada bola mata mengarah pada target pandangan. Komponen gerakan yang menyertai perubahan arah pandangan, dapat kita rasakan pada mata kita sendiri: kelopak mata bereaksi terhadap arah pandangan:

Teknik ini pada rig karakter CG terkadang disebut fleshy eyes, meniru interaksi otot pada kelopak dengan bola mata, yang sedikit membantu gerakan mata terlihat lebih hidup. Saya belum mencoba menerapkannya pada karakter realistis, namun untuk karakter sederhana implementasi dasarnya sangat mudah diterapkan. Berikut saya jelaskan dua alternatif penerapan teknik ini, dalam software Blender.

Read More

 •  Visual  •   • 

Ingatan Pagi Ini

Aku bersyukur pagi ini luka itu tak seperih biasa. Kuhirup embun senyap dalam gelap dan ku sujud syukur pada-Nya, darah di jantungku meruap saat kuingat kami pernah saling bertatap. Ingin kulukis senyumnya di ufuk timur seperti mentari mengusir hampa. Aku ingin berbicara dengannya meski ia tak ada, meski jika ada pun aku tak tahu ingin berbicara apa. Mungkin tentang kehidupan. Mungkin tentang dirinya. Mungkin tentang perasaan yang selama ini selalu terpendam dan tak bisa kuungkapkan karena aku belum laki-laki sepenuhnya. Gelisahku menanti di dasar kawah membara, menanti saatnya aku bisa pergi, keluar dan berkelana.

 •  Personal  •   • 

Pencil, Software Animasi 2D yang Agak Terlantar...

Pencil adalah perangkat animasi yang menarik: ringkas, multi-platform, dan relatif mudah digunakan. Saat nyasar sebulan di ANIMOTION Academy, Surabaya, saya menggunakan software ini untuk mengajarkan prinsip2 dasar animasi memanfaatkan sedikit ilmu yang didapat dari melihat sedikit tutorial Jason Ryan. Mau tahu animasi saya dengan software ini?

Read More

 •  Textual  •   • 

Alvy Ray Smith. Ilmuwan, Seniman... Co-founder Pixar

Saya masih ingat, podcast terakhir yang saya dengar saat masih di Hicca adalah fxpodcast hasil download awal Juli, berisi wawancara dengan Alvy Ray Smith. Perbincangannya lumayan panjang, dua jam, namun berisi banyak wawasan tentang masa2 awal lahirnya animasi CG. Maka bertambah satu lagi figur yang saya kagumi secara mendalam, dan saya harus menuliskan kesan ini meski sedikit, karena hampir seluruh industri citra digital, efek visual dan animasi CG secara langsung menggunakan karyanya sebagai fondasi.

Dr. Alvy Ray Smith, selain beberapa ilmuwan komputer lain yang aktif di era 70-an seperti James Blinn, layak disebut pionir teknologi grafis digital. Salah satu ciptaannya yang rutin kita gunakan di dunia animasi CG adalah kanal Alpha yang menyimpan informasi matte gambar. Untuk membantu seniman mendefinisikan warna, ia juga menciptakan ruang warna HSV (Hue/Saturation/Value) sebagai alternatif untuk RGB. Pencapaiannya yang masih menggema sampai sekarang tentu saja adalah Pixar, studio animasi CG yang ia dirikan berdua dengan Dr. Edwin Catmull.

Di sisi artistik, cita-citanya membuat film animasi pun ia wujudkan. Setelah mengarahkan efek visual CG pertama dalam Star Trek II: Wrath of Khan, ia mensutradarai animasi pendek pertama Pixar The Adventures of André and Wally B selain membantu Ed Emshwiller membuat karya eksperimentalnya, Sunstone (IMDB). Ada banyak informasi tambahan mengenai berbagai pencapaiannya dalam artikel terkait di fxguide, namun bagian2 yang paling menarik dan inspiratif tentu saja yang dapat kita dengar sendiri dari sang tokoh. Saya beri dua kutipan:

Meski dunia lebih mudah kagum pada pemimpin sukses seperti Steve Jobs, saya jauh lebih respek pada figur seperti Alvy Ray Smith. Brilian, lebih peduli pada karya ketimbang citra, pakar teknis sekaligus seniman, fiercely independent.

 •  Textual  •   •