Gambar jala dinamis dalam Mesin Unreal 4


Dalam tutorial Unreal Engine 4 ini, Anda akan belajar cara menggambar warna pada semua jenis mesh.

Menggambar mesh memungkinkan pemain untuk mewarnai objek dalam game. Contoh menggambar jala: grafiti (goop) di Super Mario Sunshine , gel di Portal 2 dan tinta di Splatoon . Gambar dapat digunakan sebagai elemen gameplay atau hanya menjadi desain grafis. Bagaimanapun, menggambar dengan mesh membuka kemungkinan baru bagi desainer dan artis gameplay.

Meskipun efek ini digunakan hampir sama dalam contoh yang tercantum di atas, Anda dapat menggunakan gambar jala untuk banyak efek lainnya. Misalnya, Anda dapat melukis pada objek dengan kaleng cat, menggambar luka pada karakter, atau bahkan membiarkan pemain menggambar wajah mereka sendiri!

Dalam tutorial ini, Anda akan belajar cara menggambar di mesh kerangka. Untuk melakukan ini, kami akan melakukan hal berikut:

  • Rentangkan mesh ke bentuk UV-nya
  • Gunakan titik persimpangan jejak garis untuk membuat topeng jala bulat
  • Render mesh yang diperluas dan topeng bola di target render menggunakan tangkapan layar
  • Gunakan topeng untuk mencampur tekstur dalam bahan karakter.

Perhatikan bahwa tutorial ini bukan tentang menggambar simpul. Menggambar simpul tergantung pada resolusi mesh dan tidak dapat diubah selama pertandingan. Metode yang digunakan dalam tutorial ini, sebaliknya, bekerja terlepas dari resolusi mesh dan dapat digunakan selama pertandingan.

Catatan: dipahami bahwa Anda sudah mengetahui dasar-dasar bekerja dengan Unreal Engine. Jika Anda baru menggunakan Unreal Engine, lihat seri tutorial 10-bagian Unreal Engine kami untuk pemula .
Catatan: tutorial ini adalah bagian keempat dari serangkaian tutorial tentang cara menggunakan render target di Unreal Engine:

Mulai bekerja


Mulailah dengan mengunduh materi untuk tutorial ini. Buka zipnya , buka MeshPainterStarter dan buka MeshPainter.uproject . Klik Mainkan untuk melihat karakter yang akan kita warnai.


Seperti dalam tutorial tentang salju dan rumput, metode ini juga membutuhkan tangkapan adegan. Untuk menghemat waktu, saya sudah membuat cetak biru untuk menangkap pemandangan. Jika Anda ingin mempelajari lebih lanjut tentang opsi pengambilan, baca tutorial kami tentang membuat jejak kaki di salju .

Pertama, mari cari tahu bagaimana Anda bisa menggambar di mesh.

Gambar jala


Dalam kebanyakan kasus, jerat yang harus Anda kerjakan sudah memiliki pemindaian UV. Oleh karena itu, akan logis untuk membuat topeng menggunakan target render, dan kemudian menerapkannya ke jala. Namun, menghasilkan topeng langsung pada target render (menggunakan Draw Material untuk Render Target) biasanya menyebabkan kerusakan pada kulit UV.

Berikut ini adalah contoh pemindaian kubus UV dan tekstur masker bundar:


Dan ini topeng yang diterapkan pada kubus:


Seperti yang Anda lihat, topeng bola dimensi 2D tidak membengkokkan sudut dan tidak memperhitungkan geometri. Untuk menghasilkan topeng yang benar, topeng bola harus mengambil sampel posisi di dunia . Bagaimana cara mendapatkan akses ke posisi di dunia saat menggunakan simpul Draw Material to Render Target?

Jika Anda mempelajari metode menggambar dengan jerat, Anda mungkin menemukan video oleh Ryan Brooke tentang menggambar kerusakan karakter menggunakan target render (metode yang digunakan dalam tutorial saya didasarkan pada metodenya). Dalam video tersebut, ia berhasil membuat topeng bola tiga dimensi dan menumpuknya di target render. Dia berhasil melakukan ini karena dia menciptakan target render untuk menyimpan posisi mesh di dunia, yang kemudian dapat disampel dengan menggunakan topeng bola. Mari kita lihat metode ini lebih terinci.

Metode Ryan


Metode ini terdiri dari empat langkah. Langkah pertama adalah "menyebarkan" mesh yang diinginkan. Anda hanya perlu memindahkan semua simpul untuk mendapatkan mesh dalam bentuk UV-nya. Sebagai contoh, berikut adalah koordinat UV karakter:


Dan inilah karakter setelah digunakan untuk Unreal:


Anda dapat memperluas jala menggunakan perhitungan sederhana perpindahan posisi dunia (yang akan kita bahas di bawah).

Langkah kedua adalah menyandikan posisi dunia dalam target render. Ini dapat dilakukan dengan mengatur warna dari material sweep ke Absolute World Position dan menggunakan scene capture untuk menangkap sweep. Inilah yang akan menjadi target render:


Catatan: target render berubah warna karena karakternya dianimasikan. Ini mengarah pada perubahan posisi yang konstan di dunia.

Langkah ketiga adalah membuat topeng bola. Setelah mengakses posisi mesh di dunia, kita dapat mengambil sampelnya ke topeng bola, dan kemudian menggambar topeng bola langsung pada target render kedua.

Langkah terakhir adalah menerapkan masker ke bahan karakter untuk mencampur warna, tekstur, atau bahan. Berikut ini visualisasi tahap ketiga dan keempat:


Sekarang mari kita lihat metode yang saya usulkan.

Metode yang diusulkan


Meskipun metode Ryan berfungsi, ia membutuhkan yang berikut:

  • Dua render rendering target. Yang pertama menangkap jaring yang tidak berkembang, dan yang kedua mengumpulkan topeng bola.
  • Satu target render untuk menyimpan posisi di dunia
  • Jadikan target untuk mengumpulkan topeng bola. Untuk setiap aktor yang ingin Anda gambar, Anda perlu target render yang terpisah.

Metode yang dijelaskan dalam tutorial ini menolak posisi target rendering dan rendering kedua di dunia. Ini dimungkinkan dengan menggabungkan sapu dan topeng bulat menjadi satu bahan (sapu bahan). Setelah itu, sapuan ditangkap menggunakan mode komposit aditif untuk akumulasi masker bola.

Perlu dicatat bahwa kedua metode bekerja paling baik ketika mesh tidak memiliki UV yang tumpang tindih. Jika UV tumpang tindih, maka piksel memiliki ruang UV yang sama, dan karenanya informasi yang sama tentang topeng. Misalnya, kedua tangan karakter dapat ditempatkan-UV di ruang yang sama. Jika topeng diterapkan ke satu tangan, maka itu juga akan diterapkan ke yang lain.

Sekarang kita sudah terbiasa dengan metode ini, mari kita mulai dengan membuat bahan sweep.

Buat bahan yang rata


Buka folder Bahan dan buat materi baru. Beri nama M_Unwrap , lalu buka.

Ubah opsi berikut:

  • Model Shading: Tidak menyala. Berkat ini, pengambilan adegan tidak akan menangkap informasi pencahayaan.
  • Dua Sisi: Diaktifkan. Terkadang wajah yang diperluas dapat melihat ke arah lain (ini tergantung pada bagaimana pemindaian UV mesh dilakukan). Parameter Dua Sisi memastikan bahwa kita melihat semua wajah terbalik.
  • Penggunaan \ Digunakan dengan Skeletal Mesh: Diaktifkan. Ketika parameter ini dihidupkan, shader yang diperlukan untuk material agar dapat bekerja pada jerat rangka akan dikompilasi.


Selanjutnya kita perluas mesh. Untuk melakukan ini, buat diagram di bawah ini. Harap perhatikan bahwa saya telah membuat parameter CaptureSize dan UnwrapLocation di aset MPC_Global.


Jadi kami akan melakukan UV-scan dari mesh di lokasi yang ditentukan dan dengan ukuran yang ditentukan. Perhatikan bahwa jika pemindaian UV unik dari jala Anda berada di saluran terpisah, Anda perlu mengubah Indeks Koordinat simpul TextureCoordinate . Misalnya, jika koordinat UV unik ada di saluran 1, maka Indeks Koordinat harus ditetapkan ke 1 .

Tahap selanjutnya adalah pembuatan topeng bola. Untuk melakukan ini, kita memerlukan dua parameter: titik persimpangan dan jari-jari bola. Buat node yang dipilih:


Skema ini akan mengembalikan putih untuk piksel di dalam topeng bulat dan hitam untuk piksel di luarnya. Jangan khawatir tentang menetapkan nilai untuk parameter, karena kami akan melakukan ini secara tumpul.

Penting untuk mengatur simpul Posisi Dunia Absolut ke Posisi Dunia Absolut (Tidak Termasuk Pengimbang Shader Material) . Ini diperlukan karena posisi piksel di dunia akan berubah karena membuka gulungan. Tidak Termasuk Material Shader Offsets memberi kami posisi awal di dunia sebelum digunakan.

Dan hanya itu yang dibutuhkan untuk bahan penyapu. Klik Terapkan dan tutup materi. Selanjutnya, kita perlu menerapkan materi ke karakter untuk mengembangkannya.

Penempatan karakter


Dalam tutorial ini, cetak biru grapple akan melakukan penyebaran dan ambil. Pertama, kita membutuhkan turunan dinamis dari material sapuan. Buka folder Blueprints dan buka BP_Capture . Kemudian tambahkan node yang disorot ke Event BeginPlay . Pastikan Induk diatur ke M_Unwrap .


Selanjutnya, kita membutuhkan fungsi untuk melakukan sweep dan capture. Buat fungsi baru yang disebut PaintActor . Kemudian buat input berikut:

  • ActorToPaint: Jenisnya harus memiliki nilai Aktor . Ini adalah aktor yang akan kami sapu dan tangkap.
  • HitLocation: ketik Vector . Ini akan menjadi titik pusat topeng bola.
  • BrushRadius: type Float . Jari-jari topeng bundar dalam satuan dunia.


