Come posso generare una trama che assomigli a foglie di tè rimaste?


11

Stiamo lavorando a un progetto per iPhone e Windows Phone 7 in cui vorremmo essere in grado di generare foglie di tè sul fondo di una tazza. Non deve apparire fotorealistico, e in realtà cartoon-y è ok.

Che tipo di tecniche dovremmo cercare per raggiungere questo obiettivo? Ci sono delle librerie (preferibilmente in C, ma possiamo tradurre) che potrebbero essere utili?

Ecco alcuni esempi estratti da una ricerca di immagini di Google

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


Potresti essere più specifico sulle tue esigenze? Devono essere in giro, ogni volta diversi? Perché se non ci sono requisiti di animazione o unicità non vedo perché non si può semplicemente usare una foto / disegno come trama.
phillipwei,

@phillipwei Sì, dovrebbero essere ogni volta diversi, o almeno ragionevolmente diversi da non sembrare foto d'archivio o altro.
Jedidja,

Risposte:


15

Come probabilmente lo farei in modo da poter mantenere un po 'di controllo artistico e potenzialmente non passare molto tempo a provare a modificare un metodo procedurale per farlo nel modo giusto ...

Per prima cosa, crea manualmente una serie di sprite di ciuffi di foglie di tè come "pool" artistico - non ognuno come foglie di tè di un'intera tazza, ma più come un raggruppamento più piccolo. Diciamo, 20 di loro o giù di lì?

Quindi posizionane un numero casuale a coordinate casuali sulla base della "coppa". Dai a ciascuno una rotazione e una scala casuali più il mirroring orizzontale e / o verticale casuale. Questo dovrebbe creare un buon risultato.

Questo approccio ti darà la libertà artistica nel creare i singoli gruppi per avere l'aspetto che desideri, consentendo nel contempo una grande varietà di risultati (presupponendo che gli sprite siano sufficienti per scegliere).

Inoltre, con questo (e qualsiasi metodo casuale incluso il rumore di Perlin), è possibile eseguire il seeding del generatore di numeri casuali all'inizio del processo con un seed noto per ottenere risultati riproducibili. Se si salva il seme, è possibile ricreare esattamente lo stesso modello eseguendo nuovamente il rendering appena prima dell'inizio della sequenza. Potresti anche fare cose divertenti come avere qualcuno che digita il suo nome, trasformare le lettere in un numero (somma ASCII, ecc.), Quindi usarlo come seme come una sorta di "questo modello di foglia di tè personalizzato per TE!" cosa.

Ecco alcuni pseudocodici per cosa intendo, se questo aiuta ...

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

Dai un'occhiata a http://mathworld.wolfram.com/DiskPointPicking.html per una grande discussione su come scegliere un punto casuale in un disco e perché sto usando l'intera cosa sqrt / sin / cos.


7

Prova il rumore perlin con un valore di taglio binario di 0,8 o giù di lì?

Immagine di esempio caricata su http://imgur.com/a/Ydc4y . La prima è la seconda immagine con una soglia applicata. Il secondo è il rumore di base del perlin, per il quale è possibile trovare più buoni riferimenti come http://en.wikipedia.org/wiki/Perlin_noise e http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter26.html .

Puoi suonare un po 'con il numero e la scala delle ottave nel rumore del perlin per variare la fluidità dell'output, così come la soglia per determinare quante foglie di tè (in media - in quanto rumore) ci saranno.


3
Questa potrebbe essere una risposta migliore con alcuni link ed esempi di ciò che potrebbe essere prodotto.
MichaelHouse

buona idea, anche se è possibile utilizzare immagini statiche e una regione circolare può essere bloccata in uno shader pixel e i bordi di quel cerchio sfumati senza la necessità di produrre un valore di rumore Perlin per pixel (dalla mia esperienza, questo metodo è un po 'lento ).
teodron,

Generare il rumore del perlin stesso è un po 'pesante; puoi tuttavia utilizzare una trama del rumore precompilato per questo (e molti altri) effetti. Puoi anche usare il metodo per pre-calcolarne alcuni.
dascandy

4
-1. Dopo aver guardato molte foglie di tè e un sacco di rumore di Perlin (1 / f), non posso dire che si assomiglino affatto. Il rumore di Perlin potrebbe essere il giusto punto di partenza, ma l'obiettivo non è adatto alla solita variante somma (1 / f).

1
Concordo sul fatto che l'approccio del rumore perlin è impraticabile. Per verificarlo ho provato a ricreare l'effetto in Photoshop partendo dal rumore del perlin. Ecco il risultato . Mentre penso che vada bene, il problema sta nella quantità di modifiche che ho dovuto fare. Non riesco davvero a pensare a un modo per ricreare tutto questo ritocco procedurale, quindi voto per l'approccio basato sullo sprite suggerito da Tim Holt.
David Gouveia,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.