Bagaimana saya bisa menghasilkan tekstur yang tampak seperti daun teh sisa?

11

Kami sedang mengerjakan proyek untuk iPhone dan Windows Phone 7 di mana kami ingin dapat menghasilkan daun teh di bagian bawah cangkir. Tidak harus terlihat realistis-foto, dan sebenarnya kartun-y tidak apa-apa.

Apa jenis teknik yang harus kita teliti untuk mencapai ini? Apakah ada perpustakaan (lebih disukai dalam bahasa C, tapi kami bisa menerjemahkan) yang akan membantu?

Berikut adalah beberapa contoh yang diambil dari pencarian Gambar Google

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Jedidja
sumber
Bisakah Anda lebih spesifik tentang kebutuhan Anda? Apakah mereka perlu berputar-putar, berbeda setiap kali? Karena jika tidak ada persyaratan animasi atau keunikan, saya tidak mengerti mengapa Anda tidak bisa hanya menggunakan foto / gambar sebagai tekstur.
phillipwei
@ phillipwei Ya mereka harus berbeda setiap kali, atau setidaknya cukup berbeda sehingga tidak akan terasa seperti stok foto atau apa pun.
Jedidja

Jawaban:

15

Bagaimana saya mungkin melakukannya sehingga saya bisa mempertahankan kontrol seni dan tidak berpotensi menghabiskan waktu lama mencoba untuk mengubah metode prosedural untuk mendapatkannya dengan benar ...

Pertama, secara manual buat sejumlah sprite rumpun daun teh sebagai "kolam" seni Anda - tidak masing-masing sebagai secangkir penuh daun teh, tetapi lebih seperti pengelompokan yang lebih kecil. Katakan, 20 atau lebih?

Kemudian tempatkan nomor acak dari mereka pada koordinat acak di pangkalan "cangkir". Berikan masing-masing rotasi dan skala acak ditambah cermin horizontal dan / atau vertikal acak. Ini seharusnya menciptakan hasil yang baik.

Pendekatan ini akan memberi Anda kebebasan artistik dalam menciptakan rumpun individu untuk memiliki tampilan yang Anda inginkan, sambil memungkinkan untuk berbagai hasil (dengan asumsi sprite yang cukup untuk dipilih).

Selain itu, dengan ini (dan metode acak apa pun termasuk Perlin noise based), Anda sebenarnya dapat menyemai generator nomor acak pada awal proses dengan benih yang dikenal untuk membuat hasil yang dapat direproduksi. Jika Anda menyimpan benih, Anda dapat membuat kembali pola yang sama persis dengan memasang kembali sesaat sebelum urutan dimulai. Anda bahkan dapat melakukan hal-hal menyenangkan seperti meminta seseorang mengetik nama mereka, mengubah huruf menjadi angka (jumlah ASCII, dll.), Kemudian menggunakannya sebagai benih sebagai semacam "pola daun teh ini disesuaikan untuk ANDA!" benda.

Inilah beberapa pseudocode untuk apa yang saya maksud, jika itu membantu ...

var sprites = [...]; // Array of tea leaf sprites

var n_leaves = rand(5)+5; // Random number of leaves from 5-9
for (i=0; i<n_leaves; i++) {
    var sprite_index = rand(sprites.length);  // Random sprite index
    var r = rand(CUP_DIAMETER);          // Random radius for point on disk calc
    var theta = rand(2*PI);              // Random theta (rotation) for point on disk
    var sprite_x = sqrt(r) * cos(theta); // Sprite X
    var sprite_y = sqrt(r) * sin(theta); // Sprite Y
    var sprite_rotation = rand(2*PI);    // Sprite rotation
    var sprite_scale = rand(1) + 0.5;    // Sprite scale from 0.5 to 1.5
    var sprite_h_mirror = (rand(1) < 0.5 ? true : false); // If true, mirror horizontally
    var sprite_v_mirror = (rand(1) < 0.5 ? true : false);   // If true, mirror vertically
    draw_sprite(sprite_index, sprite_x, sprite_y, sprite_rotation, sprite_h_mirror, sprite_v_mirror);
}

Lihat http://mathworld.wolfram.com/DiskPointPicking.html untuk diskusi hebat tentang cara memilih titik acak dalam disk dan mengapa saya menggunakan seluruh hal sqrt / sin / cos.

Tim Holt
sumber
7

Coba perlin noise dengan nilai cutoff biner 0,8 atau lebih?

Contoh gambar yang diunggah ke http://imgur.com/a/Ydc4y . Yang pertama adalah gambar kedua dengan ambang batas yang diterapkan. Yang kedua adalah noise dasar perlin, di mana Anda dapat menemukan beberapa referensi bagus seperti http://en.wikipedia.org/wiki/Perlin_noise dan http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter26.html .

Anda dapat bermain sedikit dengan jumlah dan skala oktaf dalam perlin noise untuk memvariasikan seberapa halus output akan terlihat, serta ambang batas untuk menentukan berapa banyak (rata-rata - seperti kebisingan) daun teh akan ada.

omong kosong
sumber
3
Ini bisa menjadi jawaban yang lebih baik dengan beberapa tautan dan contoh dari apa yang bisa dihasilkan.
MichaelHouse
ide yang bagus, meskipun gambar statis dapat digunakan dan daerah melingkar dapat dijepit dalam pixel shader dan ujung-ujung lingkaran itu dikeraskan tanpa perlu menghasilkan nilai kebisingan Perlin per-pixel (dari pengalaman saya, metode ini agak lambat ).
teodron
Menghasilkan suara perlin itu sendiri agak berat; Anda dapat menggunakan tekstur suara yang dikomputasi untuk efek ini (dan banyak lainnya). Anda juga dapat menggunakan metode ini untuk melakukan precompute juga.
dascandy
4
-1. Setelah melihat banyak daun teh, dan banyak suara Perlin (1 / f), saya tidak bisa mengatakan mereka terlihat sama. Perlin noise mungkin merupakan titik awal yang tepat, tetapi tujuannya tidak cocok untuk varian penjumlahan (1 / f) yang biasa.
1
Saya setuju bahwa pendekatan kebisingan perlin tidak praktis. Untuk memverifikasinya saya mencoba menciptakan efek di photoshop mulai dari perlin noise. Inilah hasilnya . Meskipun saya pikir itu terlihat oke, masalahnya terletak pada jumlah tweaker yang harus saya lakukan. Tidak dapat benar-benar memikirkan cara untuk menciptakan kembali semua penyesuaian itu secara prosedural, jadi saya memilih pendekatan berbasis sprite yang disarankan oleh Tim Holt.
David Gouveia