Di bagian tutorial sebelumnya, kami melihat bagaimana tekstur dibuat. Lebih tepatnya, cara semuanya terlihat di bawah tenda (seperti
Yoooriii menuliskannya di komentar pada bagian 4). Persyaratan telah diberlakukan - piksel dan texels. Dibongkar sedikit pemindaian dan model grid, PBR dan bahan. Dan akhirnya, kami membuat garis di bawah profesi "artis dalam tekstur". Tampaknya Anda sudah dapat berhenti dan mulai bekerja.
Bagian 1. Pixel di sini .
Bagian 2. Topeng dan tekstur di sini .
Bagian 3. PBR dan Materi di sini .
Bagian 4. Model, normals, dan sapuan di sini .
Bagian 5. Sistem bahan - Anda membacanya.
Blok pengantar
Di bagian ini, kita tidak akan berlatih, karena bagian kelima ternyata cukup besar. Semua informasi tentang cara membuat materi dan menyesuaikannya di Unreal Engine 4 dapat ditemukan di
tutorial Flakky dan banyak lainnya. Tugas kita sekarang adalah menganalisis teori sedetail mungkin (Dan jika ada informasi yang kurang, tolong beri tahu saya tentang itu).
Pada 2017, artis teknis Harrison Moore tampil di Unreal Dev Day Montreal. Dia berbicara tentang pendekatan apa untuk texturing yang dia dan timnya gunakan untuk memastikan bahwa permainan Paragon memiliki bahan yang sangat indah. Di bawah ini adalah tautan ke kuliahnya.
Faktanya adalah bahwa kami menciptakan proyek VR di mana kualitas tekstur sangat penting. Misalnya, membuat tekstur untuk objek besar (dinding, lantai, lemari besar, kotak, dll.), Kami menemukan fakta bahwa metode standar memberikan tekstur sangat pixelated, dan chamfer yang dibuat menggunakan tepi keras dan peta normal (kami memilah ini 4 bagian) ketika objek dekat dengan mata mereka, mereka tampak sangat pixelated dan celaka sehingga kita harus meningkatkan ukuran tekstur untuk memperbaikinya. Pada akhirnya, untuk mencapai setidaknya perkiraan terhadap hasil yang diinginkan, kami mulai memukau tekstur 8k. Ternyata itu sangat mahal untuk membuat tekstur 8k pada objek besar utama, tetapi secara visual itu memuaskan (maksimum).

Pada awalnya, semuanya berjalan lancar. Tekstur terpaku, kualitasnya normal, tetapi setelah mengumpulkan adegan dari objek dengan tekstur seperti itu, kami menyadari bahwa ini tidak berhasil. Volume tekstur sangat besar - agar proyek kami dapat bekerja dengan pengguna akhir, diperlukan kartu video yang memiliki setidaknya 3 gigabytes RAM. Dan ukuran satu tekstur tersebut adalah 67 juta texels. Meskipun fakta bahwa ini sudah benar-benar dihitung dan dipanggang tekstur, tidak ada daya komputasi kecil dari kartu video yang diperlukan untuk menggerakkan semua texels dan menampilkannya di layar. Tetapi kami memahami bahwa untuk implementasi penuh PBR kita tidak perlu 1 tekstur (dan bukan 1 saluran), tetapi setidaknya 9 saluran.
Akibatnya, kami mendapat adegan di mana volume teksturnya sangat besar, memerlukan perhitungan terliar, dan gagal FPS dari frame yang kami butuhkan hingga 90 hingga 45. Itu menjadi jelas mengapa hampir semua game hanya menggunakan tekstur BaseColor, sementara yang lain praktis tidak terhubung. Misalnya, game Torn untuk VR:

Sebagian besar (saya akan mengatakan 90%) dari objek dibuat sederhana - materi terdiri dari BaseColor secara eksklusif. Tidak ada peta normal, tidak ada logam atau kekasaran. Sayangnya, tangkapan layar dari permainan yang tersedia di jaringan tidak memungkinkan Anda untuk menunjukkan minus dari pendekatan ini, dan sebaliknya, sangat sering tangkapan layar menunjukkan bahwa ada semua kartu, dan gambarnya sangat indah. Tapi jangan bicara tentang game ini.
Awalnya, saya mengabaikan ceramah, video yang saya masukkan di atas. Lebih tepatnya, saya melihat ke dalam dan berpikir bahwa itu tampaknya merupakan pendekatan yang baik, tetapi kami tidak mengubah jalur untuk membuat objek dan tekstur di tim kami, karena ini akan membutuhkan waktu yang cukup besar untuk dikuasai, diperkenalkan, untuk mengembangkan keterampilan. Namun, dihadapkan dengan masalah kualitas material, saya memutuskan untuk mempertimbangkan kembali pendekatan untuk texturing.
Kami mulai memahami apa yang ditawarkan Harrison Moore.
Prasyarat untuk pembentukan konsep "artis permukaan"
Dan begitulah. Orang-orang dari Epic Games telah mengembangkan pendekatan yang menarik untuk texturing (lebih tepatnya, membicarakannya). Mereka mengambil pendekatan untuk membuat tekstur di Substance Painter (atau program texturing lainnya) dan mentransfer baking tekstur dari program ke mesin secara langsung (lebih tepatnya, proses ini dapat disebut pembuatan bahan prosedural). Artinya, sekarang perhitungan untuk memanggang tekstur sudah dilakukan di mesin itu sendiri, dan tekstur tidak dibuat, tetapi disusun terlebih dahulu. Hasil kompilasi (shader) disimpan dalam format yang dimengerti mesin, dan ketika model dengan shader ini ditampilkan, hasilnya ditumpangkan pada model.
Bagaimana cara kerjanya?
Di mesin memuat tekstur dari setiap tekstur (bahan) dalam ukuran 1k. Yaitu, set standar adalah Warna Dasar, ORM, Peta Normal. Tekstur seperti itu dimuat dengan 10-20 buah. Misalnya, 4 varietas logam, 5 varietas kulit, beberapa varietas plastik, kayu dan sebagainya. Semua ini digabungkan menjadi fungsi shader sehingga Anda dapat dengan mudah menghubungkannya nanti. 1 faktur = 1 fungsi.


Setelah itu, mereka membuat topeng untuk objek yang kita butuhkan. Di sini Pelukis Zat menjadi perlu lagi - dengan bantuan itu topeng dibuat pada objek. Artinya, Anda perlu menentukan di mana tempat objek mana tekstur harus ditampilkan, kemudian untuk menggambar tekstur yang diinginkan di tempat yang tepat pada objek:


Di atas dalam tangkapan layar, Anda dapat melihat bagaimana robot terbang dicat dalam warna-warna cerah. Secara singkat - ini dilakukan khusus untuk melihat topeng mana yang berada di mana. Tangkapan layar kedua menunjukkan salah satu topeng.
Topeng ini diunggah ke mesin. Mereka juga membuat peta normal untuk setiap objek secara terpisah untuk menghaluskan chamfer, menampilkan beberapa elemen teknis kecil dengan bantuannya, dan juga memuatnya ke dalam mesin.
Selanjutnya, shader baru (materi) dibuat, di mana topeng yang dibuat ditambahkan. Fungsi shader yang diperlukan ditambahkan dengan tekstur yang diperlukan (misalnya, logam berkarat, plastik dan logam segar) dan kemudian kode tersebut ditulis (hampir tidak ada yang perlu ditulis, setelah semua Epic Games melakukan segala yang mungkin untuk membuatnya nyaman bagi kita untuk bekerja), di mana kami menunjukkan cara mencampur masker dengan benar, tekstur mana yang ditampilkan di bawah topeng mana, cara menampilkan tekstur tanah, dan sebagainya.
Setelah semuanya terpasang, shader dikompilasi dan hasilnya ditampilkan.
Ya, sepertinya hal seperti itu - lagipula, hal yang sama dapat dilakukan di Painter dan mendapatkan hasil yang sudah jadi. Namun, ini tidak benar. Dan ubin adalah yang harus disalahkan.
Sedikit tentang ubin
Ubin (harfiah - ubin, ubin) - Ini adalah pengulangan tekstur, seolah-olah ubin, jika lebih kecil dari area untuk texturing (UV). Ini diperlukan untuk mengisi celah yang terbentuk dalam ruang UV, jika teksturnya lebih kecil. Kartu video mulai menggandakannya sebanyak yang diperlukan untuk menutup celah. Ubin bekerja dengan cara yang menarik - kartu video menghitung setiap tekstur texel (misalnya, ukuran 1k). Dan ketika sampai pada bagian yang digandakan, tidak ada perhitungan yang sudah dibuat, karena mereka sudah ada. Kartu video hanya menyalin dan menempelkan data. Salin tempel. Dan hampir tidak ada biaya untuk kinerja. Ini tidak terlalu menuntut sumber daya sehingga tidak mempengaruhi apa pun, bahkan jika Anda melakukan pengulangan 10.000 * 10.000 pengulangan, (dan ulangi ini dengan contoh kami sekitar 10 miliar texels sebentar tentang jumlahnya), proyek Anda tidak akan berhenti selama sedetik.
Lanjutkan
Artinya, kita sekarang dapat mengambil faktur. Tunjukkan di tempat yang tepat di fasilitas dan rona (duplikat) persis seperti yang Anda butuhkan untuk mencapai kualitas yang diinginkan. Karena ubin, ukuran texels sangat berkurang, yang meningkatkan kualitas tekstur itu sendiri.
Kerugian dari pendekatan ini adalah matematika - sekarang, untuk menampilkan tekstur pada suatu objek, shader perlu menghitung berbagai operasi berkali-kali untuk menampilkan hasil akhir, dan alih-alih tekstur 3 standar, mesin perlu mempertimbangkan masker, pencampuran normal, warna, dan sebagainya.
Faktanya, kerugian dalam perhitungan diratakan:
- Anda dapat dan akan menggunakan kembali fungsi yang ditagih. Berulang kali di objek lain. Artinya, perhitungannya akan sama secara total, tetapi jumlah peta tekstur itu sendiri akan lebih sedikit di kali. Anda tidak perlu lagi membuat tekstur baru untuk setiap objek, cukup tentukan area untuk tekstur dan gunakan tekstur yang sama.
- Anda dapat membuat ukuran topeng yang lebih kecil - misalnya, 128 kali 128 piksel. Yang mengurangi perhitungan hingga ratusan kali.
- Anda dapat memasang tekstur sesuka Anda, mencapai hasil yang tidak dapat dicapai menggunakan metode tekstur standar.
- Dengan menambahkan perhitungan dan topeng lain, Anda dapat bermain dengan saluran individu, misalnya, membuat saluran kekasaran ubin lebih kecil dari peta warna, sehingga mengganggu pengulangan visual gambar dan menciptakan perasaan keunikan seluruh permukaan.
- Anda dapat memaksakan fungsi tekstur sedemikian rupa sehingga mereka bergerak relatif terhadap koordinat objek di ruang dunia - dengan cara ini Anda dapat menempatkan 2 objek identik dengan shader yang sama, tetapi keduanya akan terlihat unik.
Harus dipahami bahwa pendekatan ini bukan untuk semua platform. Misalnya, game seluler sudah sulit dirakit dengan cara ini karena rumitnya kalkulasi.
Contoh paling sederhana dari kerugian dari pendekatan standar untuk tekstur dan Sistem Lapisan Bahan baru (sebagai orang-orang dari Epic Games menyebut pendekatan ini) adalah Final Fantasy 15. Untuk meningkatkan kualitas gambar, mereka merilis paket dengan tekstur 4k. Dan apa itu tekstur 4K? Ini adalah 16 juta kesalahan perhitungan texel per saluran. Dan jika ada 9 dari mereka untuk standar PBR?
Dan di sini kekuatan Sistem Lapisan Bahan mulai muncul sebanyak mungkin. Untuk mengumpulkan pakaian pada karakter menggunakan tekstur, cukup menggunakan 3-4 tekstur (mungkin lebih). Secara total, itu akan menjadi kurang dari tekstur standar resolusi tinggi, kinerja kira-kira pada tingkat yang sama, dan kualitas dapat dikontrol dengan ubin dan diatur jauh lebih tinggi.
Sistem lapisan bahan
Orang-orang dari Epic Games melangkah lebih jauh dan menyajikan versi beta dari "Material Layer System", yang tidak membuat hype dan ternyata cukup buggy.
Contoh karyanya dapat dilihat di video ini:
Berdasarkan fakta bahwa sistem itu belum cocok untuk bekerja, kami membiasakan diri dengan itu, senang bahwa suatu hari nanti kami akan menyelesaikannya, tetapi untuk sekarang kami menolak untuk bekerja dengannya dan beralih untuk membuat shader secara manual, menunjukkan setiap topeng di shader secara langsung.
Hasilnya, kami mulai mencoba dan bereksperimen.
Bagaimana kami menyingkirkan peta normal
Pada awalnya, bekerja dengan tekstur tidak berjalan dengan lancar - kami mencapai efek yang diinginkan dengan tekstur, tetapi kami masih sangat terhambat oleh peta normal, karena itu perlu dihasilkan untuk setiap objek untuk menciptakan perasaan chamfer yang indah. Terlepas dari kualitas tekstur yang dibuat oleh kami, ketika mendekati objek kamera, bevel meninggalkan banyak yang harus diinginkan bahkan dengan tekstur 8k (saya ingat bahwa kami sedang mengembangkan proyek untuk VR). Tetapi tekstur 8k adalah volume texels yang sangat besar. Begitu besar sehingga 2 set tekstur penuh meremas FPS hingga 45 frame (untuk VR Anda perlu 90).
Kemudian kami berkenalan dengan metode membuat bevel, yang saya bicarakan secara singkat di bagian 4. Membuat chamfer pada model objek memungkinkan untuk menyingkirkan peta normal hampir sepenuhnya. Ya, kami telah meningkatkan model poligon, tetapi tidak lebih dari 20-40%, sementara kualitas bevel meroket.
Pendekatan ini memungkinkan kami untuk menyingkirkan masalah lain - jahitan di tepinya. Membuat chamfer pada model, tidak perlu lagi memotong model di sepanjang tepi yang keras. Pada prinsipnya, tidak ada sisi keras pada model, sehingga pulau-pulau menjadi besar, mereka mulai memasukkan ruang yang besar, dan sekarang kita menerapkan tekstur pada model, praktis tidak ada jahitan pada model.
Ini tidak berarti bahwa sekarang pada semua objek kita tidak memiliki peta normal yang terpisah. Sederhananya, sebagian besar objek standar dapat dilakukan dengan chamfer dalam model tanpa peta normal tambahan.
Pada akhirnya, secara bertahap mengurangi topeng, meningkatkan dan menyulitkan shader, kami mulai membuat bahan kompleks yang memungkinkan kami untuk tekstur permukaan yang sangat indah:

