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
| Вот пример текстуринга в данной игре, ну как я понял. Применяется по текстуре на каждый тайл, но где нет границ там просто дублируется. Разрешение текстур как правило в таких типах игр низкое, впрочем зависит от свободы камеры - насколько её можно приближать к ландшафту.
ООП -
Сообщение отредактировал 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) Видимо, нужно создавать один объект и для него, каким то образом, динамически генерировать текстуру из текстур тайлов. Подскажите, пожалуйста, как подобное лучше и эффективней реализовать.
Думаю мой вариант подходит?
ООП -
Сообщение отредактировал serg-kkz - Среда, 22.06.2011, 07:04 |
|
| |
ninth | Дата: Среда, 22.06.2011, 08:47 | Сообщение # 22 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Эээ чёт вы куда-то совсем не туда идёте. Вот вам пример модели с несколькими текстурами, каждая из которых привязана к своему полигону. Эта модель экспортирована из Блендера, ваша же задача сводится к тому, чтобы генерировать такую модель в рантайме.
|
|
| |
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
| Насчет скорости отрисовки, то полигоны по отдельности рендерятся дольше, чем если они относяться к одному обьекту(модели). Заметь что скорость медленная при отрисовке в том случае если они разом оказываются в камере. А тебе это зачем?
ООП -
|
|
| |