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

Да, так как пока нет реализации трехмерных чанков, я просто создаю вниз по плоскости, так называемая юбка. Ну а текстура растягивается, угу

Добавлено (12.10.2012, 11:22)
---------------------------------------------
Quote (ninth)
Не пробовал поиграть с настройками near plane камеры?

Попробовал, причина не в этом. Тут что-то странное. Причем не зависит от положения камеры, кроме того что камера должна быть близко. Объекты исчезают и появляются, когда камера висит в одном месте, но вращается вокруг своего центра. Посмотришь чуть повыше - объект исчез, посмотрел чуть пониже - объект появился, исчез соседний.

Добавлено (12.10.2012, 11:36)
---------------------------------------------
Проблема оказалась с другой стороны, camLens.setFar был задан слишком большой, и видимо от того происходили глюки, сейчас выставляю setFar в зависимости от дистанции LOD


Сообщение отредактировал Adriana - Пятница, 12.10.2012, 12:21
 
ninthДата: Пятница, 12.10.2012, 11:37 | Сообщение # 17
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Quote (Adriana)
я просто создаю вниз по плоскости, так называемая юбка

Ага, есть подозрение, что причина как раз в этом - из-за длинной юбки, ушедшей далеко за пределы камеры, срабатывает отсечение. Попробуй укороти или убери юбку для эксперимента.
 
AdrianaДата: Пятница, 12.10.2012, 12:22 | Сообщение # 18
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
Quote (ninth)
Ага, есть подозрение, что причина как раз в этом - из-за длинной юбки, ушедшей далеко за пределы камеры, срабатывает отсечение. Попробуй укороти или убери юбку для эксперимента.

Да уже не важно, так как после нормального указания setFar проблема перестала существовать. Юбку кстати тоже сделал покороче, так как после сглаживания высот в длинной юбке нет надобности.
 
AdrianaДата: Пятница, 12.10.2012, 14:56 | Сообщение # 19
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
Столкнулся с очередной проблемой. Теперь касается освещения. На скриншоте максимальная дистанция, при которой квадродерево рисует 4 чанка, а освещение (plight) распространяется на отдельные чанки, вместо того чтобы освещать весь регион как одну монолитную область. Какие мануалы читать?
Прикрепления: 7494919.png (645.9 Kb)
 
ninthДата: Пятница, 12.10.2012, 15:07 | Сообщение # 20
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
У тебя похоже нормали неправильно расположены.
 
AdrianaДата: Пятница, 12.10.2012, 18:16 | Сообщение # 21
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
Я использовал как основу пример Tut-Procedural-Cube (или как-то так), там есть функция make_square для двух вершин, я допилил для 4 вершин, нормали не трогал.
Ссылка на код

Что поправить или нормали ок?
 
ninthДата: Пятница, 12.10.2012, 21:17 | Сообщение # 22
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Хм. Странная какая-то формула для расчёта нормали. В простейшем случае нормали всех вершин должны быть перпендикулярны плоскости твоего квадрата или треугольника (face). В этом случае модель будет освещаться способом, который в 3d редакторах называют solid или flat, если же нужна гладкая поверхность, то при расчёте нормалей придётся учитывать расположение граней соседних полигонов. Вот для общего развития http://www.enlight.ru/faq3d/articles/52.htm
А пока для эксперимента попробуй посчитать одну нормаль как-то так Vec3(coord2-coord1).cross(Vec3(coord4-coord1)) и поставь её на все четыре угла.
 
AdrianaДата: Суббота, 13.10.2012, 17:59 | Сообщение # 23
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
Сделал как тут
Стало более менее нормально.
Прикрепления: 6098426.png (1.34 Mb) · 5203616.png (1.20 Mb) · 7333003.png (701.3 Kb)
 
ninthДата: Суббота, 13.10.2012, 18:04 | Сообщение # 24
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Дык там и описан тот способ, что я показал: Vec3(coord2-coord1).cross(Vec3(coord4-coord1))
 
AdrianaДата: Воскресенье, 14.10.2012, 13:10 | Сообщение # 25
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
Quote (ninth)
Дык там и описан тот способ, что я показал: Vec3(coord2-coord1).cross(Vec3(coord4-coord1))

Угу но немного другим языком и с формулами.

Прикручиваю деревья.
Странно: юзаю instanceTo, но фпс все равно низкий, оригинальных деревьев 10 штук, и они множатся инстансингом, по идее должно сильно сокращать нагрузку на видяшечку, но как-то не особо эффектно.

