Prolog : Balik lagi nih guys setelah lama juga ngga nulis dimari. Sori, banyak kerjaan dikantor dan sampe rumah udah keburu tepar. Tapi oke, hari ini sempet-sempetin bikin tutorial gimana caranya mengaplikasikan PBR dari 3ds Max/Maya kemudian balik lagi ke mereka setelah kita ‘ramu’ kedalam beberapa aplikasi.
Apa sih PBR itu? PBR atau Physically based rendering boleh dibilang trend baru di realtime game rendering. Seperti kita tahu, pencahayaan dan bayangan adalah kunci dari seni komputer grafis untuk mendapatkan scene re-realistis mungkin. PBR mengikuti aturan main alam dalam pencahayaan semirip mungkin untuk kemudian dipantulkan ke objek. Jika dijabarkan lebih panjang tentunya sudah bukan masuk ranah artist/seniman lagi, tapi sudah kalkulasi matematika. Sebenarnya PBR bukan mainan baru di komputer grafis, cuma mungkin kita baru mengenal banyak di industri game dikarenakan dulu game-game belum siap untuk mengaplikasikan teknologi ini (coba lihat perbedaan grafis Playstation 1 dengan konsol masa kini). Banyak aplikasi yang sudah mengikutsertakan teknik PBR, seperti Unity 5, Unreal Engine 4, 3ds Max, Maya, Fox Engine, Frostbite, Marmoset dan yang terbaru Blender versi 2.79 dan lainnya. Tidak hanya diaplikasikan dalam game, PBR juga berjalan sangat baik di industri perfilman.
Apa aja yang dibutuhkan untuk menciptakan PBR? Sebenarnya pertanyaan ini rada general, tentu saja Anda butuh komputer, bukan kompor. Namun saya mengerti maksud Anda. Untuk menciptakan PBR sebenarnya secara mendasar membutuhkan 3 texture, yaitu Albedo, Roughness dan Metalness. Nah loh apa lagi itu. Generaly speaking, itu hanyalah texture yang kita pakai di aplikasi 3d untuk menciptakan PBR. Namun dimana Anda mendapatkan 3 texture itu? Aplikasi seperti 3d Coat, Quixel atau Substance Painter bisa menghasilkannya untuk Anda dan di tutorial ini kita akan pergunakan 3d Coat dan Quixel DDO.
Apa saja yang Anda butuhkan? Untuk model desain bisa unduh dari yang saya bikin disini. Untuk tutorial ini kita tidak modeling. Jika Anda punya mesh sendiri, pastikan sudah di unwrap terlebih dahulu. Tidak peduli Anda membuatnya di Maya, 3ds Max, Blender atau lainnya yang penting kita membutuhkan format .obj untuk kemudian di bake lebih cepat menggunakan XNormal nanti. Saya sudah pernah bikin tutorial bake di 3ds Max disini.
Berikut aplikasi yang akan kita pakai; 3ds Max, Maya, Blender, XNormal, Photoshop, Quixel DDO, 3D Coat, Substance Painter, Crazy Bump. Beberapa aplikasi tadi tidak semuanya dipakai alias ada yang opsional. Namun saya coba jelaskan apabila Anda membutuhkan beberapa diantara software tersebut di workflow Anda.
Sebelum mulai, Anda bisa unduh file 3d buatan saya disini sebagai bahan latihan. Saya tidak tahu itu sebenernya mesin apa, so yeah!
Jadi dimana saya bisa memulainya? Berikut workflow nya ketika saya mengaplikasikan PBR di kantor untuk kebutuhan game Second Life dan pekerjaan hobi. Pertama, tentu Anda mendesain objek yang ingin dipasang material PBR. Saya sertakan 2 objek, satu yang low-polygon dan satunya yang high-polygon untuk kemudian saya bake di next step. Harap diingat bahwa low-poly harus sudah di unwrap. Kedua, menggunakan aplikasi XNormal yang bisa diunduh gratis disini. Hasil dari XNormal berupa 2 tekstur saja yang saya pakai, yaitu Ambient Occlusion dan Normal Map. Berikutnya di langkah ketiga saya buka aplikasi Quixel DDO dimana Anda bisa unduh disini. Output dari DDO akan menghasilkan Albedo/Color, Ambient Occlusion, Metallic, Normal Map dan Roughness. Keempat saya buka aplikasi 3d Coat untuk detailing teksturing menggunakan output yang saya dapatkan dari Quixel DDO. Sebenarnya DDO hanya opsional ketika saya malas untuk bikin material albedo yang digunakan di 3d Coat meskipun di software tersebut sebetulnya Anda bisa membuatnya sendiri. Anda bisa unduh 3d Coat disini. Terakhir atau kelima, saya export dari 3d Coat ke Blender, atau Maya, atau ke Unreal Engine dan saya mendapatkan hasil yang saya mau. Beberapa aplikasi tambahan seperti Crazy Bump tetap saya butuhkan untuk modifikasi Normal Map atau Ambient Occlusion apabila output dari DDO atau 3d Coat belum sesuai selera saya. Step diatas akan saya jabarkan di artikel ini meskipun tidak meng-cover keseluruhan fitur per aplikasi secara komplit (karena scope nya terlalu besar).
Di tutorial ini nanti kita akan belajar; bagaimana mengaplikasikan material ID di 3ds Max, bagaimana mem-bake menggunakan XNormal, bagaimana membuat folder kerja yang mudah, bagaimana membuat color ID di Photoshop, kemudian bagaimana membuat tekstur di DDO. Hingga akhirnya bagaimana kita mengaplikasikan PBR di Maya dan Blender.
Setelah file berhasil Anda unduh, Anda bisa membuka nya di 3ds Max. Perlu diingat bahwa model ini adalah low-poly, artinya jumlah poligon sangat terbatas dan sesuai pada game engine saat ini. Poligon dengan jumlah yang banyak memungkinkan lebih berat sistem untuk bekerja dan tidak sesuai dengan game engine dan spesifikasi komputer. Jika Anda bergerak di dunia game development, seharusnya tahu akan isu seperti ini.
Setelah Anda buka, untuk memastikan saja, satu objek tersebut dibagi menjadi beberapa parts. Nanti parts akan di bake satu persatu.
Export parts demi parts tersebut ke dalam sebuah folder dengan nama “to XNormal”. Maksudnya adalah objek-objek tadi akan kita pakai ke aplikasi XNormal. Sebenarnya aturan penamaan ini hanyalah kebiasaan saya saja mengingat nanti akan ada banyak objek, saya harus memberi nama yang cukup relevan. Kasih nama objek per objek tadi misalnya; “lowpoly1”, “lowpoly2” dan seterusnya. Export bisa menggunakan export selected (pilih objek > File > Export > Export Selected). Export semuanya ke .obj
Berikutnya untuk mendapatkan hasil ambient occlusion yang pas, Anda membutuhkan setidaknya 2 plane atas dan bawah objek. Buatlah 2 plane di 3ds Max dan tempatkan di bagian atas dan bawah objek seperti pada gambar dibawah. Berikanlah jarak yang rada jauh diantara kedua objek. Export kedua objek plane tadi dan beri nama “plane”. Langkah export sama seperti kita export objek mesin sebelumnya.
Pertanyaan kemudian muncul: “Kenapa kita membutuhkan high-poly dan bukannya low-poly untuk mendapatkan ambient occlusion?”. Dalam beberapa kasus, misalnya kita membutuhkan retakan pada objek, retakan tersebut cukuplah ada di high-poly untuk kemudian kita ambil bayangannya. Jika retakan tadi (yang cukup banyak memiliki tris/poligon) diaplikasikan juga dalam low-poly, game yang Anda ciptakan akan semakin berat dan tidak efektif. Sebetulnya sah saja Anda mem-bake dengan kedua objek low. Namun semua balik lagi ke desain Anda. High poly bisa dibuat di ZBrush, misalnya Anda ingin membuat tekstur monster untuk kulit monster low-poly Anda. Kemudian output Zbrush tadi dikenal dengan high-poly dan di bake ke low-poly objek. Hasil low-poly yang sudah di bake tersebut akan memiliki bayangan yang serupa dengan high-poly tadi tanpa melibatkan poligon yang berlebih. Di akhir tutorial ini, saya akan memberikan objek gratis untuk Anda coba menggunakan high-poly sungguhan, sebagai bahan latihan Anda.
Sekarang, untuk mendemonstrasikan low-poly bisa di bake ke low-poly, pilih semua objek tadi di 3ds Max Anda. Pilih semuanya, bukan parts per parts seperti yang kita lakukan sebelumnya. Jika semua objek mesin tadi sudah terpilih, klik File > Export > Export Selected dan export ke .obj seperti yang sudah kita lakukan sebelumnya. Kemudian beri nama “highPolyTest”
Oke, sekarang buka aplikasi XNormal Anda. Di pojok kanan atas, klik ‘High Definition Meshes’. Klik kanan di area kosong/hitam kemudian pilih Add meshes. Oleh karena Anda memilih High Definition Meshes, Anda butuh objek untuk dipantulkan bayangannya ke objek low-poly Anda. Pilih file obj yang kita jadikan high-poly dengan nama “highPolyTest” yang kita buat sebelumnya.
Kemudian masih di area hitam yang sama, klik Add meshes sekali lagi dan import “Plane” yang sudah kita buat sebelumnya.
Sekarang masih di XNormal, pindah ke “Low Definition Meshes”. Klik kanan di area kosong kemudian pilih Add meshes, kali ini kita akan ambil low-poly mesh. Pilih file “lowpoly1” seperti yang kita buat sebelumnya.
Masih di XNormal, sekarang di sebelah kanan, klik “Baking options”. Centang “Normal Map” dan “Ambient Occlusion” di list sebelah kiri. Tentukan ukuran/size yang ingin Anda hasilkan (saya menggunakan 1024 x 1024) dan tentunya lokasi tempat dimana hasil bake tersebut saya save. Saya men-save nya kedalam folder bernama “from XNormal” agar suatu saat saya mudah mencari nya. Pastikan padding = 0.
Jika sudah, cek kembali kemudian klik tombol “Generate Maps” dibawah. Anda akan membutuhkan waktu agar semuanya selesai. Jadi, mari kita seruput kopi dan ngerokok dulu.
Jika langkah Anda benar, maka tampilan seperti gambar diatas akan muncul. Ya, itu hasilnya. Beberapa image diatas tampak sepertinya kepotong bukan? Itu karena ada parts lain bertubrukan selama proses rendering tadi. Oleh karena high-poly kita menggunakan banyak parts jadi satu, maka XNormal akan mengenali nya dan mem-bake keseluruhan parts menjadi satu kedalam low-poly. Masih bingung? Sekarang coba langkah dibawah.
Jika, Anda membuat high-poly yang terpisah pula dan bukan keseluruhan objek, maka hasil seperti dibawah akan Anda dapatkan.
Terlihat bedanya bukan? Sebenarnya terserah Anda mau menggunakan yang mana. Namun dalam beberapa kasus, mungkin Anda ingin menggeser beberapa parts. Jika Anda menggunakan yang pertama, maka hasilnya akan kacau. Ingat, itu adalah bayangan pasif, Artinya dengan Anda menggeser, bayangan tadi sudah berupa file PNG atau JPG. Namun jika Anda tidak memiliki niat untuk menggeser parts pada mesin tadi, sebenarnya sah saja menggunakan hasil bake pertama.
Permasalahan : Jika saya menggunakan hasil bake kedua dimana semua parts low dan high dipisah, itu artinya tidak ada bayangan pada objek yang bertubrukan. Beberapa aplikasi seperti 3d Coat memiliki fitur untuk generate Ambient Occlusion. Ketika di export, bayangan yang sudah ada sebelumnya (hasil dari XNormal) juga akan ikut di generate menjadi lebih hitam di 3d Coat. Permasalahannya adalah, sesuai pengalaman saya, beberapa sudut akan terlihat jauh lebih gelap dari yang lain (karena beberapa sudut ada yang di bake dan ada yang tidak). Alhasil bayangan-bayangan tadi menjadi tidak imbang. Sebenarnya, di 3d Coat Anda juga bisa melewati proses import ambient occlusion dan menciptakan sendiri AO dari 3d Coat. Jadi ini terserah Anda.
Jika sudah, klik Close karena file image tadi sudah di save.
Catatan : Jika hasil Anda terlalu gelap, mungkin plane Anda terlalu lebar atau terlalu dekat. Jauhkan dan kecilkan ukurannya kemudian export dan bake ulang di XNormal. Tentu ini akan membutuhkan waktu lama. Jadi kata siapa pekerjaan ini menyenangkan 🙂
Lakukan proses baking menggunakan XNormal untuk parts low-poly yang lain. Ingat untuk membuat nama file yang mewakili objek nya supaya Anda tidak bingung nantinya.
Nantikan kelanjutan tutorial ini di part kedua. Stay tuned dan jangan lupa share ke teman-teman Anda apabila mereka membutuhkan.