Di atas lantai terdiri dari 2 tekstur - strip besi - 32x32 piksel dan hexagon - 32x32 piksel. Materi ini memiliki formula yang sangat kompleks - jumlah operasi yang sangat besar untuk perhitungan - sekitar 295 instruksi. Untuk material biasa, shader seperti itu akan membutuhkan lebih banyak daya komputasi, tetapi kami hanya menggunakan 32x32 = 1024 texels per saluran. 9 saluran = 10k texels, yang harus diperhitungkan saat menghitung materi ini + mask 128x128. Sejumlah besar operasi diratakan oleh sejumlah kecil texels untuk diproses. Hasilnya, kami mendapat gambar yang indah dengan shader yang sangat cepat dan mudah.
Karena topeng, kontrol ubin dan saluran yang kompeten, Anda dapat membuat shader yang sangat kompleks yang akan menghasilkan bahan yang indah dan pada saat yang sama praktis tidak memakan sumber daya.
Sebagai contoh, saat ini kami menggunakan sekitar 10-15 tekstur untuk seluruh proyek (ditambah beberapa objek unik yang sepenuhnya bertekstur menggunakan metode standar). Logam yang sama ada di hampir setiap benda. Ini berubah dalam shader - kami menambahkan warna yang berbeda pada bahan, kami menggeser peta kekasaran tekstur, menerapkan goresan pada topeng, dan koordinatnya mengontrol koordinat objek (jika kita berbicara tentang objek statis), yang mengarah ke objek unik dengan keripik, retakan, kotoran .
Saat meningkatkan resolusi layar, cukup bagi kami untuk hanya menyesuaikan ubin sehingga jumlah texel sesuai dengan jumlah piksel pada layar. Dengan metode texturing standar, Anda harus menyekop semua tekstur, mengambil proyek lama di Painter dan menyimpannya kembali. Dan Anda perlu memastikan bahwa teksturnya tidak hilang. Dan kemudian semua ini perlu diimpor kembali ke mesin dan pastikan semuanya akan baik-baik saja di sana, bahwa shader akan dengan cepat menghitung tekstur yang lebih besar dari sebelumnya.
Berpikir dengan tekstur
Ketika saya berbicara dengan seniman 3D tentang topik tekstur, saya berulang kali diberitahu bahwa sebagian besar objek tidak dapat dirakit menggunakan tekstur, bahwa ini memerlukan tekstur terpisah dengan pola unik dan komponen lainnya. Misalnya, punjung ini:

