Como posso gerar uma textura que se parece com folhas de chá que sobraram?

11

Estamos trabalhando em um projeto para iPhone e Windows Phone 7 em que gostaríamos de gerar folhas de chá no fundo de uma xícara. Ele não precisa parecer foto-realista, e na verdade o desenho animado é bom.

Que tipo de técnicas devemos pesquisar para conseguir isso? Existem bibliotecas (de preferência em C, mas podemos traduzir) que seriam úteis?

Aqui estão alguns exemplos extraídos de uma pesquisa de imagens do Google

insira a descrição da imagem aqui insira a descrição da imagem aqui

Jedidja
fonte
Você poderia ser mais específico em suas necessidades? Eles precisam estar girando, diferentes a cada vez? Porque, se não houver requisitos de animação ou exclusividade, não vejo por que você não pode simplesmente usar uma foto / desenho como textura.
Phillipwei
@phillipwei Sim, eles teriam que ser diferentes a cada vez, ou pelo menos razoavelmente diferentes o suficiente para que não parecessem fotos ou algo assim.
Jedidja

Respostas:

15

Como eu provavelmente faria isso para manter um pouco de controle de arte e não gastar muito tempo tentando ajustar um método processual para fazê-lo da maneira certa ...

Primeiro, crie manualmente vários sprites de folhas de chá como sua "piscina" de arte - não cada uma como uma xícara inteira de folhas de chá, mas mais como um grupo menor. Digamos, 20 deles mais ou menos?

Em seguida, coloque um número aleatório deles em coordenadas aleatórias na base "xícara". Faça uma rotação e escala aleatórias e espelhamento horizontal e / ou vertical aleatório. Isso deve criar um bom resultado.

Essa abordagem lhe dará a liberdade artística na criação de grupos individuais para ter a aparência desejada, enquanto permite uma enorme variedade de resultados (assumindo sprites suficientes para você escolher).

Além disso, com isso (e com qualquer método aleatório, incluindo o ruído Perlin), você pode realmente propagar o gerador de números aleatórios no início do processo com uma semente conhecida para obter resultados reproduzíveis. Se você salvar a semente, poderá recriar exatamente o mesmo padrão novamente, propagando novamente antes do início da sequência. Você pode até fazer coisas divertidas, como alguém digitar seu nome, transformar as letras em um número (soma ASCII, etc.) e usá-las como semente como uma espécie de "esse padrão de folha de chá personalizado para VOCÊ!" coisa.

Aqui estão alguns pseudocódigo do que quero dizer, se isso ajudar ...

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

Confira http://mathworld.wolfram.com/DiskPointPicking.html para uma ótima discussão sobre como escolher um ponto aleatório em um disco e por que estou usando toda essa coisa sqrt / sin / cos.

Tim Holt
fonte
7

Tente ruído perlin com um valor de corte binário de 0,8 ou mais?

Imagem de exemplo carregada para http://imgur.com/a/Ydc4y . A primeira é a segunda imagem com um limite aplicado. O segundo é o ruído perlin básico, para o qual você pode encontrar várias boas referências, como http://en.wikipedia.org/wiki/Perlin_noise e http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter26.html .

Você pode brincar um pouco com o número e a escala de oitavas no ruído permanente para variar a suavidade da saída, bem como o limite para determinar quanto (em média - como é o ruído) folhas de chá haverá.

dascandy
fonte
3
Esta poderia ser uma resposta melhor com alguns links e exemplos do que poderia ser produzido.
MichaelHouse
boa idéia, embora imagens estáticas possam ser usadas e uma região circular possa ser presa em um sombreador de pixels e as bordas desse círculo sejam esmaecidas sem a necessidade de produzir um valor de ruído Perlin por pixel (pela minha experiência, esse método é um pouco lento )
Teodron # 3/12
Gerar o ruído perlin em si é um pouco pesado; você pode usar uma textura de ruído pré-computada para esse (e muitos outros) efeitos. Você também pode usar o método para pré-calcular alguns também.
Dascandy
4
-1. Tendo examinado muitas folhas de chá e muito ruído (1/1) Perlin, não posso dizer que elas sejam parecidas. O ruído Perlin pode ser o ponto de partida certo, mas o objetivo não é adequado para a variante de soma usual (1 / f).
1
Concordo que a abordagem do ruído perlin é impraticável. Para verificar isso, tentei recriar o efeito no photoshop a partir do ruído permanente. Aqui está o resultado . Enquanto eu acho que parece bom, o problema está na quantidade de ajustes que eu tive que fazer. Não consigo realmente pensar em uma maneira de recriar tudo isso de maneira processual, então voto na abordagem baseada em sprites sugerida por Tim Holt.
David Gouveia