Unity3D - Bagaimana cara mengirim sprite 2D?

8

Saya menggunakan pencahayaan vertex dinamis pada sprite 2D. Pada sprite yang lebih besar, pencahayaannya lebih jelek daripada yang kecil. Ini karena setiap sprite hanyalah kuadrat dari dua segitiga. Tidak cukup simpul di sana untuk penerangan di area yang lebih besar.

Apakah ada cara untuk menggunakan lebih banyak segitiga pada sprite? Mungkin bahkan tergantung pada seberapa banyak ruang layar yang mereka tutup?

aggsol
sumber
1
Sepertinya Anda ingin membagi quad Anda? Jika itu masalahnya saya ada beberapa contoh yang baik dalam kode semu untuk mencapai ini. Afaik Unity akan memungkinkan Anda mengakses objek permainan mesh (dan segitiga / simpulnya) yang seharusnya memungkinkan untuk mencapai apa yang Anda inginkan. Berikut adalah salah satu contoh di sini di gamedev untuk menundukkan paha depan: Bagaimana cara membagi quad? . Apakah ini sejalan dengan apa yang Anda cari?
Logham
Ya, membagi quad adalah pendekatan yang saya cari. Ini termasuk berkelok-kelok dan UV saya kira. Dengan begitu saya akan memiliki lebih banyak segitiga.
aggsol
Sudahkah Anda mencoba menggunakan shading tessellation saat menggambar sprite Anda? docs.unity3d.com/Manual/SL-SurfaceShaderTessellation.html answers.unity3d.com/questions/583960/...
ClassicThunder
2
Ketika Anda menjual quad, nilai pencahayaan untuk simpul akan hanya diinterpolasi. Quad datar, jadi dengan lebih banyak simpul, interpolasi hanya akan linear di seluruh quad. Bagaimana menambahkan lebih banyak segitiga memperbaiki masalah ini. Ini terdengar seperti sesuatu yang harus diselesaikan dengan pixel shader.
Arun R
@ArunR Poin bagus, tetapi jika misal quad lebih besar dari rentang titik cahaya maka segitiga akan menggunakan cahaya jika verteks tidak menyala lagi. Sayangnya, penggunaan pixel shader bukan pilihan di semua perangkat.
aggsol

Jawaban:

2

Kedengarannya seperti Anda perlu membuat objek game Anda sendiri dan menggunakan algo triangulasi khusus untuk menangani detail berdasarkan beberapa ukuran matematika terkait.

Mungkin sesuatu seperti ini bisa membantu ...

http://forum.unity3d.com/threads/tessellation-algorithms-for-polygons.228051/

Opsi lain mungkin menggunakan shader yang lebih pintar dan peta benjolan dengan pendekatan tipe sprite ... Anda.

Sulit untuk mengatakan tanpa tahu persis apa yang Anda coba capai untuk apa yang paling cocok. Semoga salah satu dari ini membantu.

Perang
sumber
Idenya adalah untuk menggunakan cahaya titik pada sprite karena jauh lebih cepat daripada lampu pixel. Terutama beberapa platform seluler memiliki chip grafis spec rendah.
aggsol
Jadi Anda mengatakan Anda memiliki quad besar yang ingin Anda bagi kemudian per titik cahaya hasilnya? Anda bisa mendapatkan hasil yang lebih baik dan lebih cepat dengan menggunakan pencahayaan per piksel pada IMO res quad rendah yang ada tetapi jika itu yang Anda inginkan maka lakukanlah. Memisahkan quad seharusnya tidak terlalu sulit bukan?
Perang
Ingatlah bahwa apa yang Anda hemat dengan pencahayaan pixel Anda akan secara efektif kehilangan dengan memiliki buffer vertex yang lebih besar ... pilihan lain tentu saja adalah memiliki beberapa matematika di vertex shader untuk memberikan tingkat cahaya ke pixel shader berdasarkan porsi dari vertex sehingga Anda masih mendapatkan VB kecil dan tidak per pixel cahaya.
Perang
memo ide itu ... itu tidak akan berhasil ... hmmmm
War
1
Jika Anda membutuhkan klarifikasi atas pertanyaan tersebut, kirimkan komentar pada pertanyaan tersebut.
MichaelHouse