Демка «полностью динамическое BSP - дерево».

20.07.2009 автор Романов Алексей

Всем скептикам, утверждающим: “Невозможно создать полностью динамическое BSP-дерево и чтобы оно быстро работало” посвящается :) . Причем, еще не проводил оптимизацию.

Динамическое BSP-дерево обеспечивает абсолютно точную сортировку полигонов и  их врезку друг в друга. На скорость работы такого дерева не влияет - статическая сцена или динамическая (даже, если все объекты на сцене двигаются, крутятся, пересекаются) - скорость будет всегда “одинаковой”.

Временно выход версии 1.3 отложен, но не надолго. Пока занимался сборкой этой версии  появилось несколько интересных идей, как только их реализую, сразу выложу.

Управление:

    Key “Space” - animation on/off;
    Key “E” - show edge on/off;
    Key “Q” - change quality;
    Остальное, как всегда.

Комментарии (9) на “Демка «полностью динамическое BSP - дерево».”

  1. best:

    Круто! Ты просто монстр 3д! Думаю бсп создается на этапе рендеринга, так? И все равно у тебя те же глюки что и у альтернативы - видны линии разрезов полигонов… это не есть хорошо, и второе это область применения такой сортировки тока в архитектурных сооружениях, попробуй более или менее плавный объект туда вставить - фпс упадет в разы
    что за идеи интересно?

  2. Думаю бсп создается на этапе рендеринга, так?

    - да полностью динамическое дерево без какой либо предрасчетной структуры. Собственно каждый кадр создается новое дерево, но очень важный аспек моего дерева память не отъедает, используется система буферов. Так же дерево создается только для объектов (полигонов) которые видны в данный момент (попали в пирамиду видимости). Еще не маловажная особенность этого алгоритма он способен проводить врезку спрайтов в геометрию сцены. Т.е спрайты это не точка (как принято у аналогов), а объект имеющий свои размеры в 3D пространстве.

    И все равно у тебя те же глюки что и у альтернативы

    - скорее наоборот их нет, quality измените при LOW все во flash с разрезами будет.

    что за идеи интересно?

    - на то они и идеи, пока не проведу эксперименты, говорить о них не буду. Большинство идей касаются внутренней структуры движка, так что если даже расскажу без знания всей структуры это мало о чем скажет.

    попробуй более или менее плавный объект туда вставить - фпс упадет в разы

    - для таких объектов есть другие рендер фильтры. Более того теперь рендер фильтры можно менять на лету, что сильно повышает функционал. К примеру есть сцена на которой есть места где нужна абсолютно точная сортировка - используем BSP_RENDER, а есть места где и BASE_RENDER справляется. Как итог можно повысить общую производительность.

  3. best:

    понятно!

    по поводу разрезов - это ошибки флешь плеера, в идеале даже в качестве LOW не должно быть видно разрезов, нужно что бы точки совпадали с другими точками ) это сложная задача, думаю смысла решать ее нет.

  4. по поводу разрезов - это ошибки флешь плеера, в идеале даже в качестве LOW не должно быть видно разрезов, нужно что бы точки совпадали с другими точками ) это сложная задача, думаю смысла решать ее нет.

    Да, flash округляет точки при отрисовки по разному, что очень плохо. У меня есть алгоритм компенсации такого поведения flash, суть его в смещении точек (т.е. при разрезе полигона ребро одной части смещаем к другой, и соответственно наоборот).
    Есть минусы в такой попытки решит баг flash:
    1) храним больше данных;
    2) больше мат. расчетов;
    3) проблемы с полупрозрачными текстурами (будет видно как полигоны в 1 писек накладываются друг на друга)

  5. best:

    дак да, я ж говорю надо смириться с этим )

  6. дак да, я ж говорю надо смириться с этим )

    Я никогда так легко не сдаюсь :). Буду попутно думать, что с этим можно сделать.

  7. best:

    это здорово что не сдаетесь! ) респект!

  8. best:

    кстати а почему пример не текстурирован, и не в перспективе? ведь это усложнит его и сделает его невыносимо тормозным не так ли?

  9. ведь это усложнит его и сделает его невыносимо тормозным не так ли?

    Я уже говорил, я даю в примерах базис, а разницы перспектива или орфографический режим нету. Если добавить текстуры и перспективу скорость упадет всего на 2-3%.

    Кстати вот перспектива и текстурированная сцена причем очень сложная, в плане геометрии и текстур: http://www.infinity3d-engine.com/demos/cathedral_bsp.html

Оставить комментарий