Comments 25
Что мешает в этом случае использовать обычный random?
+1
Обычный рандом это какой? Вас наверное смутили иллюстрации, вообще мозаику можно запросто использовать для фотореалистичных текстур, но мои способности художника пока не позволяют рисовать что-либо пиксель арта. Вот, например, переделанные текстуры из Minecraft:
Слева оригинал, справа мозаика из атласа с увеличенной и немного перемешанной текстурой
Слева оригинал, справа мозаика из атласа с увеличенной и немного перемешанной текстурой
+5
Возможно, просто было мало примеров из «жизни»
+1
На скорую руку сваял мозаику из этой текстуры. Над швами сильно не работал, но, думаю, смысл понятен.
+14
Для полного рандома надо, чтобы каждая плитка из атласа сочеталась с каждой (либо перебирать рандомом, пока не совпадут грани), а заодно рандомные значения зависели от некого seed и не менялись с каждым запуском или вообще с каждой отрисовкой.
Оба ограничения не актуальны, если можно «запечь» мозаику, а в игре уже ее отрисовывать, но для этого нужен промежуточный слой — текстура или текстурные координаты (если у нас детальная полигональная сетка). Но гораздо удобнее было бы сделать шейдер для отрисовки текстуры из атласа по некому алгоритму без промежуточных расчетов и лишних инструкций.
Оба ограничения не актуальны, если можно «запечь» мозаику, а в игре уже ее отрисовывать, но для этого нужен промежуточный слой — текстура или текстурные координаты (если у нас детальная полигональная сетка). Но гораздо удобнее было бы сделать шейдер для отрисовки текстуры из атласа по некому алгоритму без промежуточных расчетов и лишних инструкций.
+1
Мои глаза! Не могли на какой-нибудь траве показывать? :(
+10
Интересный подход.
А можно ли как-то переделать алгоритм, чтобы он был не итеративным, а позиционным. То есть, я передаю ему координаты ячейки, а он мне индекс тайла в атласе. Это было бы идеально для текстурирования «на лету» сразу в пиксельном шейдере.
Конечно, полноценная переделка вряд-ли возможна, но можно, наверное, как-то разбить тайлы на подмножества, чтобы в любой ячейке по координатам можно было бы определить подмножество и рандомно выбирать тайл из него.
А можно ли как-то переделать алгоритм, чтобы он был не итеративным, а позиционным. То есть, я передаю ему координаты ячейки, а он мне индекс тайла в атласе. Это было бы идеально для текстурирования «на лету» сразу в пиксельном шейдере.
Конечно, полноценная переделка вряд-ли возможна, но можно, наверное, как-то разбить тайлы на подмножества, чтобы в любой ячейке по координатам можно было бы определить подмножество и рандомно выбирать тайл из него.
0
Алгоритм создания мозаики Вана полностью локален, если вам известны цвета соседей, то выбрать из атласа множество подходящих тайлов совсем не сложно, нужно всего пара условий. У меня в коде просто строит проверка «если правая грань соседа слева такая, то выбираем один из этих столбцов в атласе», потом аналогичным образом выбираю колонку и получаю нужный тайл.
0
В том-то и дело, что в шейдере состояние соседей не известно, так как эти состояния нигде не хранятся. Но если алгоритм будет повторяемым, то можно будет лишь гарантировать, что сверху — снизу — справа — слева определенная группа тайлов, но не ясно какой конкретно.
0
Как раз по ссылке на GPU Gems 2 описан подход для текстурирования подобным методом на лету, то есть в пиксельном шейдере. То, что я и искал.
0
Отличный материал, осталось дело за малым — всем авторам движков добавить поддержку таких текстур =) на уровне движка
0
Постановка задачи напомнила одну популярную статью на этом ресурсе.
0
UFO just landed and posted this here
Если честно, то момент с контейнерами абсолютно не понял. Картинки сколько не рассматривал — ясности не добавило. Принцип «стыковки» сторон — понятен, а дальше — тупик. Какой контейнер, из чего он получается, и почему он «хорошо укладывается» — вообще не могу «сложить паззл».
+3
Представьте, что у вас есть ящик советской кафельной плитки. Плитка кривая и плохо стыкуется, приходиться долго подбирать подходящую, чтобы она не упиралась в соседей. Теперь представьте, что вместо кривой плитки у вас есть ровная и качественная, и вы можете положить любую плитку куда угодно и она будет хорошо смотреться. Получается, что для гладкого и красивого пола в ванной важна не середина, а края плитки. Рисунок на любой плитке можно поменять, и она всё равно впишется в окружение, потому что её края сочетаются с соседями. Если плитка не квадратная, а фигурная, то менять плитки немного сложнее, но рисунок по-прежнему играет второстепенную роль, он может иметь больше или меньше деталей, может быть с вариациями или без. Плитка делится на два компонента: края, которые определяют возможность укладывания плитки, и лицевую поверхность, которая отвечает за общий внешний вид и может меняться.
0
В статье очень непонятно описан процесс. А вот ссылки по теме — раскрывают смысл очень хорошо:
смотрите тут: http.developer.nvidia.com/GPUGems2/gpugems2_chapter12.html и тут: www.pathofexile.com/forum/view-thread/55091
смотрите тут: http.developer.nvidia.com/GPUGems2/gpugems2_chapter12.html и тут: www.pathofexile.com/forum/view-thread/55091
+1
UFO just landed and posted this here
Sign up to leave a comment.
Бесконечные неповторяющиеся текстуры с помощью мозаики Вана