Meskipun metode menggambar ini dapat bekerja dengan aktor apa pun, kami hanya akan memeriksa apakah aktor yang dihasilkan diwarisi dari kelas Karakter . Dan untuk menyederhanakan kode, kita akan menyimpan komponen skeleton mesh dalam sebuah variabel, karena kita harus merujuknya beberapa kali. Untuk melakukan ini, kami akan menambahkan node yang dipilih:


Sekarang saatnya untuk melakukan pengembangan dan aplikasi topeng bola. Untuk melakukan ini, tambahkan node yang dipilih ke akhir rantai simpul:


Inilah yang dilakukan setiap baris:

  1. Pertama, kami melestarikan bahan sumber mesh sehingga kami bisa menerapkannya kembali nanti. Lalu kami menerapkan bahan sapuan.
  2. Baris ini melewati bahan pindaian titik persimpangan dan jari-jari sikat untuk menerapkan topeng bola

Untuk menguji sapuan, pertama-tama kita perlu melacak garis dari pemain untuk mendapatkan titik persimpangan.

Mendapatkan Titik Persimpangan


Klik Kompilasi dan kembali ke editor utama. Kemudian tutup BP_Player . Buka fungsi Tembak dan tambahkan node yang disorot. Untuk tutorial ini, atur Brush Radius ke 10 .


Klik Kompilasi dan tutup BP_Player . Klik Mainkan , lalu klik kiri pada karakter untuk menelusuri dan menerapkan topeng bola.


Jika Anda tidak mengerti mengapa topeng terus bergerak, maka ini karena bagian-bagiannya bergerak relatif terhadap topeng bola. Namun, ini bukan masalah, karena kami hanya melakukan sweep capture pada saat persimpangan.

Sekarang kita telah membuka kasa, kita perlu melakukan sweep capture.

Sapu Tangkap


Sebagai permulaan, alangkah baiknya menambahkan bidang hitam yang tidak menyala di belakang mesh yang diperluas. Ini menghindari lapisan di tepi kulit UV. Buka BP_Capture , dan kemudian tambahkan komponen Plane yang disebut BackgroundPlane . Untuk menghemat waktu, saya sudah membuat materi hitam. Untuk materi, pilih M_Background .


Dalam tutorial ini, kami menggunakan 500 × 500 unit untuk membuka dan menangkap, sehingga bidang latar belakang harus tidak kurang dari ukuran ini. Tetapkan Skala ke (5.0, 5.0, 1.0) .


Karena posisi pesawat dan posisi sapuannya sama, alangkah baiknya untuk menggeser pesawat ke bawah untuk menghindari konflik-z. Untuk melakukan ini, atur nilai Lokasi (0,0, 0,0, -1,0) .


Selanjutnya kita perlu melakukan capture. Kembali ke fungsi PaintActor dan tambahkan node yang disorot:


Jadi kita akan menangkap mesh yang diperluas, setelah itu bahan sumber mesh akan diterapkan lagi.

Dalam skema yang dihasilkan, tangkapan adegan menimpa konten target render. Agar topeng bola menumpuk, kita perlu membuat tangkapan adegan menambah konten sebelumnya. Untuk melakukan ini, pilih komponen SceneCapture dan atur Scene Capture \ Composite Mode ke Additive .


Klik Kompilasi , lalu tutup cetak biru. Sekarang kita perlu menggunakan target render dalam materi karakter.

Penggunaan topeng


Pergi ke Karakter \ Manekin \ Bahan dan buka M_Mannequin . Kemudian tambahkan node yang disorot. Setel Sampel Tekstur ke RT_Capture .


Skema ini akan menampilkan warna merah di mana topeng putih, dan oranye di mana topeng hitam. Namun, kita bisa membuat tekstur atau lapisan material bercampur.

Klik Terapkan dan tutup materi. Klik Mainkan dan klik kiri pada karakter untuk mulai menggambar.



Ke mana harus pergi selanjutnya?


Proyek yang sudah selesai dapat diunduh dari sini .

Meskipun kami menggunakan topeng bola dalam tutorial ini, ini bukan satu-satunya gambar yang dapat digunakan. Bagaimanapun, ada kubus, silinder, kerucut dan banyak lagi! Untuk mempelajari lebih lanjut tentang bentuk-bentuk bentuk ini dan cara menggunakannya, Anda dapat membaca dua posting berikut:


Jika Anda ingin mempelajari cara lain untuk menggambar di mesh, baca artikel Tom Lohman Rendering Wounds on Characters . Alih-alih mengumpulkan topeng bundar, ia menggunakan sejumlah topeng bulat. Keuntungan dari metode ini adalah murahnya (yang tergantung pada jumlah topeng bola) dan kesederhanaan relatif dari menggerakkan topeng. Kerugian dari metode ini adalah pembatasan ketat pada jumlah topeng bola.

Source: https://habr.com/ru/post/id423165/


All Articles