Фреймворк voxplanet и игра Suber
|
|
Adriana | Дата: Воскресенье, 07.10.2012, 08:14 | Сообщение # 1 |
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
| Так как тема вышла из первоначального топика, сменил топик. Теперь тут будет обсуждение воксельного движка для панды, фреймворка - Voxplanet и игры, в которой он используется - Suber.
Игра в жанре Action-RPG.
git репозиторий доступен по адресу: https://github.com/viatoriche/suber/
--------------
Доброе время суток.
Я пишу воксельную игру в огромном мире, сравнимом с нашим (сейчас в конфиге задано: 2**24 метров, а это 16777216). В общем столкнулся с такой проблемой, что на больших координатах ровные воксели искажаются.
Есть ли в панде встроенные средства для борьбы с этой проблемой или же придется изобретать какие-то обходные пути? Какие вообще могут быть пути для решения проблемы? (Разумеется, сокращение размера мира не рассматривается).
Скриншоты прилагаются. Координаты видны в строке статуса, если что.
Сообщение отредактировал Adriana - Пятница, 12.10.2012, 12:28 |
|
| |
ninth | Дата: Понедельник, 08.10.2012, 02:38 | Сообщение # 2 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Никогда не сталкивался с подобными проблемами. Под искажением ты имеешь ввиду именно искажение геометрии вокселей или их позиции? Самое простое на вскидку - сменить масштаб (не размер) всего мира. Попробуй на render поставить масштаб 0.01 и посмотреть как себя поведёт мир
|
|
| |
Adriana | Дата: Понедельник, 08.10.2012, 03:36 | Сообщение # 3 |
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
| Как я понял искажаются позиции вершин. То есть рисуются не совсем там, где положено. Попробую менять масштаб, пока что делаю масштабирование костылями.
UP: Хотя, в общем-то, как сейчас уже работает костыль меня вполне устраивает, так что наверное не буду пробовать масштаб, или попозже.
Суть в том, что я нахожусь всегда по координатам не выше 65536, а картинку меняю в зависимости от фактических координат на глобальной карте, как бы глядя в окно, через квадрат 65536х65536.
Если кому интересен проект, то доступен в гит: https://github.com/viatoriche/suber
UP2: прикреплю еще результаты генерации планет.
Сообщение отредактировал Adriana - Понедельник, 08.10.2012, 03:58 |
|
| |
ninth | Дата: Понедельник, 08.10.2012, 18:02 | Сообщение # 4 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Да, если смещаются вершины, то действительно похоже на проблемы рендера, в этом случае вероятно для исправления без костылей придётся лезть в исходники.
Кстати, скажи, а насколько "воксельные" у тебя планируются воксели? Ведь изначально под вокселем подразумевается объёмная замена пикселя, но на скринах нечто больше похожее на майнкрафтовские "кирпичики"?
|
|
| |
Adriana | Дата: Понедельник, 08.10.2012, 18:15 | Сообщение # 5 |
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
| Воксели планируются быть кубиками. На скринах задействуется LOD, когда чем дальше, тем крупнее чанки и крупнее в них воксели. Сейчас я немного переделал и вместо вывода кубиков я вывожу сетку высот (у вокселей скашиваются грани).
Хотя это все те же воксели, но выглядят более кавайно.
Воспользуюсь случаем и поспрашиваю еще: 1. Как затайлить модель текстуркой, так чтобы она не растягивалась, а повторялась? Я пробовал WMRepeat (или как его там), но почему-то метод игнорировался. 2.
All info stat: 828 total nodes (including 0 instances); 0 LODNodes. 413 transforms; 49% of nodes have some render attribute. 4944 Geoms, with 4944 GeomVertexDatas and 1 GeomVertexFormats, appear on 412 GeomNodes. 19776 vertices, 19776 normals, 0 colors, 19776 texture coordinates. GeomVertexData arrays occupy 618K memory. GeomPrimitive arrays occupy 58K memory. 23 GeomVertexArrayDatas are redundant, wasting 3K. 4943 GeomPrimitive arrays are redundant, wasting 58K. 9888 triangles: 0 of these are on 0 tristrips. 9888 of these are independent triangles. 1 textures, estimated minimum 1K texture memory required.
None Chunks models: 4293 * Show: 74 / Hide: 4219 * attached: 412 / detached: 3881 Chunks (state dict): 4293 * active: 74 / passive: 4219 DX, DY: 8519680 8126464 CharX, CharY: 8564018.92188 8140535.34277 CamX, CamY: 44338.921875 14071.3427734
И это 30 фпс. Как можно поднять производительность? (Да у меня слабенькое железо. поэтому оптимизация очень приоритетна)
|
|
| |
ninth | Дата: Понедельник, 08.10.2012, 18:45 | Сообщение # 6 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| В pstats не смотрел, что именно у тебя тормозит, рендер или какие-то расчёты? Слабенькое железо - понятие субъективное ) Можешь более точные параметры дать? У меня при замерах производительности, например, вот что выходило http://panda3d.org.ru/forum/11-171-1
По текстуре - нужно уменьшить масштаб самой текстуры (nodepath.setTexScale) или увеличить uv развёртку (если генерируешь геометрию на лету, а не подгружаешь модельки) чтобы текстура укладывалась в развёртке столько сколько нужно раз.
|
|
| |
Adriana | Дата: Понедельник, 08.10.2012, 19:32 | Сообщение # 7 |
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
| У меня используется текстурная карта и генерация геометрии, в карте пока 5 текстур, я назначаю координаты для вершин. Как увеличить uv развертку?
В pstats не смотрел, для меня это оказалось очередным открытием, так что поразбираюсь с ним попозже.
|
|
| |
Adriana | Дата: Понедельник, 08.10.2012, 19:44 | Сообщение # 8 |
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
| Ах да, железо
|
|
| |
ninth | Дата: Понедельник, 08.10.2012, 23:06 | Сообщение # 9 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Глянул по-диагонали в твой код. Насколько я понимаю, при твоём подходе затайливать не получится - для этого нужно иметь отдельную текстуру, которая будет тайлиться, а не карту. Суть процесса: когда твоя текстура по площади оказывается меньше чем текстурные координаты, то свободное место заполняется в соответствии с WrapMode. У тебя так не получится, потому что если увеличить UV, то станет видна остальная карта. Вот пример (текстура из стандартных): Code from panda3d.core import * import direct.directbase.DirectStart
tex = loader.loadTexture('maps/smiley.rgb') cm = CardMaker('card') card = render.attachNewNode(cm.generate()) card.setTexture(tex) card2 = render.attachNewNode(cm.generate()) card2.setTexture(tex) card2.setX(-1.1) card2.setTexScale(TextureStage.getDefault(), 2, 4)
base.disableMouse() base.camera.setPos(0, -5, 0) base.camera.lookAt(card)
run()
З.Ы. Не такое уж и слабое у тебя железо. По ссылке, где я тестировал производительность, железяка была схожей, если не слабее. Надо смотреть что тормозит.
З.З.Ы. При процедурной генерации геометрии не факт, что проблема, с которой стартовал топик - в рендере панды, надо глянуть в сторону точности вычислений питона.
|
|
| |
Adriana | Дата: Вторник, 09.10.2012, 20:25 | Сообщение # 10 |
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
| Угу я отказался от затайливания. Просто буду применять текстуры более высокого разрешения.
Ссылка с тестированием не рабочая. На англоязычном форуме подсказали то же, что я сделал.
Проблема все же в округлении при достаточно большом удалении от центра, в майнкрафте Нотч это фиксить не стал, а искаженные пространства обозвал "Далекими землями".
Сообщение отредактировал Adriana - Вторник, 09.10.2012, 20:27 |
|
| |
ninth | Дата: Вторник, 09.10.2012, 23:34 | Сообщение # 11 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Quote (ninth) Ссылка с тестированием не рабочая. На англоязычном форуме подсказали то же, что я сделал. Исправил, там точка в ссылку попала. Эм. Не совсем понял о чём конкретно чём речь
Quote (Adriana) Проблема все же в округлении при достаточно большом удалении от центра, в майнкрафте Нотч это фиксить не стал, а искаженные пространства обозвал "Далекими землями". Это понятно, что проблема с округлением/точностью, но это может происходить как на стадии рендеринга - ковырять рендеринг, так и до того, на стадии генерации - ковырять точность вычислений питона, возможно использовать numpy. Хотя в общем случае, IMHO, разумнее использовать твой "костыль", т.к. при увеличении точности вычислений и разрядности чисел будет увеличиваться нагрузка на CP/GP. Про подобные проблемы в майнкрафте не знал.
|
|
| |
Adriana | Дата: Среда, 10.10.2012, 09:15 | Сообщение # 12 |
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
| Quote (ninth) Эм. Не совсем понял о чём конкретно чём речь О костыле.
Из игры, кстати, потихонечку начал выделяться фреймворк, который я пока временно назвал "voxplanet", куда включается генератор планеты, квадродерево для детализации, чанки и так далее. Если кому интересно, конечно. Суть такова, что используя фреймворк можно будет делать свою игру в полностью изменяемом динамичном мире любого размера (планету можно в конфиге сократить до любого нужного размера).
Сделал глобальный рефакторинг, фреймворк теперь в отдельной директории voxplanet.
|
|
| |
ninth | Дата: Среда, 10.10.2012, 17:14 | Сообщение # 13 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Угу. Спасибо за расшаривание.
|
|
| |
Adriana | Дата: Четверг, 11.10.2012, 13:07 | Сообщение # 14 |
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
| В общем я победил низкий фпс. Добавил модельке чанка метод flattenStrong() Сильно рекомендую для статичных неизменяемых моделек этот метод.
UP: Странная фигня творится с объектами, которые находятся очень близко к камере: когда двигаешь камеру - объект исчезает, еще двигаешь - появляется, и так рандомно, без всякой системы. В момент исчезания render.analyze() показывает что все объекты есть на сцене и никуда не делись. В чем может быть причина подобного странного поведения? Замечал не раз и раньше, например с кубами, которые генерирует ShapeGenerator.
Сообщение отредактировал Adriana - Четверг, 11.10.2012, 15:01 |
|
| |
ninth | Дата: Четверг, 11.10.2012, 18:14 | Сообщение # 15 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Не пробовал поиграть с настройками near plane камеры? Хотя я не уверен, что причина в этом. Что за растянутая текстура видна? Это боковые грани оставшихся видимыми кубов?
|
|
| |