Как я могу создать текстуру, которая выглядит как остатки чайного листа?

11

Мы работаем над проектом для iPhone и Windows Phone 7, в котором мы хотели бы иметь возможность генерировать чайные листья на дне чашки. Это не должно выглядеть фотореалистично, и на самом деле все в порядке.

Какие методы мы должны исследовать для достижения этой цели? Есть ли какие-нибудь библиотеки (желательно на С, но мы можем перевести), которые были бы полезны?

Вот несколько примеров, взятых из поиска картинок Google

введите описание изображения здесь введите описание изображения здесь

Jedidja
источник
Не могли бы вы быть более точным в отношении ваших требований? Они должны кружиться, каждый раз разные? Потому что, если нет требований к анимации или уникальности, я не понимаю, почему нельзя просто использовать фотографию / рисунок в качестве текстуры.
phillipwei
@phillipwei Да, они должны были бы отличаться каждый раз, или, по крайней мере, разумно отличаться настолько, чтобы это не выглядело как стоковые фотографии или что-то еще.
Джедиджа

Ответы:

15

Как я, вероятно, сделал бы это, чтобы я мог сохранять некоторый контроль над искусством и потенциально не тратить много времени, пытаясь настроить процедурный метод, чтобы сделать это правильно ...

Во-первых, вручную создайте несколько спрайтов сгустков чайного листа в качестве своего «пула» - не каждый как чайный лист на целую чашку, а скорее как небольшая группировка. Скажем, 20 из них или около того?

Затем поместите случайное количество из них в случайных координатах на базе «чашки». Дайте каждому случайное вращение и масштаб плюс случайное горизонтальное и / или вертикальное зеркальное отображение. Это должно создать хороший результат.

Этот подход даст вам артистическую свободу в создании отдельных сгустков, чтобы они выглядели так, как вам хочется, и в то же время позволит получить огромное разнообразие результатов (при условии выбора достаточного количества спрайтов).

Кроме того, с помощью этого (и любого случайного метода, в том числе на основе шума Перлина), вы можете фактически запустить генератор случайных чисел в начале процесса с известным начальным числом для получения воспроизводимых результатов. Если вы сохраните начальное значение, вы сможете заново воссоздать тот же самый образец, повторно заполнив его перед началом последовательности. Вы могли бы даже сделать забавные вещи, например, попросить кого-нибудь напечатать свое имя, превратить буквы в число (сумма ASCII и т. Д.), А затем использовать это в качестве начального числа как своего рода «этот образец чайного листа, настроенный для ВАС!» предмет.

Вот какой-то псевдокод для того, что я имею в виду, если это поможет ...

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

Посетите http://mathworld.wolfram.com/DiskPointPicking.html, чтобы обсудить, как выбрать случайную точку на диске и почему я использую эту функцию sqrt / sin / cos.

Тим Холт
источник
7

Попробуйте перлин шум с двоичным значением отсечки 0,8 или около того?

Загрузил пример изображения на http://imgur.com/a/Ydc4y . Первое - это второе изображение с примененным порогом. Второй - это основной перлин-шум, для которого вы можете найти несколько хороших ссылок, таких как http://en.wikipedia.org/wiki/Perlin_noise и http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter26.html .

Вы можете немного поиграть с количеством и масштабом октав в перлин-шуме, чтобы варьировать то, насколько гладко будет выглядеть выходной сигнал, а также с порогом, определяющим, сколько (в среднем - это шум) чайных листьев будет.

dascandy
источник
3
Это может быть лучшим ответом с некоторыми ссылками и примерами того, что может быть произведено.
MichaelHouse
хорошая идея, хотя можно использовать статические изображения и круглую область можно закрепить в пиксельном шейдере, а края этой окружности заштриховать, не создавая при этом значение шума Перлина на пиксель (по моему опыту, этот метод немного медленный ).
Теодрон
Генерировать шум perlin немного тяжело; Вы можете использовать предварительно вычисленную текстуру шума для этого (и многих других) эффекта. Вы также можете использовать метод для предварительного вычисления некоторых тоже.
2012 г.
4
-1. Посмотрев на множество чайных листьев и много суммарного (1 / f) шума Перлина, я не могу сказать, что они выглядят одинаково. Шум Перлина может быть правильной отправной точкой, но цель не подходит для обычного варианта суммы (1 / f).
1
Я согласен, что подход с использованием перлин-шума нецелесообразен. Чтобы проверить это, я попытался воссоздать эффект в фотошопе, начиная с шума перлина. Вот результат . Хотя я думаю, что все выглядит хорошо, проблема заключается в количестве настроек, которые я должен был сделать. Не могу придумать способ воссоздать всю эту настройку процедурно, поэтому я голосую за спрайтовый подход, предложенный Тимом Холтом.
Дэвид Гувейя