¿Cómo puedo generar una textura que se parezca a las hojas de té sobrantes?

11

Estamos trabajando en un proyecto para iPhone y Windows Phone 7 en el que nos gustaría poder generar hojas de té en el fondo de una taza. No tiene que parecer fotorrealista, y de hecho, cartoon-y está bien.

¿Qué tipo de técnicas debemos investigar para lograr esto? ¿Hay alguna biblioteca (preferiblemente en C, pero podemos traducir) que sería útil?

Aquí hay algunas muestras extraídas de una búsqueda de imágenes de Google

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Jedidja
fuente
¿Podría ser más específico en sus requisitos? ¿Necesitan estar dando vueltas, diferentes cada vez? Porque si no hay requisitos de animación o unicidad, no veo por qué no puedes simplemente usar una foto / dibujo como textura.
phillipwei
@phillipwei Sí, tendrían que ser diferentes cada vez, o al menos lo suficientemente razonablemente diferentes para que no parecieran fotos de archivo o lo que sea.
Jedidja el

Respuestas:

15

Cómo probablemente lo haría para poder mantener un poco de control del arte y no potencialmente pasar mucho tiempo tratando de ajustar un método de procedimiento para hacerlo bien ...

Primero, cree manualmente una cantidad de sprites de grupos de hojas de té como su "piscina" de arte, no cada una como una taza entera de hojas de té, sino más bien como un grupo más pequeño. Digamos, 20 de ellos más o menos?

Luego coloque un número aleatorio de ellos en coordenadas aleatorias en la base de la "taza". Dé a cada uno una rotación y escala aleatorias más un reflejo horizontal y / o vertical aleatorio. Esto debería crear un buen resultado.

Este enfoque le dará la libertad artística para crear los grupos individuales para tener el aspecto que desea, al tiempo que permite una gran variedad de resultados (suponiendo que haya suficientes sprites para elegir).

Además, con esto (y cualquier método aleatorio, incluido el ruido basado en Perlin), en realidad podría sembrar el generador de números aleatorios al comienzo del proceso con una semilla conocida para obtener resultados reproducibles. Si guarda la semilla, puede recrear exactamente el mismo patrón nuevamente al reiniciar justo antes de que comience la secuencia. Incluso podría hacer cosas divertidas como hacer que alguien escriba su nombre, convertir las letras en un número (suma ASCII, etc.), y luego usarlo como semilla como una especie de "este patrón de hojas de té personalizado para USTED". cosa.

Aquí hay un pseudocódigo para lo que quiero decir, si eso ayuda ...

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

Visite http://mathworld.wolfram.com/DiskPointPicking.html para una gran discusión sobre cómo elegir un punto aleatorio en un disco y por qué estoy usando todo eso de sqrt / sin / cos.

Tim Holt
fuente
7

¿Prueba el ruido perlin con un valor de corte binario de 0.8 o menos?

Imagen de ejemplo cargada en http://imgur.com/a/Ydc4y . La primera es la segunda imagen con un umbral aplicado. El segundo es el ruido básico de perlin, para el que puede encontrar múltiples referencias buenas, como http://en.wikipedia.org/wiki/Perlin_noise y http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter26.html .

Puede jugar un poco con el número y la escala de octavas en el ruido perlin para variar la suavidad de la salida, así como el umbral para determinar la cantidad (en promedio, como el ruido) de hojas de té que habrá.

dascandy
fuente
3
Esta podría ser una mejor respuesta con algunos enlaces y ejemplos de lo que podría producirse.
MichaelHouse
buena idea, aunque pueden usarse imágenes estáticas y una región circular puede sujetarse en un sombreador de píxeles y los bordes de ese círculo se dibujan sin necesidad de producir un valor de ruido Perlin por píxel (desde mi experiencia, este método es un poco lento )
teodron
Generar el ruido perlin en sí mismo es un poco pesado; Sin embargo, puede usar una textura de ruido precalculada para este (y muchos otros) efectos. También puede usar el método para calcular previamente algunos.
dascandy
44
-1. Después de mirar muchas hojas de té y mucho ruido de Perlin (1 / f), no puedo decir que se vean iguales. El ruido de Perlin podría ser el punto de partida correcto, pero el objetivo no es adecuado para la variante de suma (1 / f) habitual.
1
Estoy de acuerdo en que el enfoque del ruido perlin no es práctico. Para verificarlo intenté recrear el efecto en Photoshop a partir del ruido de perlin. Aquí está el resultado . Si bien creo que se ve bien, el problema radica en la cantidad de ajustes que tuve que hacer. Realmente no puedo pensar en una manera de recrear todos esos ajustes de procedimiento, así que voto por el enfoque basado en sprites sugerido por Tim Holt.
David Gouveia