Bagaimana cara membuat objek berpola dengan kepadatan pola variabel secara real-time?

8

Asumsikan ada beberapa nilai p, dihitung per-frame, yang bervariasi terus menerus di atas permukaan suatu objek. Nilai pmenentukan kepadatan beberapa pola di permukaan. Misalnya, dalam kasus dengan hanya dua kemungkinan kepadatan jika kepadatan p < 0.3tinggi, jika tidak maka akan rendah.

Saya telah memikirkan solusi tingkat tinggi yang sederhana: membuat dua tekstur, masing-masing dengan kepadatan berbeda, dan berdasarkan pada nilai psampel dari yang sesuai. Namun, ada masalah dengan batas antara kepadatan tinggi dan rendah.

Berikut adalah contoh untuk mengilustrasikan masalah (perhatikan masalah saya BUKAN eksklusif untuk contoh pola titik-titik ini. Saya jelaskan pola yang saya kerjakan nanti):

masukkan deskripsi gambar di sini

Dan di sini adalah ambang batas antara rendah dan tinggi (ditampilkan pada tekstur kepadatan tinggi tapi itu tidak relevan.) Jika di bawah garis, itu menyiratkan tekstur kepadatan tinggi harus disampel.

masukkan deskripsi gambar di sini

Dan akhirnya di sini adalah perbandingan antara apa yang diinginkan dan apa yang sebenarnya terjadi dengan menggunakan metode ini:

masukkan deskripsi gambar di sini

Masalahnya adalah bahwa ketika lingkaran dengan kepadatan tinggi melewati garis, itu akan diabaikan ketika pmenunjukkan sampel dengan kepadatan rendah untuk dijadikan sampel, menghasilkan lingkaran terpotong. Saya tidak tahu bagaimana menyelesaikan masalah ini karena psetiap frame bervariasi, jadi saya tidak bisa 'memanggang' batas antara dua kepadatan. Sangat mudah untuk mencegah masalah sebaliknya dengan membuat tekstur kerapatan tinggi dari yang lebih rendah (yaitu jika lingkaran berada pada tekstur kerapatan rendah memastikannya pada tekstur kerapatan tinggi.)

Saya tertarik jika ada yang punya cara untuk meningkatkan solusi saya atau bahkan memiliki metode lain sama sekali. Kendala di sini adalah yang pdihitung per-frame secara real-time. Batasan lain terkait dengan tekstur pola: polanya hitam dan putih, di mana hitam adalah polanya dan putih adalah latar belakangnya (seperti lingkaran pada contoh). Polanya mungkin bukan hanya bentuk identik yang diulang, tetapi setiap pengaturan bentuk hitam sewenang-wenang di atas latar belakang putih. (Mungkin pola adalah pilihan kata yang salah.)

Saya tidak terbiasa dengan penelitian di bidang ini, jadi saya tidak yakin kata kunci mana yang harus dicari, jadi saya akan sangat menghargai jika ada yang bisa mengarahkan saya ke arah yang benar.

Ryan
sumber
3
Apakah tekstur Anda yang sebenarnya juga hanya titik-titik hitam di atas putih? Jika demikian, Anda mungkin dapat menghasilkan tekstur secara prosedural, misalnya dengan pengambilan sampel cakram Poisson dengan jari-jari yang bervariasi. Jika tidak, jika tekstur Anda adalah sesuatu yang lebih berkelanjutan, campuran mungkin menjadi pilihan (itu tidak akan bekerja dengan baik untuk tekstur renyah seperti contoh Anda). Jadi, jika Anda bisa memperjelas seperti apa pola / tekstur aktual Anda yang mungkin membantu mendapatkan jawaban yang lebih bermanfaat.
Martin Ender
1
Proses posting? Sesuatu seperti varian pada deteksi tepi: tuliskan jarak ke titik pusat terdekat kemudian, di ruang layar, cari setiap lingkungan piksel berukuran titik untuk setiap nilai (mendekati) nol. Ini memberikan titik-titik ruang layar, jadi Anda harus menulis dan mengacaukan turunan UV untuk kembali ke ruang tekstur ... Perhatikan bahwa Anda masih memiliki masalah kontinuitas - karena p batas tinggi / rendah bergerak di permukaan, titik-titik muncul dan menghilang. Jika p dapat kontinu (batas lunak) Anda mungkin dapat mengecilkan / menumbuhkan titik-titik di sepanjang batas ...
Daniel M Gessel
1
Pilihan lain adalah melihat ke ubin Wang. pengantar , genetika ubin , permata GPU
maogenc
1
Pernahkah Anda melihat pemboman tekstur? http.developer.nvidia.com/GPUGems/gpugems_ch20.html
Mikkel Gjoel
1
Bisakah Anda memberikan gambaran tentang berbagai bentuk / pola yang perlu Anda liput dan seberapa banyak fleksibilitas yang ada dalam pendekatan ini? @ DanielMGessel saran untuk mengubah jari-jari lingkaran bukan kepadatan mereka mungkin membuat hal-hal lebih sederhana dan memberikan animasi lebih halus tetapi belum jelas seberapa besar pendekatan Anda dibatasi.
trichoplax

Jawaban:

6

Untuk memastikan bahwa bentuk pola selalu ada atau tidak ada sama sekali, tidak pernah terputus, penting untuk memastikan bahwa nilai yang sama pdigunakan untuk semua texels dalam bentuk. Dalam contoh lingkaran Anda, semua teks dalam lingkaran tertentu harus disetujui p.

Saya berasumsi bahwa Anda memiliki beberapa cara untuk mengevaluasi ppada titik tertentu di permukaan (apakah itu dilihat dari tekstur atau dihitung dari beberapa fungsi). Maka salah satu cara untuk memastikan sekelompok texels mendapatkan nilai yang sama padalah dengan memastikan mereka semua mencarinya dari titik yang sama.

UV titik evaluasi ini dapat disimpan dalam saluran ekstra dari tekstur pola. Misalnya, Anda bisa membuat saluran merah dan hijau menyimpan koordinat UV untuk mengevaluasi p, saluran biru menyimpan ambang untuk mengaktifkan elemen pola itu, dan alpha menyimpan tingkat abu-abu antialiased dari pola yang akan ditampilkan. Data ambang batas UV + juga bisa dalam tekstur sekunder yang terpisah jika diinginkan.

Untuk menghasilkan tekstur ambang batas UV + ini, mulai dari tekstur pola input, Anda dapat secara terprogram menemukan komponen yang terhubung (misalnya dengan mencari piksel hitam dan mengisi banjir). Atur titik evaluasi untuk semua texels di setiap komponen ke UV pusat komponen, dan buat ambang acak untuknya. Kemudian, saat rendering, gunakan pixel shader yang pertama kali mencicipi tekstur ini, kemudian mencari ppada titik evaluasi yang diberikan dan membandingkannya dengan ambang batas yang diberikan.

Dengan begitu, setiap bentuk pola akan melihat pnilai dan ambang yang seragam , dan akan hidup atau mati sepenuhnya. Dengan pbertambahnya, lebih banyak bentuk akan melewati ambang dan muncul, memberikan kesan kepadatan yang terus berubah.

Nathan Reed
sumber
1
Saya sangat suka ide ini, saya harus mencobanya. Masuk akal. Terima kasih!
Ryan
0

Pikiran lain ada di sepanjang garis ini. Jika Anda memiliki titik seragam yang ditetapkan pada pesawat dan fungsi pemetaan dari pesawat ke permukaan target maka fungsi kerapatan pada permukaan adalah bagaimana area memetakan dari permukaan pesawat ke target. Jadi peta pelestarian area akan menghasilkan titik yang seragam pada target.

MB Reynolds
sumber