Çay yaprakları gibi görünen bir dokuyu nasıl oluşturabilirim?


11

İPhone ve Windows Phone 7 için, bir bardağın dibinde çay yaprakları üretebilmek istediğimiz bir proje üzerinde çalışıyoruz. Foto-gerçekçi görünmek zorunda değil ve aslında karikatür-y tamam.

Bunu başarmak için ne tür teknikler araştırmalıyız? Yararlı olabilecek herhangi bir kütüphane var mı (tercihen C dilinde, ancak tercüme edebiliriz)?

Google Görsel aramadan alınan bazı örnekler

resim açıklamasını buraya girin resim açıklamasını buraya girin


Gereksinimleriniz konusunda daha spesifik olabilir misiniz? Her seferinde farklı olmaları gerekiyor mu? Çünkü herhangi bir animasyon veya benzersizlik gerekliliği yoksa, neden bir fotoğraf / çizimin doku olarak kullanılamadığını anlamıyorum.
phillipwei

@phillipwei Evet, her seferinde farklı olmalılar ya da en azından stok fotoğrafları ya da herhangi bir şey gibi hissetmeyecek kadar makul derecede farklı olmalılar.
Jedidja

Yanıtlar:


15

Muhtemelen bunu nasıl yapacağım, böylece bazı sanat kontrolünü koruyabilir ve doğru bir şekilde elde etmek için prosedürel bir yöntemi değiştirmeye uzun zaman harcayamazdım ...

İlk olarak, elinizdeki "havuz" olarak çay yaprağı kümelerinin bir dizi spritesini oluşturun - her biri bir fincanın tamamı çay yaprağı değerinde değil, daha küçük bir gruplama gibi. Söyle, 20 kadarı?

Sonra "fincan" üssünde rastgele koordinatlara rastgele bir sayı yerleştirin. Her birine rastgele bir döndürme ve ölçek artı rastgele yatay ve / veya dikey yansıtma verin. Bu iyi bir sonuç yaratmalı.

Bu yaklaşım, istediğiniz görünüme sahip olmak için bireysel kümeleri yaratmada sanatsal özgürlük sunarken, çok çeşitli sonuçlara izin verir (seçim için yeterli sprite varsayarak).

Ek olarak, bu (ve Perlin gürültüye dayalı herhangi bir rastgele yöntemle), tekrarlanabilir sonuçlar elde etmek için rastgele sayı üretecini işlemin başlangıcında bilinen bir tohumla tohumlayabilirsiniz. Çekirdeği kaydederseniz, sekans başlamadan hemen önce yeniden tohumlayarak aynı modeli tekrar oluşturabilirsiniz. Hatta birinin adını yazması, harfleri bir sayıya dönüştürmesi (toplam ASCII, vb.) Gibi eğlenceli şeyler bile yapabilir, daha sonra bunu tohum olarak bir çeşit "SİZİN için özelleştirilmiş bu çay yaprağı deseni!" şey.

İşte demek istediğim şey için bazı sözde kod, eğer yardımcı olursa ...

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);
}

Check out http://mathworld.wolfram.com/DiskPointPicking.html bir diskte rasgele nokta seçimiyle ve neden şey çünkü / bu bütün sqrt / sin kullanıyorum nasıl büyük bir tartışma için.


7

0.8 veya daha fazla ikili kesme değeri ile perlin gürültüsünü deneyin?

Http://imgur.com/a/Ydc4y adresine örnek resim yükledi . Birincisi, eşik uygulanmış ikinci görüntüdür. İkincisi, http://en.wikipedia.org/wiki/Perlin_noise ve http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter26.html gibi birden fazla iyi referans bulabileceğiniz temel perlin gürültüsüdür .

Çıktının ne kadar pürüzsüz görüneceğini ve çayın ne kadar (ortalama olarak - gürültü olduğu gibi) çıkacağını belirlemek için eşik değerinin yanı sıra perlin gürültüsündeki oktavların sayısı ve ölçeği ile biraz oynayabilirsiniz.


3
Bu, bazı bağlantılar ve neyin üretilebileceğine dair örnekler ile daha iyi bir cevap olabilir.
MichaelHouse

Statik görüntüler kullanılabilse ve dairesel bir bölge bir piksel gölgelendiricide sıkıştırılabilir ve o dairenin kenarları piksel başına Perlin gürültü değeri üretmeye gerek kalmadan yumuşatılabilir (deneyimime göre, bu yöntem biraz yavaş ).
teodron

Perlin gürültüsünün kendisi biraz ağırdır; yine de bu (ve daha birçok) etki için önceden hesaplanmış bir gürültü dokusu kullanabilirsiniz. Bu yöntemi, birkaçını önceden hesaplamak için de kullanabilirsiniz.
dascandy

4
-1. Çay yaprakları bir sürü ve toplamı (1 / f) Perlin gürültü bir sürü baktım, onlar tüm benzer bakmak söyleyemeyiz. Perlin gürültüsü doğru başlangıç ​​noktası olabilir, ancak amaç normal toplam (1 / f) varyantı için uygun değildir.

1
Perlin gürültü yaklaşımının pratik olmadığını kabul ediyorum. Bunu doğrulamak için perlin gürültüsünden başlayarak photoshop'ta efekti yeniden yaratmaya çalıştım. İşte sonuç . İyi görünse de, sorun yapmak zorunda olduğum ayarlama miktarında yatıyor . Gerçekten tüm bu tweaking prosedürel olarak yeniden oluşturmak için bir yol düşünemiyorum, bu yüzden Tim Holt tarafından önerilen sprite tabanlı yaklaşım için oy.
David Gouveia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.