[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Форум Panda3D - по русски » Panda3D » Для начинающих » Tilemap rendering (генерация поверхности на основе набора тайлов)
Tilemap rendering
soosДата: Вторник, 21.06.2011, 14:36 | Сообщение # 16
Майор
Группа: Пользователи
Сообщений: 82
Награды: 1
Репутация: 0
Статус: Offline
Спасибо, почитаю. Если получится что-то дельное, отпишусь.
 
ninthДата: Вторник, 21.06.2011, 14:44 | Сообщение # 17
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Только учитывай, что всё равно даже в этом случае обновление геометрии может быть ресурсоёмким
 
soosДата: Вторник, 21.06.2011, 19:16 | Сообщение # 18
Майор
Группа: Пользователи
Сообщений: 82
Награды: 1
Репутация: 0
Статус: Offline
Вообщем, и метод с 10000 объектов, и метод с текстурами 2500*2500 - это крайне плохие варианты. По хорошему, надо иметь по текстуре для каждого типа тайла и каким то образом заполнять поверхность этими текстурами. Только вот не пойму как это делается в обычных играх? Это мультитекстурирование или какой то другой метод? Первое что приходит на ум, это накладывать по очереди текстуры каждого тайла в режиме Texture.WMRepeat с дополнительной текстурой прозрачности. Но в игре 27 видов тайлов и это минимум 52 слоя, учитывая что видяхи поддерживают в среднем по 8 слоёв, то мультитекстурирование в чистом виде тоже не подходит. Что-то я даже не знаю что и делать. Может быть есть какие то комбинированные подходы?

UPD: Как вариант можно делать две плоскости одна над другой и текстурировать верхнюю с прозрачностью


Сообщение отредактировал soos - Вторник, 21.06.2011, 19:19
 
serg-kkzДата: Вторник, 21.06.2011, 19:45 | Сообщение # 19
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
У меня есть вариант как сократить количество квадратов и текстур. Но покажу и раскажу как только набросаю пример, в данный момент потею над этим. Раскажу суть, соединяется несколько квадратов, скажем 25 в один. Это будет уже квадрат 5*5, также склеивается текстура из 25 частей, скажем в 512*512. Вот только меня сбило столку твоё заявление что офисальные ресы ты не будешь использовать, а что ты будешь накладывать на полигон? я имею ввиду ландшафт. И вообщем сколько сервер присылает тайлов на локацию?

ООП  -  

Сообщение отредактировал serg-kkz - Вторник, 21.06.2011, 20:20
 
serg-kkzДата: Вторник, 21.06.2011, 20:09 | Сообщение # 20
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
Вот пример текстуринга в данной игре, ну как я понял. Применяется по текстуре на каждый тайл, но где нет границ там просто дублируется. Разрешение текстур как правило в таких типах игр низкое, впрочем зависит от свободы камеры - насколько её можно приближать к ландшафту.
Прикрепления: 9387857.jpg (54.8 Kb)


ООП  -  

Сообщение отредактировал serg-kkz - Вторник, 21.06.2011, 21:16
 
serg-kkzДата: Среда, 22.06.2011, 06:53 | Сообщение # 21
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
Вот собно и пример. У меня нет тайлов, пришлось раскрашивать в разные цвета для отличия. Данную текстуру можно уже натянуть на обьект 5*5. Обектом надо запастись зарание или маштабировать 1*1 по осям X,Y.

Добавлено (21.06.2011, 22:02)
---------------------------------------------
Насчёт поддержки количества слоёв карточкой, то это ограничение касается одной модели, как я понял из мануала по панде.

Добавлено (22.06.2011, 06:53)
---------------------------------------------
Ну поразглядовал скрины игры, и думаю ты практически привязан к данному методу текстурирования - один полигон, одна текстура. Тем более что имеется определёное количество типов тайлов, которые как я теперь понял заменишь на свои. То выбора нет, прийдётся строить мир в два этапа:

1. Создать скрипт который генерит файл с инфой (чтоб это организовать знать какой информацией сопровождает id тайла, 2d координаты и. т.)

Пример строк в файле: name(имя тайла) X,Y(координаты)

0001 0 1
0002 2 5

2. Создать код который будет грузить в панду по этому списку и использовать предложенный мною способ по уменьшению количества
полигонов. (причем это может быть без оконным вариантом) Так же данным кодом создать окончательный код с полигонами 5*5 и текстурам к
ним.

Суть: скажем локация состоит из 10000 полигонов 1*1 , то фотаем каждые 25 полигонов в одну текстуру, теперь можно использовать 5*5, соотвественно локация будет уже из 400 полигонов. + rbc.

Quote (soos)
Видимо, нужно создавать один объект и для него, каким то образом, динамически генерировать текстуру из текстур тайлов. Подскажите, пожалуйста, как подобное лучше и эффективней реализовать.


Думаю мой вариант подходит?
Прикрепления: RTS.rar (32.5 Kb)


ООП  -  

Сообщение отредактировал serg-kkz - Среда, 22.06.2011, 07:04
 
ninthДата: Среда, 22.06.2011, 08:47 | Сообщение # 22
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Эээ чёт вы куда-то совсем не туда идёте. Вот вам пример модели с несколькими текстурами, каждая из которых привязана к своему полигону. Эта модель экспортирована из Блендера, ваша же задача сводится к тому, чтобы генерировать такую модель в рантайме.
Прикрепления: multitexture.zip (5.6 Kb)
 
serg-kkzДата: Среда, 22.06.2011, 10:07 | Сообщение # 23
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
Ну я задачю составил со слов soos, "динамически генерировать текстуру из текстур тайлов". Бегло глянул структуру egg из примера, то суть понятна на четыре точки накладывается изображение, но как программно получить доступ к VertexRef? Видимо прийдётя клепать файл egg со всей структурой(конечно структуру вершин можно зарание подготвить, скажем с обьекта 5*5 c 25-ю сегментами по Y,X) Потом выгружать в оперативу, а оттуда передовать загручику.

ООП  -  
 
soosДата: Среда, 22.06.2011, 11:25 | Сообщение # 24
Майор
Группа: Пользователи
Сообщений: 82
Награды: 1
Репутация: 0
Статус: Offline
Quote (serg-kkz)
Вот только меня сбило столку твоё заявление что офисальные ресы ты не будешь использовать, а что ты будешь накладывать на полигон? я имею ввиду ландшафт. И вообщем сколько сервер присылает тайлов на локацию?

пока что буду использовать просто цветные квадраты, потом найду что нибудь нормальное. при входе в игру клиент запрашивает у сервера 6 гридов. каждый грид 100*100 тайлов.
Quote (serg-kkz)
думаю ты практически привязан к данному методу текстурирования - один полигон, одна текстура

думаю да. только не пойму зачем комбинировать в кучки по 5*5? проще сразу генерить объект с 10000 полигонов и на каждый полигон вешать текстуру тайла.
Quote (serg-kkz)
То выбора нет, прийдётся строить мир в два этапа:

Эээмм.. тут я чот не совсем понял. Я буду использовать сетевую подсистему панды, чтобы получать карту и сразу же "на лету" генерить новый меш для грида.
Quote (serg-kkz)
Прикрепления: RTS.rar(32Kb)

Не хочет загружаться.
Quote (ninth)
Вот вам пример модели с несколькими текстурами, каждая из которых привязана к своему полигону

Вот! вот это ключевой момент. Я не знал что можно повесить текстуру на отдельный полигон. Думал, что текстура цепляется к объекту, а не к полигону.
Quote (serg-kkz)
Ну я задачю составил со слов soos, "динамически генерировать текстуру из текстур тайлов"

не. надо "(генерацию поверхности на основе набора тайлов)"
Quote (serg-kkz)
Бегло глянул структуру egg из примера, то суть понятна на четыре точки накладывается изображение, но как программно получить доступ к VertexRef?

Как я понимаю надо программно добавлять новые полигоны к объекту.

Буду разбираться дальше. Спасибо.
 
serg-kkzДата: Среда, 22.06.2011, 12:48 | Сообщение # 25
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
Ну разбивка на кучки для того чтоб загрузка и выгрузка происходила менее заметно и без тормазов. Если сделать 10000 то при обновлении тебе прийдётся перезагружать весь обьект, а размер у него будет не хилый. Ведь в панде нет возможности на прямую присвоения текстурки определёному полигону. Покрайной мере я не нашёл, да и пример не зря выполнен в блендере так как только чекен может так экспортировать с текстурами на определёных полигонах. Было бы иначе был бы пример на панде.

А генерацию поверхности тебе в принципе не зачем генерировать если известно сколько клиент запрашивает гридов и тем более если число их постоянно. То просто зарание нужно загрузит меш и или меши(если делать кучками). Ведь ты хотел сразу всё отобразить, так вот думаю упор мыслей надо делать не над генерацией меша, а над тем как повесить на определённый полигон текстуру. Я склоняюсь к мысли созданием egg файла через код.

Про мир в два этапа, я опирался на то что сервер передаёт все гриды сразу, ты сам сказал. То построение карты из размера 1*1 губит производительность рендера панды. То у меня возникла мысыль в первый проход создать мир на основе 1*1 и тайлов к ним, сфотать каждые
25 тайлов для создания текстуры в консольном режиме. Во второй проход уже в рендер режиме собрать карту из тайлов 5*5 и сфотанных текстур. Правда есть минус текстур будет тьма.

А что пишет при загрузки RTS?


ООП  -  
 
soosДата: Среда, 22.06.2011, 14:46 | Сообщение # 26
Майор
Группа: Пользователи
Сообщений: 82
Награды: 1
Репутация: 0
Статус: Offline
Quote (serg-kkz)
Ведь в панде нет возможности на прямую присвоения текстурки определёному полигону.

Битый час искал - тоже не нашёл. Не нашёл даже как сделать нормальную модель. Раз загрузчик моделей это делает значит и программно можно. В мануале написано как создать геометрию и отрендерить её, а вот как создать полноценную модель с ModelRoot и текстурами нигде не могу найти. :(

Да по сути и не важно, потому что отрисовка Геометрии (Geom) из 20,000 треугольников выдаёт 10-12 fps. Слишком медленная скорость. И это ещё без текстурирования. Толи я что-то не понимаю, толи такие объекты это действительно слишком много...
 
ninthДата: Среда, 22.06.2011, 14:56 | Сообщение # 27
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Quote (soos)
проще сразу генерить объект с 10000 полигонов и на каждый полигон вешать текстуру тайла.

Проще, но перевешивание текстуры - это тоже изменение объекта, которое потребует ресурсов и оно будет вызывать затыки. Лучше всё же разбивать на более мелкие куски и обновлять по кускам в фоне (параллельном потоке).

Quote (soos)
Думал, что текстура цепляется к объекту, а не к полигону.

Можно и так и так. К полигону сложнее.

Quote (soos)
Как я понимаю надо программно добавлять новые полигоны к объекту.

Не обязательно - можно получить доступ к уже существующей структуре и изменять её

Кста, как вариант, ты можешь при получении данных формировать временный egg файл и грузить его как обычную модель. Это будет несколько проще чем мусолить внутреннюю структуру в рантайме, т.к. формат egg достаточно подробно описан и в принципе не сложен.
 
ninthДата: Среда, 22.06.2011, 15:01 | Сообщение # 28
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Quote (soos)
отрисовка Геометрии (Geom) из 20,000 треугольников выдаёт 10-12 fps

А ты его что каждый кадр обновляешь? О_о
 
ninthДата: Среда, 22.06.2011, 15:09 | Сообщение # 29
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
По поводу доступа к полигону - здесь пример удаления текстуры с полигона. http://panda3d.org.ru/forum/9-37-2806-16-1300401456
Установить думаю можно схожим образом.
 
serg-kkzДата: Среда, 22.06.2011, 15:09 | Сообщение # 30
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
Насчет скорости отрисовки, то полигоны по отдельности рендерятся дольше, чем если они относяться к одному обьекту(модели). Заметь что скорость медленная при отрисовке в том случае если они разом оказываются в камере. А тебе это зачем?

ООП  -  
 
Форум Panda3D - по русски » Panda3D » Для начинающих » Tilemap rendering (генерация поверхности на основе набора тайлов)
  • Страница 2 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск: