[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Форум Panda3D - по русски » Panda3D » WiP » Фреймворк voxplanet и игра Suber (Проблемы, процесс разработки)
Фреймворк 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).
В общем столкнулся с такой проблемой, что на больших координатах ровные воксели искажаются.

Есть ли в панде встроенные средства для борьбы с этой проблемой или же придется изобретать какие-то обходные пути?
Какие вообще могут быть пути для решения проблемы? (Разумеется, сокращение размера мира не рассматривается).

Скриншоты прилагаются. Координаты видны в строке статуса, если что.
Прикрепления: 1510840.png (493.4 Kb) · 2837718.png (619.9 Kb) · 7547516.png (922.5 Kb)


Сообщение отредактировал 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: прикреплю еще результаты генерации планет.
Прикрепления: 5663128.png (191.1 Kb) · 8039442.png (193.2 Kb)


Сообщение отредактировал 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
Ах да, железо
Прикрепления: hard.txt (26.6 Kb)
 
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.
Прикрепления: 6538078.png (1.27 Mb) · 3100208.png (1.48 Mb) · 2416090.png (1.17 Mb)


Сообщение отредактировал Adriana - Четверг, 11.10.2012, 15:01
 
ninthДата: Четверг, 11.10.2012, 18:14 | Сообщение # 15
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Не пробовал поиграть с настройками near plane камеры? Хотя я не уверен, что причина в этом. Что за растянутая текстура видна? Это боковые грани оставшихся видимыми кубов?
 
Форум Panda3D - по русски » Panda3D » WiP » Фреймворк voxplanet и игра Suber (Проблемы, процесс разработки)
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск: