[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Форум Panda3D - по русски » Panda3D » WiP » Фреймворк voxplanet и игра Suber (Проблемы, процесс разработки)
Фреймворк voxplanet и игра Suber
AdrianaДата: Среда, 17.10.2012, 13:28 | Сообщение # 31
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
RBC рушит программу, когда вызывается из асинхронного таска, а вызывать из основной нити программы слишком накладно, камера двигается рывками.

Добавлено (17.10.2012, 13:28)
---------------------------------------------
Вообще, кстати, эта ошибка мне уже все нервы съела:

Code
python: built/include/mutexPosixImpl.I:42: MutexPosixImpl::~MutexPosixImpl(): Проверочное утверждение «result == 0» не выполнено.
Аварийный останов (core dumped)
 
ninthДата: Среда, 17.10.2012, 16:59 | Сообщение # 32
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
1. Попробуй сначала собирать RBC, а потом уже репарентить его в рендер.

2 .Так RBC, если не обращать внимания на время сборки, решает проблему или нет? Судя по скринам, деревья у тебя сгенеренные, может проще генератор допилить, чтобы он собирал не одно дерево, а сразу пачку в единую геометрию?
 
AdrianaДата: Понедельник, 22.10.2012, 13:26 | Сообщение # 33
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
В общем, я заменил деревья, полностью изменил методику их вставки и, кажется, проблему с деревьями решил.

Вкратце:
1. Деревья квадратные как в майнкрафте
2. Генерируются заранее 100 различных моделей
3. Эти модели используются для установки на сцену методом copyTo()
4. 10 деревьев инстанцируются в одну ноду, для которой делается flattenStrong(), с установленной задержкой 100мс, для того чтобы не было явных подергиваний при движении по миру (некоторое замедление движения все равно остается)
5. Все ноды с деревьями инстанцируются в большую ноду, для которой также делается flattenStrong()
6. Большая нода инстанцируется в ноду леса.
7. Используется временная нода, для того чтобы скрыть процесс перестройки деревьев.

Профит: генерируется один объект, который включает в себя все деревья, что делает фпс не ниже 100.

https://github.com/viatori....py#L142 код метода
Прикрепления: 9313403.png (1.57 Mb)
 
ninthДата: Вторник, 23.10.2012, 08:05 | Сообщение # 34
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Другие виды флаттенов не пробовал? Иногда бывает, что результат по фпс не сильно отличается, зато скорость отработки на медиум и лайт - выше.
 
AdrianaДата: Пятница, 26.10.2012, 13:49 | Сообщение # 35
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
Коллизии резко снижают фпс. Использую луч из камеры.

Профиль таска, отвечающего за камеру
Code
         20 function calls in 0.020 seconds

      Ordered by: internal time

      ncalls  tottime  percall  cumtime  percall filename:lineno(function)
           1    0.020    0.020    0.020    0.020 {method 'traverse' of 'libpanda.CollisionTraverser' objects}
           1    0.000    0.000    0.020    0.020 interactive.py:239(mouseUpdate)
           1    0.000    0.000    0.000    0.000 {method 'sortEntries' of 'libpanda.CollisionHandlerQueue' objects}
           1    0.000    0.000    0.000    0.000 {method 'setFromLens' of 'libpanda.CollisionRay' objects}
           1    0.000    0.000    0.000    0.000 {method 'findNetTag' of 'libpanda.NodePath' objects}
           1    0.000    0.000    0.000    0.000 {method 'getEntry' of 'libpanda.CollisionHandlerQueue' objects}
           1    0.000    0.000    0.000    0.000 {method 'getNumEntries' of 'libpanda.CollisionHandlerQueue' objects}
           1    0.000    0.000    0.000    0.000 {method 'getPointer' of 'libpanda.GraphicsWindow' objects}
           1    0.000    0.000    0.000    0.000 {method 'getIntoNodePath' of 'libpanda.CollisionEntry' objects}
           1    0.000    0.000    0.000    0.000 {method 'movePointer' of 'libpanda.GraphicsWindow' objects}
           1    0.000    0.000    0.000    0.000 {method 'getX' of 'libpanda.MouseData' objects}
           1    0.000    0.000    0.000    0.000 {method 'getXSize' of 'libpanda.GraphicsOutput' objects}
           1    0.000    0.000    0.000    0.000 {method 'isEmpty' of 'libpanda.NodePath' objects}
           1    0.000    0.000    0.000    0.000 {method 'getYSize' of 'libpanda.GraphicsOutput' objects}
           1    0.000    0.000    0.000    0.000 {method 'getX' of 'libpanda.LVecBase2f' objects}
           1    0.000    0.000    0.000    0.000 {method 'getMouse' of 'libpanda.MouseWatcher' objects}
           1    0.000    0.000    0.000    0.000 {method 'hasMouse' of 'libpanda.MouseWatcher' objects}
           1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
           1    0.000    0.000    0.000    0.000 {method 'getY' of 'libpanda.LVecBase2f' objects}
           1    0.000    0.000    0.000    0.000 {method 'getY' of 'libpanda.MouseData' objects}


Сам по себе практически не отнимает время.
Тем не менее что-то сильно грузит программу, куда покопать?
Прикрепления: 0235163.png (726.0 Kb)


Сообщение отредактировал Adriana - Пятница, 26.10.2012, 13:50
 
ninthДата: Пятница, 26.10.2012, 14:52 | Сообщение # 36
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Их тоже оптимизировать нужно ) Я так понимаю, ты лепил коллизии сразу на видимую геометрию? Вместо определения коллизии с "землёй", вероятно намного быстрее будет считать просто высоту по тому же принципу, по которому ты считал высоту для построения "земли". Так же посмотри в сторону "октрификации" http://www.panda3d.org/forums/viewtopic.php?t=12947
Вообще обычная практика при создании коллизий - делать под них отдельную геометрию достаточно сильно упрощённую. Если присмотришься - даже в самых современных играх с наикрутейшей физикой и т.п. применён данный подход.
 
