Отображение большого количества объектов
|
|
deemaa | Дата: Воскресенье, 03.06.2012, 02:53 | Сообщение # 1 |
Сержант
Группа: Пользователи
Сообщений: 27
Награды: 0
Репутация: 0
Статус: Offline
| пытаюсь отобразить большое количество однотипных перекрывающих друг друга объектов, например кубов Code for x in range(10): for y in range(10): for z in range(10):
self.box = self.loader.loadModel("models/box") self.box.reparentTo(self.render) self.box.setScale(0.1,0.1,0.1) self.box.setPos(x*e, y*e, z*e) self.box.setColor(1,1,0) в результате получаю понятное дело очень низкий фпс. Какие существуют варианты улучшить производительность? Может как-то можно не рендерить объекты, находящиеся за другими объектами, если они не видны? Или есть другие варианты? Сильно не пинайте, я только учусь, спасибо
Сообщение отредактировал deemaa - Воскресенье, 03.06.2012, 04:07 |
|
| |
serg-kkz | Дата: Воскресенье, 03.06.2012, 11:50 | Сообщение # 2 |
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
| Quote (deemaa) Сильно не пинайте, я только учусь, спасибо Пинок - сюда
ООП -
|
|
| |
deemaa | Дата: Пятница, 13.07.2012, 13:39 | Сообщение # 3 |
Сержант
Группа: Пользователи
Сообщений: 27
Награды: 0
Репутация: 0
Статус: Offline
| serg-kkz, огромное спасибо, будем разбираться Добавлено (13.07.2012, 13:39) --------------------------------------------- да, RBC хорошая штука, но как быть если надо отрисовать 100 000, 200 000 моделей? тут даже RBC не поможет. Как быть в таком случае? нашел в render attributes такую штуку, как occlusion culling: "Occlusion Culling refers to the process of cutting out (culling) nodes which are hidden behind (occluded by) other nodes, and can be ignored before they ever get rendered." но примеров не нашел на форуме. Кто нибудь пробовал эту штуку? Какие еще могут быть варианты? может задействовать туман + LOD (чтобы скрыть объекты, находящиеся на определенном удалении от камеры) ? Очень важный вопрос для меня!
|
|
| |
ninth | Дата: Пятница, 13.07.2012, 13:51 | Сообщение # 4 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Хм. А зачем тебе вообще так извращаться, если у камеры, точнее у "линзы" можно просто выставить дальность после которой она не будет ничего рендерить lens.setFar(distance)?
|
|
| |
deemaa | Дата: Пятница, 13.07.2012, 14:08 | Сообщение # 5 |
Сержант
Группа: Пользователи
Сообщений: 27
Награды: 0
Репутация: 0
Статус: Offline
| ninth, Да, наверное можно и так. А что можете сказать вообще по проблеме? Решаемо или нет?
|
|
| |
ninth | Дата: Пятница, 13.07.2012, 14:41 | Сообщение # 6 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Универсального "лекарства", думаю, не существует. Надо смотреть по конкретной ситуации как можно оптимизировать и убрать часть моделей. ЛОД служит для уменьшения детализации отдалённых моделей, а не для их скрытия. Ты конечно можешь в качестве одной из итераций поставить вообще пустую точку, но я не уверен что это хорошо. Насчёт Occlusion Culling ничего сказать не могу - сам не пользовался и по-моему эта фича ещё полностью не реализована.
|
|
| |
deemaa | Дата: Пятница, 13.07.2012, 15:12 | Сообщение # 7 |
Сержант
Группа: Пользователи
Сообщений: 27
Награды: 0
Репутация: 0
Статус: Offline
| Quote (ninth) ЛОД служит для уменьшения детализации отдалённых моделей, а не для их скрытия. в мануале написано "LOD can also be used to hide objects when they are far away."
|
|
| |
ninth | Дата: Пятница, 13.07.2012, 17:51 | Сообщение # 8 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Хм. Возможно. Я давно в ту часть мануала не заглядывал.
|
|
| |