Rorschach ink blot (alias gambar tes Psikologi) shader

12

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini
(sumber: bonnefil.com )

Saya ingin pola yang luar biasa ini ada dalam permainan saya. Sejauh ini saya sudah tahu ...

  1. Gambar satu sisi, lalu render dua kali ke kiri dan kanan.
  2. Bagaimana cara membuat pola ini di satu sisi? hmm ...
  3. Saya butuh bantuan.

Saya perlu wawasan tentang menulis shader untuk ini.

Jika menurut Anda tugas shader tidak pas, maka beri tahu saya, semoga dengan solusi alternatif!

Namun saya tidak melihat pendekatan yang mungkin untuk mencapai ini tanpa GPU. (kecuali jika Anda menyarankan untuk menyimpan banyak gambar rorscach yang disiapkan)

Bug Biru
sumber
Mesin / bahasa / kerangka apa yang Anda gunakan?
akaltar
@akaltar Unity Shaderlab
Blue Bug

Jawaban:

15

Untuk mendapatkan tampilan bertinta otentik itu, taruhan terbaik Anda mungkin adalah merakit perpustakaan gambar percikan tinta, goresan, dan giring.

Kemudian Anda dapat secara acak memilih beberapa dari mereka untuk memposisikan & memutar secara acak lebih dari setengah gambar. (Dengan bias menuju tepi jahitan sehingga bagian tengah uji Rorschach adalah yang terpadat. Anda mungkin dapat menggunakan sistem partikel untuk melakukan hamburan ini)

Jadikan itu sebagai tekstur dengan mode bungkus yang diatur ke cermin, dan sekarang Anda memiliki noda tinta simetris yang dapat Anda tampilkan tanpa pelindung khusus.

Berikut ini contoh hasil yang bisa Anda lakukan dengan cara ini:

Inkblot dirakit dari perpustakaan gambar percikan

Jika Anda tidak peduli tentang bentuk-bentuk bertinta tanda tangan itu, Anda juga bisa melakukan ini dengan shader yang membatasi dua pola suara yang saling bergeser. Itu mendapatkan bentuk tidak simetris yang tidak teratur, yang dapat dibuat untuk berubah terus menerus dari waktu ke waktu jika Anda suka, tetapi itu tidak akan terlihat seperti tinta.

Ini adalah metode yang dnk drone.vs.drones sarankan dalam jawaban lain, dan itu dapat memberikan hasil yang mirip dengan ini:

Inkblot ambang batas dari kebisingan

Sunting: inilah rincian cara kerja pendekatan berbasis kebisingan ...

Pertama kita mulai dengan beberapa kebisingan. Kebisingan 1 / f , sering disebut turbulensi, bekerja cukup baik. Anda dapat memanggang ubin kebisingan menjadi tekstur dan kemudian menjumlahkan satu atau lebih sampel darinya, mengubah offset / rotasi mereka untuk memvariasikan bentuk yang Anda dapatkan.

Pergolakan Ambang batas

Jika kita mengosongkan ini secara langsung, kita mendapatkan gambar seperti yang ada di kanan. Bentuknya hampir benar, tetapi agar terlihat seperti tes Rorschach itu harus paling padat di dekat tengah dan tipis ke arah tepi.

Kita dapat membuat ini bekerja dengan menambahkan gradien dari atas (kontras dilebih-lebihkan di sini untuk kejelasan)

Topeng tepi Topeng ditambahkan ke kebisingan

Lalu ambang dengan mengambil (sum - blackLevel) * contrast

(Berikut blackLeveladalah parameter yang mengontrol seberapa berbintik vs blobby hasilnya - nilai yang lebih tinggi berarti lebih hitam pekat - dan contrastmengontrol seberapa tajam pinggirannya)

Ambang batas

Mencerminkan gambar ini akan memberi Anda contoh Rorschach di atas.

DMGregory
sumber
Saya berusaha untuk mencapai melalui metode drone. Bisakah Anda menguraikan cara melakukannya? Saya menggunakan fungsi noise perlin tradisional tapi milik saya sepertinya kumpulan dari titik-titik acak.
Blue Bug
@BlueBug, saya telah menambahkan rincian langkah demi langkah di atas.
DMGregory
8

Anda dapat mencoba perlin noise (menggunakan gradien hitam / putih yang tepat), dan kemudian menerapkan mirroring kanan / kiri

masukkan deskripsi gambar di sini

dnk drone.vs.drones
sumber
Apakah itu kebisingan perlin? Itu terlihat sangat berbeda dari kebisingan perlin tradisional. Wow itu memang terlihat seperti "tinta keruh" seperti yang ada di film Watchmen.
Blue Bug
2
Itu semua tergantung pada fungsi transfer Anda dari nilai noise -> nilai pixel. Sepertinya ada tingkat jendela yang cukup kecil di sini yang menghasilkan kontras antara hitam dan putih dengan sedikit tepi lembut
MistaGiggles
Ya lakukan saja filter pass tinggi di suatu tempat di sekitar abu-abu kemudian hancurkan highs (yaitu kalikan dengan jumlah besar dan gosok bagian atas pada 255 atau apa pun nilai piksel maksimalnya)
Shayne