AdrianaДата: Пятница, 26.10.2012, 23:27 | Сообщение # 37
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
С коллизиями я разобрался, у меня видимая геометрия итак упрощенная, земля из квадратов по два полигона. Собственно тормозит когда луч проходит через много полигонов, так что когда я тестировал этот самый луч, не учел этого. Когда луч смотрит строго вниз от модели, то ничего не тормозит.

В общем я подошел к другой проблеме, персонаж бегает рывками, даже с использованием globalClock.getDt(). Так как в фоне постоянно идут вычисления новых чанков, новых деревьев. Какой есть способ сделать так, чтобы персонаж всегда бежал с одинаковой скоростью, не обращая внимания на расчеты в фоне?

Добавлено (26.10.2012, 23:27)
---------------------------------------------
Собственно кажется и эту проблему решил, хитрыми манипуляциями с потоками, приоретатми и задержками. Видео: http://youtu.be/dCsFaj7MXFI

 
ninthДата: Суббота, 27.10.2012, 13:01 | Сообщение # 38
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Гратс ) Успехи налицо )
Вот ещё идея для оптимизации - вместо большой дистанции видимости попробовать периодически делать рендер окружающего пространства, потом его скрывать, а получившееся накладывать на скайбокс. Но поскольку сам я так не пытался делать - то это только теоретическое предположение.

Ещё одно - возможно стоит поиграться с балансом (количество полигонов в кадре)/(количество перерасчётов), т.е. баланс GPU/CPU

По поводу упрощения - я имел ввиду установка вместо допустим десятка полигонов - одного аппроксимированного для коллизий.

з.ы. Может тему в WiP перенести?
 
AdrianaДата: Суббота, 27.10.2012, 16:03 | Сообщение # 39
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
Quote (ninth)
Может тему в WiP перенести?

Вы тут администратор, вам виднее, я не против, если что.

Со скайбоксом идея интересная, возьму на заметку.

GPU практически никак не нагружен, а вот на CPU идет нагрузка не слабая, так что приходится в основном эту нагрузку и снижать. Приоритеты и задержки между микрооперациями помогают пока.
 
ninthДата: Воскресенье, 28.10.2012, 19:41 | Сообщение # 40
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Тему перенёс.
 
Форум Panda3D - по русски » Panda3D » WiP » Фреймворк voxplanet и игра Suber (Проблемы, процесс разработки)
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Поиск: