[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 2 из 2«12
Форум Panda3D - по русски » Panda3D » WiP » Создание простого гексагонального ландшафта
Создание простого гексагонального ландшафта
DancingOxДата: Пятница, 17.02.2012, 18:06 | Сообщение # 16
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 3
Статус: Offline
1.
Quote (serg-kkz)
Я для чего приводил пример в сообщении № 9?
Теперь смог сделать так, спасибо. biggrin
2. Добавил новые уровни высоты, переделал рандомизацию.
Прикрепления: 9499505.png(791Kb)


Сообщение отредактировал DancingOx - Пятница, 17.02.2012, 18:08
 
serg-kkzДата: Суббота, 18.02.2012, 12:50 | Сообщение # 17
Генерал-лейтенант
Группа: Модераторы
Сообщений: 678
Награды: 3
Репутация: 16
Статус: Offline
Выглядит прикольно, что еще тут добавить. А дальше что будешь делать, может какие планы есть.

ООП  -  
 
serg-kkzДата: Суббота, 18.02.2012, 12:55 | Сообщение # 18
Генерал-лейтенант
Группа: Модераторы
Сообщений: 678
Награды: 3
Репутация: 16
Статус: Offline
И да, увесистые картинки лучше под спойлер прятать. У меня например GPRS.

ООП  -  
 
DancingOxДата: Вторник, 13.03.2012, 00:13 | Сообщение # 19
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 3
Статус: Offline
Quote (serg-kkz)
У меня например GPRS.
Извини за доставленные неудобства. biggrin

Quote (serg-kkz)
А дальше что будешь делать, может какие планы есть.

Планов на разработку всегда было море, а когда присмотрелся к получившемуся ландшафту, стало ещё больше.
Примерный план на ближайшее время:
1. Сделать простейший редактор: чтобы можно было выделять хекс маркером при помощи мыши и устанавливать его уровень (0 - 5) клавишами + и - например. Реализовать возможность сохранения/загрузки результата. Неплохо бы сделать при помощи wxPython интерфейс генератора локаций с управляемой рандомизацией: задал начальные характеристики локации - сгенерировал - подкорректировал вручную - сохранил.
2. Улучшить визуализацию.
2.1. Сгладить углы. Пока не знаю, как. Добавлять новые полигоны, чтобы снять фаску, как-то муторно и ресурсоёмко.
2.2. Научиться накладывать поверх текстур на хексах дополнительные текстуры с альфа-каналом. Таким образом, случайно разбросать по ландшафту маленькие трещины, камушки, растительность, следы, мусор и т. п., вобщем сделать пейзаж более разнообразным.
3. Начать моделить с блендере.

Добавлено (13.03.2012, 00:13)
---------------------------------------------
Итак, очередной обзор моих результатов. На основе приложения wxPython реализован простой редактор.
Для дизайна окошек и создания xrc-файла использовалась утилита XRCed. Из основного MenuBar можно выбрать диалоги создания новой пустой карты, новой случайно сгенерированной с заданными параметрами карты, загрузки ранее сохренённой карты, сохранения/сохранения в новый файл текущей карты.
Для выбора хекса используется следующий за мышью вертикальный маркер. Уровень хекса под маркером устанавливается клавшиами-цифрами или клавишами "+" и "-". Сохранение/загрузка карт осуществляется с помощью модуля pickle. В бинарный pkl-файл пишется здоровенный список, содержащий поля класса HexMap: списки и numpy массивы с номерами, уровнями, координатами хексов, областей и т.п. Информация о собственно объектах панды не сохраняется и восстанавливается при загрузке.
Немного о самом террейне. С помощью специального скрипта были построчно собраны и отложены яйца моделей хекса (1 шт), прямоугольных боковинок (6*6 шт), боковых треугольников (6*6*6 шт). Из копий этих моделй собраны 7 rbc - по одному на уровень высоты и один - сразу для всей боковой поверхности. При редактировании ландшафта специальная функция удаляет часть моделей, копирует новые и пересобирает изменённые rbc.


В отдельном посте я расскажу о проблемах и спрошу вашего совета.
Прикрепления: 4797022.png(120Kb) · 5657369.png(748Kb)


Сообщение отредактировал DancingOx - Вторник, 13.03.2012, 00:17
 
ninthДата: Вторник, 13.03.2012, 17:59 | Сообщение # 20
Admin
Группа: Администраторы
Сообщений: 1554
Награды: 5
Репутация: 46
Статус: Offline
А не слишком накладно использовать rbc для сбора одной модельки? ИМХО лучше вешать модель (боковины + крышка) на пустой нод, а потом эти ноды уже собирать в группы rbc
 
DancingOxДата: Вторник, 13.03.2012, 18:27 | Сообщение # 21
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 3
Статус: Offline
Я чувствую, что я делаю что-то не так.
Quote (ninth)
А не слишком накладно использовать rbc для сбора одной модельки?

В одном rbc у меня собраны все (даже из раных областей) крышки одного уровня и все боковые треуголькники/прямоугольники.
Шесть уровней - шесть rbc. В седьмом rbc собраны все наклонные треуголькники/прямоугольники.
Quote (ninth)
ИМХО лучше вешать модель (боковины + крышка) на пустой нод, а потом эти ноды уже собирать в группы rbc

Не совсем понял, как сделать. Предлагаете сделать пустые ноды по числу крышек и скопировать в них модельки самих крышек и модельки 6+6 окружающих боковинок? Проблема в том, что каждый боковой треугольник стыкуется (принадлежит) с двумя крышками, а каждый треугольник - с тремя. Значит, боковые части будут продублированы в разных нодах?
 
ninthДата: Вторник, 13.03.2012, 19:41 | Сообщение # 22
Admin
Группа: Администраторы
Сообщений: 1554
Награды: 5
Репутация: 46
Статус: Offline
Соединительные элементы можно отдельно делать. Я просто неправильно тебя понял - я думал у тебя каждый "столбик" в rbc соединяется. А так - rbc на уровень - нормально.
 
DancingOxДата: Среда, 14.03.2012, 01:46 | Сообщение # 23
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 3
Статус: Offline
Основная проблема - возрастающее с размером карты время, требующееся для её пересчёта даже при незначительных изменениях. Например, захотел пользователь подвинуть хекс на другой уровень, надавил клавишу, а результат получил только через полсекунды для небольшой карты (до 20x20) и через несколько секунд для карты 35x35, fps временно просел до нуля.
В это время зелёный змей и панда занимаются следующими вещами: изменяют состав областей (групп смежных хексов с одинаковой высотой), изменяют массивы с координатами, отцепляют 13 нодов, соответствующих моделям крышки и боковинкам хекса, выбирают и копируют вместо них новые подходящие модели, и заново применяют к трём иземенённым rbc/rbcnp методы: flattenLight, collect, setCollideMask, setTexGen, setTexture.
Пробовал использовать cProfile. Не получилось вызвать функцию изнутри класса при помощи run( 'self.function' ), - не распознаёт self.
Поглядел пандовский PStatClient: при редактировании хекса страдает в первую очередь аспект производительности App, - на несколько секунд частота проседает к нулю.
Вобщем, мало что понял, но подумал, что надо разбить карту на более число rbc.
Надеюсь на компетентные рекомендации. biggrin
 
ninthДата: Среда, 14.03.2012, 08:14 | Сообщение # 24
Admin
Группа: Администраторы
Сообщений: 1554
Награды: 5
Репутация: 46
Статус: Offline
Моё мнение (не знаю насколько компетентное )) - со скоростью сборки RBC ты ничего не сделаешь, поэтому надо уменьшить (1) количество элементов попадающих в RBC и (2) частоту пересборки.

1. Разбить карту на сектора, каждый из которых будет отдельным RBC и проверить - возможно у тебя остаются невидимые стенки на соединениях, которые можно удалить и исключить из процесса пересборки.

2. Насколько я понял, при редактировании одного хекса у тебя пересобираются сразу 3 RBC - крышка, стенки, соединения - возможно имеет смысл разбить на сектора, как я сказал выше и объединять не по уровням, а по секторам, тогда тебе за один раз надо будет собирать только один RBC. Помимо этого можно предположить, что пользователь не будет редактировать в данном секторе один единственный хекс, поэтому не собирать сектор сразу, а дождаться пока пользователь с ним закончит и перейдёт в следующий сектор, после чего собрать отредактированный.
 
serg-kkzДата: Среда, 14.03.2012, 09:41 | Сообщение # 25
Генерал-лейтенант
Группа: Модераторы
Сообщений: 678
Награды: 3
Репутация: 16
Статус: Offline
Quote (DancingOx)
Надеюсь на компетентные рекомендации. biggrin

Сделай в 2D, схематично на любом языке программирования. Развить идею дальше? tongue


ООП  -  
 
DancingOxДата: Среда, 14.03.2012, 18:43 | Сообщение # 26
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 3
Статус: Offline
Спасибо за ответы!
Quote (ninth)
уменьшить (1) количество элементов попадающих в RBC
Так и сделал. Разбиение всё так же по уровням, но теперь одному уровню соответствует не один rbc, а один нод, к которому цепляются много rbc, причём один rbc содержит модельки не более чем 10 "столбиков". Теперь успевает пересчитывать изменения на карте размером 40x40 в пределах полсекунды, что вполне годно.

Quote (ninth)
(2) частоту пересборки.
Нельзя, к сожалению, изменить, ибо т.н. терраформинг будет происходить не только в режиме редактирования, но и в самом игровом процессе. cool

Quote (serg-kkz)
Развить идею дальше?

Развить, так как я не понял, о чём ты.


Сообщение отредактировал DancingOx - Среда, 14.03.2012, 18:44
 
ninthДата: Среда, 14.03.2012, 20:36 | Сообщение # 27
Admin
Группа: Администраторы
Сообщений: 1554
Награды: 5
Репутация: 46
Статус: Offline
Хм. А что мешает во время игры поступить так же? В смысле оставить часть ландшафта не собранным. Суть RBC - уменьшение кол-ва пересылаемых в видеопамять данных, так что если у тебя часть ландшафта будет разобрана и падение FPS при этом будет в пределах 10-15, то это вполне разумная жертва. Хотя тут нужно представлять суть предполагаемой игры.
 
serg-kkzДата: Среда, 14.03.2012, 23:10 | Сообщение # 28
Генерал-лейтенант
Группа: Модераторы
Сообщений: 678
Награды: 3
Репутация: 16
Статус: Offline
Quote (DancingOx)
Развить, так как я не понял, о чём ты.

Я о том что не зачем такую простую структуру править и генерировать в 3D( я имею ввиду ландшафт - он не шибко разнообразен). Так вот что мешает сделать 2D редактор, где схематично указать гекс и высоту, ну и текстуру. Потом сформировать данные в файле который обработает панда в 3D. По такому принципу есть даже игровые редакторы, где можно разместить юнитов на 2D (снимок игровой карты). Так решается много проблем, если нужно разместить динамические объекты, то ты уже загрузишь цельную карту(т.е. без возможности редактирования) Еще могу предложить разбить на зоны, и просто перед изменениями определенный зоны, активировать/отобразить её на просчет (терраформинг). Редактор карты GTA SA так устроен.


ООП  -  

Сообщение отредактировал serg-kkz - Среда, 14.03.2012, 23:15
 
ninthДата: Четверг, 15.03.2012, 10:12 | Сообщение # 29
Admin
Группа: Администраторы
Сообщений: 1554
Награды: 5
Репутация: 46
Статус: Offline
Ну там поправка была, что в процессе игры тоже будет происходить терраформинг, так что с 2d вариант отпадает.
 
DancingOxДата: Суббота, 24.03.2012, 13:27 | Сообщение # 30
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 3
Статус: Offline
Текущее положение дел: dry

1. Снял фаску с краёв хексов, - теперь все крышки и горизонтальные соединительные планки выпуклы вверх. Выглядит субъективно лучше, но не намного более гладко.
2. Пока что самая существенная проблема: c помощью одного TexProjector нельзя хорошо затекстурить сразу несколько непараллельных граней.
3. Ступеньки. Применял разные режимы antialiasing, но, суъбективно, лучше не стало. (мануал на оффсайте, тема на оффоруме)
4. При данной логике размещения текстур отдельные грани выглядят неуместно. Однако, логика продиктована самим концептом игры: проходимыми являются границы между хексами с высотой либо равной, либо отличной на единицу, они затекстурены одним образом. Перепад больше единицы - суть обрыв, и для него применяется другая текстура, чтобы было видно, что там пройти нельзя.
...и ещё, 5. Без переходных тайлов или смешивания текстур картинка всё равно будет убогой, несплошной.
...и ещё, 6. Сам концепт содержит противоречие. Подразумевалось, что мир будет пустынным, а изображение ландшафта - без лишних деталей, строгое, аскетичное. То есть, делать текстуры разноцветными не аутентично, но в противном случае все хексы сливаются в сплошное серое месиво, в котором тяжело различить ландшафт.
Что же со всем этим делать? wacko Единственным и наилучшим решением видится следующее: сделать утилиту, которая будет генерировать гексагональные тайлы, в том числе и переходные, а всем моделькам задать UV-координаты.
Прикрепления: 4707443.png(772Kb)


Сообщение отредактировал DancingOx - Понедельник, 26.03.2012, 00:20
 
Форум Panda3D - по русски » Panda3D » WiP » Создание простого гексагонального ландшафта
Страница 2 из 2«12
Поиск: