Pull to refresh

Comments 25

Что мешает в этом случае использовать обычный random?
Обычный рандом это какой? Вас наверное смутили иллюстрации, вообще мозаику можно запросто использовать для фотореалистичных текстур, но мои способности художника пока не позволяют рисовать что-либо пиксель арта. Вот, например, переделанные текстуры из Minecraft:



Слева оригинал, справа мозаика из атласа с увеличенной и немного перемешанной текстурой
Возможно, просто было мало примеров из «жизни»
У меня тут в офисе похожий палас лежит (цвета, правда, чуть другие, да и чуть затоптан местами :) ). Грешным делом, подумал, что Вы у себя под ногами половое покрытие сфотографировали :))
Судя по минусам, что-то в этой фразе читателей смущает, да ))
Для полного рандома надо, чтобы каждая плитка из атласа сочеталась с каждой (либо перебирать рандомом, пока не совпадут грани), а заодно рандомные значения зависели от некого seed и не менялись с каждым запуском или вообще с каждой отрисовкой.
Оба ограничения не актуальны, если можно «запечь» мозаику, а в игре уже ее отрисовывать, но для этого нужен промежуточный слой — текстура или текстурные координаты (если у нас детальная полигональная сетка). Но гораздо удобнее было бы сделать шейдер для отрисовки текстуры из атласа по некому алгоритму без промежуточных расчетов и лишних инструкций.
Мои глаза! Не могли на какой-нибудь траве показывать? :(
Интересный подход.
А можно ли как-то переделать алгоритм, чтобы он был не итеративным, а позиционным. То есть, я передаю ему координаты ячейки, а он мне индекс тайла в атласе. Это было бы идеально для текстурирования «на лету» сразу в пиксельном шейдере.
Конечно, полноценная переделка вряд-ли возможна, но можно, наверное, как-то разбить тайлы на подмножества, чтобы в любой ячейке по координатам можно было бы определить подмножество и рандомно выбирать тайл из него.
Алгоритм создания мозаики Вана полностью локален, если вам известны цвета соседей, то выбрать из атласа множество подходящих тайлов совсем не сложно, нужно всего пара условий. У меня в коде просто строит проверка «если правая грань соседа слева такая, то выбираем один из этих столбцов в атласе», потом аналогичным образом выбираю колонку и получаю нужный тайл.
В том-то и дело, что в шейдере состояние соседей не известно, так как эти состояния нигде не хранятся. Но если алгоритм будет повторяемым, то можно будет лишь гарантировать, что сверху — снизу — справа — слева определенная группа тайлов, но не ясно какой конкретно.
Как раз по ссылке на GPU Gems 2 описан подход для текстурирования подобным методом на лету, то есть в пиксельном шейдере. То, что я и искал.
Отличный материал, осталось дело за малым — всем авторам движков добавить поддержку таких текстур =) на уровне движка
UFO just landed and posted this here
Если честно, то момент с контейнерами абсолютно не понял. Картинки сколько не рассматривал — ясности не добавило. Принцип «стыковки» сторон — понятен, а дальше — тупик. Какой контейнер, из чего он получается, и почему он «хорошо укладывается» — вообще не могу «сложить паззл».
Представьте, что у вас есть ящик советской кафельной плитки. Плитка кривая и плохо стыкуется, приходиться долго подбирать подходящую, чтобы она не упиралась в соседей. Теперь представьте, что вместо кривой плитки у вас есть ровная и качественная, и вы можете положить любую плитку куда угодно и она будет хорошо смотреться. Получается, что для гладкого и красивого пола в ванной важна не середина, а края плитки. Рисунок на любой плитке можно поменять, и она всё равно впишется в окружение, потому что её края сочетаются с соседями. Если плитка не квадратная, а фигурная, то менять плитки немного сложнее, но рисунок по-прежнему играет второстепенную роль, он может иметь больше или меньше деталей, может быть с вариациями или без. Плитка делится на два компонента: края, которые определяют возможность укладывания плитки, и лицевую поверхность, которая отвечает за общий внешний вид и может меняться.
Спасибо, с утра почитаю вдумчиво :-)
UFO just landed and posted this here
Обновил пост, смотрите дополнение в конце статьи.
UFO just landed and posted this here
Sign up to leave a comment.

Articles