Ландшафт
|
|
r57shell | Дата: Четверг, 14.03.2013, 01:54 | Сообщение # 1 |
Сообщений: 632 Статус: Offline
| Я ещё несколько лет назад предлагал, использовать этот метод. Но никто так и не реализовал. И тут предвиделась возможность продемонстрировать "примерные" результаты этого алгоритма.
Конкретно это я сделал командой: Код convert -size 1000x1000 plasma:gray50-gray50 -blur 0x2 \ -channel G -auto-level +channel -set colorspace sRGB \ tiles.gif -virtual-pixel tile -fx "u[floor(7.999*u.g)+1]" \ map.png
tiles.gif:
Прога: http://www.imagemagick.org/ Читать c слов "You can also use this technique to tile greyscale images with a set of color images." ТУТ.
Суть: 1) Генерится фрактал плазма: http://ru.wikipedia.org/wiki/Плазма_(компьютерная_графика) 2) Затем его канал G ранжируется в данном случае на 7 уровней. 3) Каждому уровню в соответствие ставится один из слоёв. (земля, песок, спайс...)
Результат этой программы, логично лобовой - граничные тайлы так не получить, но тем не менее, результат показателен.
По хорошему нужно всё делать самому, и дать возможность регулировки уровней визуально, чтобы можно было лучше делить на землю/песок/спайс... и дать возможность в некоторых регионах менять спайс на холмы. Всё что остаётся - сделать хороший алгоритм подбора тайлов на границе. В итоге можно получить хороший редактор ландшафта.
Ещё один пример. Код convert -rotate 45 -size 1415x1415 -seed 12 plasma:gray50-gray50 -blur 0x2 \ -channel G -auto-level +channel -set colorspace sRGB \ -crop 1000x1000+207+207 -fx 'floor(8.7*u.g)/8' map1.png convert -rotate 45 -size 1415x1415 -seed 12 plasma:gray50-gray50 -blur 0x2 \ -channel G -auto-level +channel -set colorspace sRGB \ -crop 1000x1000+207+207 \ tiles.gif -virtual-pixel tile -fx 'u[floor(8.7*u.g)+1]' map2.png
Но заниматься этим Я НЕ БУДУ. У меня есть другие дела.
Мальчик, девочка... какая в жопу разница..
|
|
| |
Ti_ | Дата: Суббота, 16.03.2013, 18:37 | Сообщение # 2 |
Сообщений: 18 Статус: Offline
| Это всё кажется сложно и запутанно, поэтому никто и не брался. Тем более и писать было не кому.
Хотя рандом генератор у нас писал товарищ Липецка, без понятия какие алгоритмы там были. Но проблема то оставалась та же - всё очень криво, и бортики земли вручную надо было править. А песчаные дюны вообще не удалось генерировать.
Идею я понял, ты предлагаешь создавать рисунки этой прогой, а потом рисунки конвертировать в подходящие тайлы. Или выдрать сам алгоритм из проги и перекрутить его, для более точной подстройки.
Ну что ж, на скринах выглядит вполне неплохо. Но только на первый взгляд. Без знания того, как на самом деле карты делались - фиг чего добьешся похожего на оригинал. И спайс и земля и тем более дюны, имеют свои особенности, а тут сплошная каша. Далее подгонка блоков. Я тут вообще без понятия как её делать. Ну а в третьих - это просто уже не актуально. Я сделал редактор, который просто использует оригинальные куски, и это будет самый максимально близкий вариант, а кол-во разнообразных карт которые можно составить немаленькое, а уж если и новые куски добавлять, то неограниченно.И единственное что тут представляет интерес - сама демонстрация работы алгоритма рандома.
|
|
| |
Lipetsk | Дата: Воскресенье, 17.03.2013, 01:14 | Сообщение # 3 |
Сообщений: 4 Статус: Offline
| r57shell, твой алгоритм я давал своему знакомому, и не только этот. Он сделал генератор земли спайса и жирного спайса. Дальше дело не пошло. Есть исходник этой проги, если что. Как оказалось генерация обычных кусков мало что дает, можно и вручную подгонять под базы. Основная проблема именно в генерации крайних блоков "граничных тайлов". Я даже сварганил консольную прогу которая их генерирует, но и после нее править надо было. Её использовал в миссиях за фрименов.
Ученик.
|
|
| |
r57shell | Дата: Воскресенье, 17.03.2013, 02:39 | Сообщение # 4 |
Сообщений: 632 Статус: Offline
| Есть у кого все ландшафтные блоки 32х32 картинки? Лень вытаскивать. Вообще, граничные блоки тоже делаются легко. Для каждого блока составляется таблица "совместимости". Какие блоки могут быть от него: слева, справа, сверху, снизу. По поводу песочных дюн я уже говорил. Нужно дать выбор какой из регионов спайс, а какой дюна. Регион сплошное (связное) место из спайса. Блин, как в пэинте заливка чтобы работала, вот что я имею ввиду. Ткнул в спайс - он стал весь дюной, ткнул ещё раз, обратно спайсом.
А судя по скрину, идею человек понял, но не реализовал до конца.
Мальчик, девочка... какая в жопу разница..
|
|
| |
Ti_ | Дата: Воскресенье, 17.03.2013, 07:59 | Сообщение # 5 |
Сообщений: 18 Статус: Offline
| Тут блоки:
|
|
| |
Lipetsk | Дата: Воскресенье, 17.03.2013, 08:32 | Сообщение # 6 |
Сообщений: 4 Статус: Offline
| Цитата (r57shell) Есть у кого все ландшафтные блоки 32х32 картинки? Лень вытаскивать. Вот: http://rghost.ru/44557349
Ученик.
|
|
| |
r57shell | Дата: Воскресенье, 17.03.2013, 22:19 | Сообщение # 7 |
Сообщений: 632 Статус: Offline
| По поводу граничных тайлов, всё просто. Нужно просто сделать такие замены:
Мальчик, девочка... какая в жопу разница..
|
|
| |
r57shell | Дата: Понедельник, 18.03.2013, 21:18 | Сообщение # 8 |
Сообщений: 632 Статус: Offline
| стоп, судя по всему, в игре генерится не полные клетки, а значения на их углах. а потом уже по углам так связываются как в посте выше. ах да ещё посреди клетки значение.
Мальчик, девочка... какая в жопу разница..
|
|
| |
Lipetsk | Дата: Четверг, 21.03.2013, 21:19 | Сообщение # 9 |
Сообщений: 4 Статус: Offline
| Вот я так и делал, сканировал на соседние блоки и заменял центральный соответствующим. Только кроме основных, там видимо надо сканировать и на переходные блоки хз по какому принципу.
Ученик.
|
|
| |
r57shell | Дата: Пятница, 22.03.2013, 04:42 | Сообщение # 10 |
Сообщений: 632 Статус: Offline
| нужно просто сканировать входную, а заменять на выходной картинке. и тогда ты впринципе не будешь сталкиваться с переходными блоками. но я вроде сказал, что в оригинале не так. хотя ландшафт получится сносный. Есть проблема - нельзя перешагивать через один уровень. то есть между землёй и спайсом обязательно должен быть песок. мою теорию как устроенно в оригинале, написал в предыдущем посте.
Мальчик, девочка... какая в жопу разница..
|
|
| |