Kompleksitas mewakili objek ini dalam paket bertekstur adalah bahwa ia memiliki momen unik:

Pola sabuk di atas kain dapat dibuat tekstur yang terpisah dan cukup diaplikasikan di atas tekstur kain. Atau jahit sabuk ke tekstur kain, lalu kita dapatkan tekstur kain yang unik dengan sabuk:

Saat menggunakan tekstur ini, menjahit ikat pinggang ke kain akan terus berulang di area yang sama, tetapi ini tidak akan terbukti.
Bintik-bintik basah dibuat oleh topeng dan kotoran atau sesuatu yang lain diterapkan. Dan itu sudah terlihat unik.
Fringe juga dibedakan berdasarkan tekstur, dan ukurannya akan sangat kecil, karena berulang. Anda dapat menampilkannya pada model melalui topeng.
Pola unik pada kait logam dapat diterapkan baik dengan stiker atau dengan lapisan terpisah dari kartu normal kecil, yang dapat dihaluskan di bawah posisi sapuan dan dikembangkan melalui topeng.
Lipatan pada gulungan kain dapat direalisasikan menggunakan geometri atau masking dengan naungan. Pada generasi besi saat ini, menambahkan sejumlah kecil simpul tidak akan menyebabkan beban apa pun, dan Anda selalu dapat menyembunyikannya dengan pondok di kejauhan.
Benda kayu dapat dilubangi, dan dengan demikian sepenuhnya menghapus peta normal dari perhitungan. Dan sebagainya. Yang paling penting di sini adalah bahwa semua ini dengan cepat dapat diterima untuk penyesuaian tanpa program pihak ketiga dan membuang-buang waktu.
Dan yang paling penting, semua tekstur ini dapat digunakan dalam shader lain, menyesuaikan warna dan bintik-bintik.
Pengecualian
Sebagian besar, saya akan mengatakan, 95% dari semua objek dalam permainan dicakup oleh metode ini. Secara umum, bahkan lukisan buatan tangan jatuh di bawah tekstur dan dapat diterapkan melalui itu. Namun, tidak semua objek pada tahap teknologi ini dapat diimplementasikan. Misalnya, karakter kompleks yang memiliki elemen khusus. Dan bahkan jika Anda memikirkannya dengan cermat, Anda dapat menutupinya dengan tekstur - penting untuk melihatnya secara tepat waktu, memotongnya dan menggelapkannya.
Saya ditawari untuk mendemonstrasikan sofa (gambar di bawah) sebagai elemen yang tidak dapat ditekstur.

Namun, jika Anda perhatikan lebih dekat, sofa memiliki 3 tekstur (kulit di atas, jok, kayu untuk kaki) dan 2 kesulitan - ini adalah lipatan dan jahitan. Lipatan dapat ditiru dalam 2 cara:
- Simpul tambahan.
- Peta kecil normal tambahan yang akan memancarkan gelombang lipat (metode yang lebih menarik).
Hal yang sama berlaku untuk jahitan - mereka dapat disorot dengan topeng dan mencerahkan tekstur untuk jahitan atau, sekali lagi, dengan peta normal tambahan.
Semua jeda, semua transisi dapat disimulasikan dengan tekstur dan topeng, menciptakan hasil yang sama, tetapi dengan jumlah tekstur yang lebih kecil (kita hanya perlu menggunakan tekstur kain standar untuk proyek kami dan hanya mengubah warnanya dalam shader secara langsung).
Di sini Anda dapat mengajukan pertanyaan - apa yang harus dilakukan dengan memudar di sekitar bantal? Masker memecahkan masalah dengan bang =)
Selanjutnya kita bisa menggunakan tekstur yang sama untuk kursi. , . , . β . , , . , , , , .
. , , , β . , , .
, β , - , . , , . , , .
, , , , . , , . , - .
Substance Designer β , .
Epic Games "
Jobs in Unreal Engine β Surface Artist ", , . , , .
:, Qbercat Studio,
Β«Cat MoviesΒ» ( ,
, -. , ) . 3D- 1 . 1- 3-5 3D-. , , .
Snake discord- "
Unreal Engine β RuCommunity ", .
Flakky , .
, - β . , , , .
=)