Ручной трехмерный рендер

Пока вся прогрессивная flash-общественность предвкушает появление хардварного 3д, творческая артель «Сумрачные тугодумы», в моем лице, делает ручной трехмерный рендер.

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

Основные фичи:
— честный z-buffer (можно посмотреть на крабе, который «врезан» в стену слева)
— кд-дерево для статики (можно приделать бсп, но распилы считаю неприемлемыми)
— дизеринг на статике, как в первом unreal (100 лет уже хотел сделать такую штуку)
скорость (альтернатива7, например, на такой сцене показывает 10-15 фпс даже с простой сортировкой, не говоря уж об DynamicBSP)

В планах:
— сабпиксельная точность для моделек (вершины будут меньше дрожать при перемещении)
— мипмаппинг для моделек
— освещение
— может быть тени
— ну и всякое остальное :)

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



Демка вот тут: megaswf.com/simple_serve/64987/

Если не сложно — отпишитесь по скорости, багам и всему остальному.
  • +9

Комментарии (43)

+1
в такие моменты я понимаю какая пропась между мной и профессиональными программистами)) теперь осталось только сделать мегаигру типа миникрафта и рубить бабос!!!
  • fedos
  • fedos
0
А на чё это всё? О_О)) папер или?
0
*на чём
0
Рендер ручной.
Никаких флэш-функций или сторонних движков не используется.

Можно сказать, что я просто рисую пиксели в битмапу.
0
наверно, это очень круто :)
но для непосвященных выглядит убого, какие-то жуткие модельки с торчащими пикселями, или как они называются в тридэ, воксели?
  • qdrj
  • qdrj
0
Ну, скорости для полноэкранного сглаживания не завезли :)
Будет молехилл, будет круто.
0
по теме — ну слабом ноуте(2 ядра 1.2Гц, 2Гб озу), фпс ниже 40 не падает
и у тебя же в журнализме тени уже были?
0
Там другая технология, использовалась встроенная отрисовка, через drawTriangles().
Может и сделаю, если тормозить не будет.
0
Ну вообще считай человек свой 3д движок с нуля написал. И не абы какой а с довольно таки неплохой производительностью, учитывая то что hardware-ускорение не используется.
0
Linux, flash player 10 64bit, c2d-8600 (2 ядра 3.16ГГц, 8G памяти)
Скорость нормальная.
Из багов — стыки углов стен и домиков выделяются (ошибка рендера, если модели склеены).
Нужно больше текстур чтобы протестировать. Освещение будет какое-то или только статика?
0
Все текстуры статики пакуются в один большой атлас, ~2048*4096 или любой другой.

Сейчас так получилось, что текстуры домиков граничат с полом, поэтому и косяки на стыках. Надо будет делать отступ 4-8 пикселей, чтобы не заползали.
Текстур всего 42 штуки.

Освещение будет лайтмапами + гуро на модельках. Одноцветное, скорее всего.
0
Крутейше. Просто крутейше. Скажи пожалуйста сколько нужно времени чтобы понять как это работает и сделать чтото своё?)) Я чувствую многим включая меня это просто не дано)
+1
Сделай вольф3д — я делал в 8 классе учась. Потратил неделю может. Сам из головы все придумал как и сделал на паскале. Там алгоритм очень простой.
Потом сделай пару демок на OpenGL например. Поймешь как оно все работает. После этого дело за малым, сесть и сделать. Вся необходимая информация или уже будет у тебя в голове, либо ты будешь знать куда копать.
Не так уж много времени ИМХО надо.
Но сделать — это гораздо больше, чем просто знать как :-)
0
Базовые штуки сделать легко.
За неделю или две можно управиться.
Основная проблема в скорости, а тут можно и несколько месяцев ковыряться :)
0
Круто. И реально не тормозит: древний целерон 1700 > 30 фпс. Конечно игровая логика тоже кое-что сожрет.
А идея игры под это есть? Или чисто баловство?
0
Хочу сделать пошаговую тактику.
Как УФО или что-то подобное.
+1
Почему-то когда флешку посмотрел — то сразу подумалось о пошаговой стратегии :)
Кстати внешне чем-то напоминает старую добрую игру Incubation (тоже пошаговая стратегия).
0
Лет 10 назад сутками в нее рубился.

Да, в принципе, на нее и буду ориентироваться.
Мне там не все нравится, но основа очень хороша.
0
да, тоже сразу про Incubation вспомнил. хорошая была игра
0
Импорт моделей есть? Или все ручками?
0
Пока только obj, потому что его легко парсить :)
Перестанет хватать — приделаю 3ds или колладу.
0
супер! на моем уже далеко не новом Extensa 7630 стабильно держится около 60 fps. присоединяюсь к респектам за такую работу.

вижу haxe в тегах. не могу не испросить подробностей о его использовании в этом деле.
+1
Вот, кстати, haxe и его flash.memory.* не оправдали моих ожиданий.
Я расчитывал, что будет как минимум двукратный прирост производительности, но на практике прирост составил 10-15 процентов, по сравнению с обычными векторами.

Использование простое — написано несколько функций (отрисовка треугольников, парсинг ребер и отрисовка для статики, переброска из flash.memory в битмапку). Все это завернуто в swc, которая вызывается из as3.

Изначально функции написаны на as3, а потом один в один переписаны на хаксе. Причина — у меня не работает отладка во флэшдевелопе, поэтому ошибиться можно только один раз, как сапер :)

Когда доведу до ума, перепишу остальное на хаксе, хотя большого ускорения это не принесет.
0
спасибо! интересно.
не совсем правда понял влияние неработающей отладки в FD на переписывание кода в haXe, но это уже мелочи.) из-за быстрой компиляции и поддержки выявления типов?
0
Я привык к отладке во флэшбилдере.

Если что-то не работает (особенно какой-нибудь редкий «плавающий» баг, например, исчезновение треугольников при редких обстоятельствах), всегда можно воткнуть брейкпоинт и построчно прошагать функцию.

С хаксом и флэшдевелопом я такой возможности лишен, к сожалению. Отладчик просто не всплывает на бряках.

В связи с этим отлов багов сильно замедляется.

Разумеется, можно повтыкать трейсы и тому подобное, но хороший отладчик гораздо лучше.
Поэтому сначала все пишется и отлаживается во флэшбилдере на as3, а уже потом переписывается на haxe.
0
А консольный отладчик работает? Который fdb.exe.
0
Даже не знал о таком.
Погуглю.
0
Входит в Flex SDK
livedocs.adobe.com/flex/3/html/debugging_01.html
0
И тоже самое для flex4: help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7ffb.html
0
Афигеваю…
0
300 полигонов статики без движухи ничего не доказывают. Не не — я не негатив несу (и не говорю что ты не крут — крут). Я по личному опыту. Добавь туда пазфайндинг, перемещения, коллизии, анимации и те вещи что ты хотел оставить на сладкое. И если после этих действий будет больше 15 фпс — ты просто мега супер и я первый побегу закидывать тебя респектами. Хотя и так круто, особенно круто что все плавно — не поделишься секретом ЧТО, ГДЕ и КОГДА обновляет твою картинку? У меня например тупая рисовка в битмап умудряется периодически проваливться в фпс-ах (именно периодически).

П.С.: Лирическое: имхо проще писать свой экспортер в максе чем париться над obj/3ds. К томуж когда появится анимация / разные маты и пр., нужно будет это всё куда то девать. Это я не умничаю, а по личному опыту.
0
Тут речь именно о ручном рендере. Поиск пути и колизии это немного не та степь.
До выхода нового плеера скорее чуда не случится, а вот после будет и фпс и ресурсы на все остальные плюшки.
0
Это как это не та степь товарищ?!!! То есть если цпу загружен на 20% поиском путей и еще на 20% 3д коллизиями и еще на 20% скелетной (да даже не скелетной) анимацией это не влияет на своевременный вывод картинки???))) Я именно об этом. Мы же пытаемся игры вроде делать, нет? К тому же Ryzed ясно дал понять что собирается отрисовывать стратегию используя этот рендерер. Но в принципе пошаговая стратежка это минимум динамики, так что надеюсь всё будет здорово. Жду следующей технодемки!
0
Все правильно говоришь, только ты говоришь о игровом движке или игре рендер+физика+AI+…, а не отдельно о рендере.
Рендер — часть независимая, и в данный момент самая критическая во флеше.
То что все остальное потребует достаточно ресурсов само собой понятно, и что эти ресурсы в данный момент общие (проц/память). Но суть темы именно о рендере, о его возможностях и перспективах.
Как и говорил Ryzed — будет молехилл, будет круто. С выходом нового плеера практически вся нагрузка рендера пойдет на GPU, проц будет разгружен для всего остального.
0
«просто хочется сделать трехмерную игрушку, а ждать полгода-год до выхода молехила утомительно» © Ryzed

Так что суть темы я верно уловил. Человек хочет игрушку, а не треугольники. Просто треугольники это фишка этой игрушки. Но вопрос в другом — может ли летать вся конструкция, а не только пропеллер? Это лично мой вопрос. Так что я не понимаю что ты от меня хочешь FlashRush))) Мне интересно узнать оправдает ли себя этот рендерер в связке с остальными частями.
0
ничего не хочу :) Я тебя понял.
0
Для пошаговой стратежки много добавлять/менять не придется.

1. Уровни будут маленькие (32*32 максимум), так что pathfinding можно просчитать заранее.
2. Перемещения проблем не создадут, все пересчитывается и перерисовывается заново каждый кадр.
3. Коллизий не будет, там нечему пересекаться.
4. Анимацию сейчас ковыряю. Будет аналог md2 (покадровая с морфингом). Или вообще, просто покадровая, без расчетов. Тупо куча копий геометрии.

В принципе, там есть еще «внутренние резервы» в отрисовке, на которых можно сэкономить 10-20% процентов времени, но это на черный день, когда совсем уже будет тормозить :)

Не понял вопрос про отрисовку.
Пишем значения в большой Vector., лочим битмап, копируем вектор в битмап (setVector), анлочим битмап. Все, никаких секретов.
Если проседает периодически — значит где-то периодически создаются объекты и включается сборка мусора. Это плохо, никаких new в главном цикле делать не стоит.

Экспортер для анимации сделал свой, да.

Я неделю проболел, так что новый пост будет через несколько дней.
0
Ну вот! Всё встаёт на места. Значит будет жить! Дарить радость)) Вобщем все ждём что получится, затаив дыхание. Так что не болей!)) (md2 тема)

Про отрисовку — вектор это классно я еще не пробовал (пока что тупо copyPixel на CS3 через слоистый рендер). Создаются объекты — нет не создаются. Никакой динамики, кроме предусмотренной (когда реально надо добавить объект в сцену) нет. Но и вобщем даже без добавлений периодически провисает. Я уже начинаю подозревать Array переборщик объектов сцены в этом злодеянии. Вектор знач.шустрее но надо переходить на новый иде. Либо на связанные списки. Вообще я когда начинал писать движок знал намного меньше о флеше (перекладывал с си). Есть смысл написать его заново.

Ну и кстати такой вопрос — сколько у тебя объектов флеша на сцене флеша? Один битмап? Сама сцена это mc или sprite? Какое флеш событие используется под апдейт (и соответственно отрисовку. или на отрисовку другое?) твоего рендерера/движка? Как ты избавлялся от флешевых кадров в секунду? Или не избавлялся? Вот такие вопросы думаю не только меня заинтересуют.
0
Гм, как-то сложно у тебя все.
Сделай тестовую демку, выложи где-нибудь и куски кода тоже, в которых сомневаешься.

1. Сцена это Sprite.
2. Один основной битмап. Для UI/мелочи будут использоваться маленькие спрайтики сверху. Или не будет. Как получится.
3. Апдейт и отрисовка в ENTER_FRAME.
4. Не избавлялся. 60 fps поставил, сколько получается — столько получается. Анимация будет завязана на время, а не на кадры.
0
У меня сложно??)) У меня обычный слоистый 2д рендерер. Ссылки на рендерябли хранятся в кеш массиве слоев. В итоге в процессе рендера рендерер шуршит по слоям вызывая методы отрисовки рендераблей (рендер в битмапу преимущественно через копирование, но есть и draw). Т.е. по идее аналог сценграфа флеша. Апдейт и отрисовка в ENTER_FRAME. Фпс тоже ручками на 30 выставлен. Больше не тянет когда начинается собственно игра (а там много динамики). А вот на счет Sprite и единственного Bitmap — это надо опробовать. Ну и плюс перейти на векторы. Даст бог увеличу производительность вдвое :D
0
Йес я нашёл слабое место! Не скажу где — боюсь тухлых помидоров (процесс выяснения рендераблей на этапе куллинга оказывается не использует кеш...). :D Теперь туда еще приплюсовать вектора и будет совсем замечательно.
0
Неправда. Не в том была проблема. Написал в чем на свём блоге. Сильно ногами не бейте))))
0
Автор будь так любезен проапдейтить демку? Ссылка не валтидна сейчас.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.