Динамическое BSP-дерево

19.12.2007 Антон Волков

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

Для сравнения мы взяли модель с ландшафтом и домиком из демки движка 3.0.

Динамическое BSP-дерево

Управление:

  • Стрелки — перемещение
  • Таскать мышью — смотреть вокруг
  • Колёсико или +/- — изменить перспективу
  • Пробел — вкл/выкл анимацию
  • Enter — изменить BSP-приоритет
  • Q — изменить качество
  • B — визуализация BSP-дерева

Комментарии (27) на “Динамическое BSP-дерево”

  1. analytic Says:

    первый :p
    в опере шустренько работает

  2. Иван Зыков Says:

    Как стрелять?

  3. непонятки Says:

    Ребята, мне совсем непонятно зачем вы велосипед изобретаете? Ну ведь есть же: папервижн, авэй3д и Сэнди.
    Почему бы просто на них игру взять и собрать? На авэй3д уже и комм проекты есть и даже очень-очень…
    Или у вас цель - движок построить?

  4. Антон Волков Says:

    Потому что вышеперечисленные движки умирают при среднесложной сцене. А нам ещё пользовательский интерфейс надо заставить работать. Далее, ни в одном из вышеперечисленных движков по-человечески не реализованы ни 3D-спрайты (для нас это архиважно), ни текстурных объектов (построение текстур налету — мы ведь не хотим единожды смоделировать весь игромир и никогда больше не модифицировать), ни полноценное освещение (попытки PV3D пока что ограничиваются одним источником света), ни мягкий шейдинг (в Away3D есть неплохой фонг, но наш мягкий нам нравится больше т.к. качественно работает при небольшом количестве полигонов), ни теней (в PV3D 2.0 уже есть демка с размытыми псевдо-тенями от циферок, но речь ведь о комплексном подходе). Демки Sandy вообще без слёз смотреть нельзя из-за глюков и артефактов. Также надо не забывать о размере отсчитываемой области — наша игра должна занимать всё окно браузера. Эти движки же как правило демонстрируют свои демки в разрешении 400х300, да ещё и с low-quality, что может ввести в заблуждение относительно их производительности.

    Вобщем, поверьте, если бы у нас была возможность не тратить год, мы бы его не тратили, т.к. у нас коммерческие интересы, а не только творческие :)

  5. Super Man Says:

    Привет! Круто! Вот это уже другое дело! Шустро да еще и динамично! Ух! Ваще класс! Просто нет слов! :) Но нужно теперь наращивать эффекты и т.д. в эту версию… Думаю будет шустро!
    Вспомнил еще один хитрый прием - при быстром вращении можно делать quality - low, а при медленном вращении quality - medium, ну и при остановке quality - hight. Может пригодится! Просто видел где то такое.

    Еще есть оптимизация такая(только для статики). Суть вот в чем. Представьте себе, что камера движется затем останавливается. Запоминается экран(т.е. вьюпорт) накладывается эта текстура на сферу (с минимальным оптимальным количеством полигонов). Суть в том что при последующим вращении не нужно все перерисовывать - вращается сфера а там где оказывается пустота прорисовывается и добавляется к текстуре сферы… Данная фишка работает тока для статически неизменяемого мира и только при вращении. Еще лутше при остановке отрисовать в фоновом режиме всю текстуру сферы.
    Мож пригодится!

  6. Super Man Says:

    Ой еще забыл… Ограничьте фпс до 25-30 человеческий глаз все равно не видит больше…

  7. непонятки Says:

    to Антон Волков Says:
    20.12.2007 в 21:10

    ясно. да, согласен, Сэнди - отстой.
    Можете пояснить: “…ни текстурных объектов (построение текстур налету..” - разве away3d этого не делает?
    По high-quality….Знаете, сразу предупреждаю - это мое личное мнение, вот существуют такие моменты, как “супер-технологичный продукт”, его можно оттачивать год-два, выпустить - а пользователям он окажется ненужным. Ну не готовы пользователи к этому еще.
    Я вот к чему, как то читал М.Делла, он рассказывает как они год мучались с каким-то сложным проектом, фаршировали его по полной. Уж не помню как назывался (кому интересно - обратитесь к первоисточнику). Так вот, сделали он тестовый выпуск - оказалось пользователям нафиг не нужным. Проект свернули. Вывод Делла: вначале узнай насколько пользователям нужен “такой фарш”, а уж потом приступай к выполнению.
    Это все не для того чтобы отговорить вас. Это к тому что, ну вот на движке away3d: www.mars.com - вот здесь меня, как пользователя, качество текстур устраивает на 100%. Уж не знаю high это или low.
    Вот, смотрю на вашу демку, красиво, Бомж, что с теткой разговаривает, видимо Low-quality, но меня он как пользователя устраивает. Потому что, от процесса игры (общения с теткой) я получаю кайф и мне пофиг какого у него цвета глаза.
    Понимаете?
    Вот поэтому я и спросил - вы игру делаете или движок. По вашему ответу, вижу что движок. А игра - побочный продукт.
    В связи с этим вас не напрягает такой момент: уж очень упорно ходят слухи, в т.ч. слышал и от создателя away3d, что псевдо 3d на флеше продержится до первого квартала 2008. Дескать, все ждут от флеша10 полноценной поддержки 3d и openGL….

    Никого не хотел обидеть.

  8. непонятки Says:

    в догонку, по источнику света. А зачем он вам вообще нужен? Только для реализации теней? Я не спец в 3d flash, пока только учусь. Но понимаю в 3d. И вот насколько я разобрался, в 3d flash источник света как таковой не нужен. Т.е. объекты юзают обычные процедурные карты (текстуры с настроенной освещенностью). Т.е. для построения сцены, в отличие например от Макса, источник света не устанавливается и не настраивается. Все по умолчанию светло. Допустим вам нужна ночь и день - тут одного источника достаточно. Включили-выключили: день-ночь.
    Правильно? Если да, то цель - тени.

    Я вопросы задаю не из вредности. Мы сейчас на 3d flash делаем игру, но выбор остановили на paper+away. Уж очень онлайновую игру нужно. Игра не социальная, вам не конкурент. И мне интересен ваш взгляд на реализацию во flash.

    И еще вопрос такого плана - а реализция клиента у вас будет?

  9. Антон Волков Says:

    Super Man,
    спасибо за идеи. Насчёт переключения качества - это полезный приём, в своё время использовали его в разработке презентаций/сайтов. Насчёт просчитанной панорамы, думаю, нам не актуально, т.к. хоть мы и делаем поддержку перспективы, игра всё же будет в изометрии. Зато есть идеи по предрасчёту 3D-персонажей, но этим займёмся в феврале. FPS в конечном итоге конечно же снизим, чтобы процессор не нагружать на полную, но в демках оставим, чтобы лучше оценивать производительность.

  10. Антон Волков Says:

    непонятки,
    Всё, что вы говорите разумно. У нас в ходу есть такая фраза: “Последние 2% качества на х.. никому не нужны”. Но так уж сложилось, что мы немного перфекционисты (я, по крайней мере :). Во всей своей работе мы никогда не шли по пути халтуры. Где-то, бывает, перегибаем, но так как внутри студии есть противовесы, то сильно “заигрываться” нам не дают. Все решения по фичам рождаются только в связи с необходимостью. Например решение о системе сигналов и BSP родилось только после реальной оценки производительности и проблем демки 3.0.

    По поводу того, что мы делаем, игру или движок. У нас разделение труда. Моя работа сосредоточена на 3D-движке. Непосредственно о геймплее постоянно думают Александр и Иван, периодически привлекая всех остальных. Не имея хороший технологический фундамент мы не можем продумывать детали геймплея. Вот, например, если бы мы не заложили систему освещения, мы бы, во-первых получили бы плоскую “аппликацию” (можно посмотреть), во-вторых сильно снизили интерактивность мира. Сейчас же будет и смена суток/погоды, вкл/выкл освещения на улице, в домах. Когда дело дойдёт до боёвки у нас будет возможность внести и stealth-элементы.

    Насчёт Flash 10. Мы его ждём, т.к. заявленные фичи отлично укладываются в нашу архитектуру и значительно повысят производительность. Однако смею уточнить, что ни о полноценной поддержке 3D, ни об OpenGL речи не идёт. Видео с презентации (кстати, советую посмотреть) показывает по сути только перспективную трансформацию мувиклипов, что, впрочем, всё равно хорошо, т.к. позволит делать перспективную коррекцию текстур не разбивая полигоны на мелкие треугольники. Кстати, надо заметить, что поддержка OpenGL/DirectX в операционных системах совсем не означает, что движки типа Doom3, Unreal или Crisys писать не нужно. 3D-движок — это не только отрисовка полигонов.

    Насчёт текстурных объектов я имел ввиду это: http://blog.alternativaplatform.com/ru/2007/10/19/texture_objects/

    Mars.com показывает мне простую сферу с текстурой и 10 FPS на совсем не слабой машине. Окна с информацией открываются очень медленно. Экстраполируйте эту 3D-сцену хотя бы до ландшафта с домиком и десятком деревьев, добавьте чат и окно инвентаря. Игра с 5-10 FPS не будет пользоваться популярностью, какие бы там ни были игровые возможности.

    Я не критикую работу команд PV3D и Away3D. Они молодцы, тем более, что работают на энтузиазме. Многие успешно используют их разработки, например BrahmaBus от студии PARK. Просто для нас эти движки не подошли. К сожалению.

  11. Квиринг Алексей Says:

    Еще не следует забывать - даже если бы у нас и был сейчас 3D движок, то серверная часть все еще не готова, так что время на разработку движка еще есть - но не очень много :-)

  12. Serega Says:

    Привет, можно поинтересоваться каким образом вы выбираете плоскости для рассечения? Первая попавшаяся, равенство количества полигонов по обе стороны или еще как-то ?

  13. Антон Волков Says:

    На данный момент первая попавшаяся с наивысшим приоритетом. Т.е. сначала выбираем все полигоны ландшафта, потом дома, а потом уже боксов.
    Сбалансированность (равномерное разделение полигонов по обе стороны) дерева для сортировки не обязательна, т.к. количество проходов от этого не меняется.
    Есть идея на будущее — выбирать полигоны в порядке уменьшения размера (по площади?). Но не факт, что это даст хороший эффект.

  14. and2 Says:

    заценил, респект вам!

  15. непонятки Says:

    теперь понятки. молодцы!

  16. Прохожий Says:

    В дополнение к словам от непонятки:
    Цитата из одной статьи с DTF’а
    “Большой минус тех людей, которые имеют программисткое прошлое, в том, что они увлекаются движками. Движок должен делать то, что вам нужно, и при том самым оптимальным и эффективным способом (не “лучшим”, а именно “оптимальным” - это разные вещи).”
    Думаю именно это он имел в виду.
    От себя могу добавить, что все что вы делаете это хорошо и например мне это нравиться, но нужно ли это широкой аудитории? Лично мне кажется что было бы лучше если бы вы сейчас все силы бросили на завершение проекта (читай: серверную часть), и уже во время работы сервера (читай: игры) доводили технологическую часть до того что вы хотите видеть в итоге.
    Конечно со мной можно не согласиться, я в этой сфере просто прохожий) тем не менее уверен в правоте своих слов :)
    PS Тоже не хотел никого убидеть

  17. Квиринг Алексей Says:

    тут два момента:
    1) пока у нас нет движка для игры, дажет 3-я версия достаточно тормозная
    2) мы не сможем перекинуть флешеров на сервер, так как среды и технологии совершенно разные, пока мы в двоем справляемся с сервером - может позже еще возмем программиста

  18. Антон Волков Says:

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

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

  19. Наблюдатель Says:

    Антон,
    а кто юзает ещё PV3D? У меня в памяти только “автобус” от парка и рубюокс для РоббиВильямса.
    BMW в 3d гонках, тоже его юзала?

  20. Антон Волков Says:

    Можно посмотреть здесь: http://blog.papervision3d.org/2007/12/30/25-cool-things-to-do-with-papervision3d/
    Другой вопрос, насколько тут PV3D применяется.
    Собственно, о чём я и говорил. На красивых 300х200 демках кажется всё замечательно. А вот в реальных проектах применимость сводится разве что к элементам навигации, которые, кстати, можно было и без 3D сделать, и работало бы шустрее.

  21. Прохожий Says:

    Спасибо. Понял. Остается только верить в ваши слова, пока нет повода вам не доверять. :)

  22. Arseniy Says:

    Rebyata - mu toje nachali delat dvijok - i sdelali vse ochen ochen kryto - no potom ostanovilis i zabrosili ego kak vushla Paper Vision, Away 3D i td…

    Ya dymajy chto vu zrya tratite god na pochti nichto - vu mogli bu vzyat Away 3D ili PaperVision - kotorue ispolzyjyt MIT license - chto znachit chto vam ne nado davat nekomy kod, izmenit vse ot a do ya kak vam nado.

    Plys hochy zametit chto skoro vuhodit Flash 10, kotorui bydet podderjivat hardware acceleration… chto znachit chto zrya eto vse delaetsya chtob imet extra 5-10 FPS, syma shodite ;) nado znat svojy tehnologijy rebjata… vse eti zatjanetsya esho na pary let ;)

  23. Антон Волков Says:

    Arseniy, ответ уже есть в комментариях выше.
    В любом случае жизнь покажет. ;)

  24. Прохожий Says:

    Про это я и говорил. Что было бы обидно, что если после выхода 10-го флэша какой-нибудь похожий проект заберет всю аудиторию себе, затратив меньше усилий. Остается надеяться, что вы со своим талантом сможете отстоять проект и в таких условиях. Хотя например мой компьютер не поддерживает на аппаратном уровне то что показывают ваши флэшки :) у меня видеокарта 4ый GeForce. Фактически такого на своем компьютере не видел вовсе. Кстати может вы на этом тоже сыграете. Ведь у вас уже будет движок на 9ом флэше работающий в 3D без аппаратной поддержки и 2е версии игры. С hardware acceleration и без.

  25. Антон Волков Says:

    Движок — это только часть игры. То, что на блоге в основном видно работу по 3D, лишь из-за того, что другие разработки сложнее визуализировать.

    Вообще говоря, я считаю, что прошлый год дал нам ценный опыт и целый ряд ноу-хау. Поэтому теперь уже написать движок с нуля (что, мы впрочем сейчас и делаем) можно за 1-2 месяца (и не важно, писать заново или “переделывать от а до я PV3D или Away3D”). Поэтому я не вижу никаких проблем даже с потенциальным портированием движка на любую платформу, будь то Flash 10, Silverlight или JavaFX.

    Короче, основной капитал не в мегабайтах кода, а в голове.

  26. Леонид Says:

    такой вопрос, почему перетриангулируются статические сцены?

  27. Антон Волков Says:

    Потому что триангуляция - это способ имитации перспективного искажения текстур, т.к. Flash Playerы до 10 версии этого не умеют. А искажение в свою очередь зависит от положения камеры, поэтому если оно меняется, триангуляция также меняется. К BSP-дереву это не имеет никакого отношения.

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

(Регистрация)