All info stat:
10242 total nodes (including 65 instances); 0 LODNodes.
299 transforms; 0% of nodes have some render attribute.
4969 Geoms, with 744 GeomVertexDatas and 3 GeomVertexFormats, appear on 4969 GeomNodes.
110528 vertices, 110528 normals, 0 colors, 110528 texture coordinates.
20548 normals are too long, 65536 are too short. Average normal length is 22.5602
GeomVertexData arrays occupy 3540K memory.
GeomPrimitive arrays occupy 334K memory.
1574 GeomVertexArrayDatas are redundant, wasting 675K.
741 GeomPrimitive arrays are redundant, wasting 326K.
536432 triangles:
522096 of these are on 163447 tristrips (3.19428 average tris per strip).
14336 of these are independent triangles.
3 textures, estimated minimum 3888K texture memory required.

None
Chunks models: 3895 * attached: 224 / detached: 3671
Chunks (state dict): 4393 * active: 224 / passive: 4169
DX, DY: 0 0
CharX, CharY: 34794.0976562 30841.2246094
CamX, CamY: 34794.0976562 30841.2246094

Добавлено (14.10.2012, 13:10)
---------------------------------------------
В общем, узнал что надо делать setInstanceCount(n) и шейдером назначать позиции объектам -_-

Прикрепления: 7722873.png (1.68 Mb)
 
ninthДата: Понедельник, 15.10.2012, 08:23 | Сообщение # 26
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
instanceTo, насколько я знаю, работает для анимированных моделек. Для статики эффекта не будет.
С шейдерами аккуратнее, некоторые ATIшные карты могут некорректно их обрабатывать.
 
AdrianaДата: Понедельник, 15.10.2012, 13:16 | Сообщение # 27
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
Я сделал как тут: http://www.panda3d.org/forums....#72130

Но встретил очередную проблему: если объект-родитель не виден в камере, то исчезают все склонированные инстансы. Куда копать в панде? Я так полагаю это какая-то оптимизация, чтобы объекты за камерой не нагружали видеокарту, как ее отключить для конкретных моделей?


Сообщение отредактировал Adriana - Понедельник, 15.10.2012, 13:16
 
ninthДата: Понедельник, 15.10.2012, 14:50 | Сообщение # 28
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Quote (Adriana)
Я так полагаю это какая-то оптимизация

Это обычное поведение - объекты вне камеры не участвуют в рендеринге. Я сомневаюсь, что это можно отключить стандартным способом, так что надо искать другой путь, например помещать дерево на место одного из инстансов перед камерой. Хотя я конечно могу ошибаться, однако, ещё раз порекомендую отказаться от способа "через шейдер" и попытаться решить проблему производительности иным путём, RigidBodyCombiner например попробовать, иначе ты рискуешь тем, что твой код будет запускаться только на весьма ограниченном круге железа. Помимо этого, могу предсказать проблемы в будущем, если ты захочешь накрутить поверх ещё какие-то шейдеры - тени, бамп, блур и т.п.
 
AdrianaДата: Понедельник, 15.10.2012, 18:59 | Сообщение # 29
Сержант
Группа: Пользователи
Сообщений: 21
Награды: 1
Репутация: 4
Статус: Offline
Ригид неуместно медленный в сборке, игрок уснет ждать пока все деревья в комбайнер соберутся. Без Geometry Instancing путь возможен только со спрайтами, биллбордами, не совсем желательно, если не сказать - совсем нежелательно. Шейдер там простенький, неужто не заведется на "плохих" видеокарточках? За куллинг отвечает http://www.panda3d.org/apiref.php?page=BoundingBox, но я пока так и не понял, как его применять к ноде. Правда еще и не читал особо на эту тему ничего, думаю расширить эту коробочку на всю область с инстанциями.
 
ninthДата: Понедельник, 15.10.2012, 22:57 | Сообщение # 30
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Вопрос не в сложности шейдера, а в поддержке карточкой/драйвером собственно возможности инстансинга, использование //Cg profile gp4vp gp4fp

http://www.panda3d.org/blog/?p=44
Quote
This leaves the question of whether this will actually work without use of shaders. The answer is no, I’m afraid. There is an OpenGL extension that allows you to use geometry instancing with the fixed-function pipeline, but very few video cards support it. Because it would be quite complicated to implement that, I decided not to do it.

С момента публикации поста прошло уже прилично времени, но я могу дать 99% гарантии того, что данный приём не заработает на встроенных интеловских картах, которые часто втыкают в ноуты и как минимум на половине атишных. В общем, если хочешь чтобы оно работало не только у избранных придётся либо искать другой путь, либо придумывать запасной вариант на карточки не поддерживающие данную фичу.
Кстати, по ссылке уже можно увидеть проблемы с последующим использованием шейдеров - отсутствует отражение деревьев в воде.

А с RBC ты проверь - принципиально он вопрос с производительностью решает или нет? Если решает, то спрайты и билборды тебя скорее всего не спасут. Они конечно снизят общую нагрузку, но корень проблемы останется. А корень в том, что в карточку посылается слишком много отдельных нодов решение в объединении их в единую геометрию, чем, собственно, RBC и занимается.
 
Форум Panda3D - по русски » Panda3D » WiP » Фреймворк voxplanet и игра Suber (Проблемы, процесс разработки)
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск: