Как сделать воксельную игру

Добавил пользователь Евгений Кузнецов
Обновлено: 19.09.2024

Я надеюсь никому ненадо обьяснять что написано в заголовке.

Задался я целью сделать движок. Не долго думаю решил взяться за воксели. С построением даже больших сцен проблем небыло. А вот с визуализацийе сами понимаете =) Тормозило жутко. Для прорисовки небольшого кубика (вид изнутри) на экране 800на600 требовалось пол минуты =)

Пошарив в интернете и просмотрев несколько статей, придумал способ сортировки прозрачного пространства.
Но даже с ним, когда пустое пространство вообще не общитывается, удалось добиться нормального фпс (до 30) только в текстовом разрешении 60 на 100 =) Этакая матрица. =)

Красиво конечно, но хочется большего.

А теперь собсно суть вопроса:
Видел ли кто-нибудь нормальный воксельный движок. Желательно конечно в открытом виде, но можно и в закрытом. Очень хочу посмотреть, как авторы добивались нормальной скорости.

Или какую нибудь толковую документацию на эту тему. На русском. Ато долго шарил в нэте но толкогого нашёл мало и по большей части на английском.

Очень надо. Заранее спасибо.

XfaNT
А в чем собсна фишка такого движка?

Когда-то я рылся в воксельном движке, на котором сделан froogz. Насколько я помню, конкретно этот движок интересен тем, что для отрисовки вокселей он предварительно пропускает их через алгоритм marching cubes, на выходе - полигональная сцена. Если где-то меняются воксели - по новой пропускать через тот алгоритм. Но, разумеется, и вид уже становится не совсем воксельный. Есть там и "софтварный" рендер - чисто воксельный движок без полигонизации.

Воксельный движок при правильном к нему подходе = рейтрейст движок и я лично не понимаю какие это гениальные алгоритмы умудряются люди придумывать что трассировка не может продолжаться после первого пересечения с вокселем.

Vel I
Я знаю три преимущества вокселей на полигонами:
1 Очень точный просчёт теней и освещения за счёт трассировки лучей.
2 Прорисовка моделей не только с наружи, но ещё и внутри. Это даёт возможность очень реалистичного разрушения объектов.
3 Упрощенная физика. Т.к. объём каждого тела исчисляется в вокселях то можно легко рассчитать его массу. А засчёт прямого наполнения пространства гораздо просче просчитываются пересечения объектов.

Black Phoenix и tmtlib спасибо, но есть ли что нибудь на русском ? Ато в английском я не особо и разбираться буду с этим долго.

>1 Очень точный просчёт теней и освещения за счёт трассировки лучей.
>2 Прорисовка моделей не только с наружи, но ещё и внутри. Это даёт возможность очень реалистичного разрушения >объектов.
>3 Упрощенная физика. Т.к. объём каждого тела исчисляется в вокселях то можно легко рассчитать его массу. А засчёт >прямого наполнения пространства гораздо просче просчитываются пересечения объектов.
А что насчёт скорости и объёма памяти?
>спасибо, но есть ли что нибудь на русском
это врятли..

>А что насчёт скорости и объёма памяти?
Гыы, моя демка на эту тему.

rc | Воксельный движок и трассировка лучей.

Тени реалтайм, но такой фпс только засчет рендеринга 10% лучей в кадре. И я думаю ещё без ассемблера можно оптимизировать до +5 fps где-то.

Процесс загрузки можно смотреть в диспетчере задач(до 115 метров)

Исходники от чего либо не выкладываю до тех пор пока тоже самое гденить не увижу, всмысле не исходники и не видео а программу. Realstorm не считается т.к. там не воксельный рейтрейс.

Забыл сказать.
Почему не выкладываю. Из чисто спортивных интересов, особенно это ко всяким корифеям 3D графики относится. Кстати, между прочим, Кармак, как-то грозился создать суперкрутой воксельный движок))

И управление.
awsd

Помнится мне одна демка(подводная), котороая работала очень шустро (Voxel Caves чтоли), и причём не использовала ни OGL, ни DX. А картинка очень хорошая была.

У мну тоже без DX, а OGL только для вывода 2D точек используется. Проблема в том, что воксельные движки используют не совсем трассировку, а какие то хитрости которые позволяют им быстро работать за счет ликвидации, возможности рендеринга теней и отражений.

С другой стороны воксельные движки должны позволять тени и пр. рендерить, т.к. скорей всего они просто используют сильно заоптимизированный райкастинг как в вольфе, только не 2d а 3d(тоесть скорее уже рейтрейсинг).. странно)

SunnyDay
Скорость и объём памяти пока что проблема. Но я думаю ненадолго. Для персональных компов делают уже 4 ядерные процы и 4гиговую память на 6 слотов итого уже не мало =) А года через 2-3 такие компы будут у всех уважающих себя геймеров =)

Hokkum
В фрогз и даже в вокслаб 5 видна очень хорошо такая вещь, что вокселы там не используются для рендеринга. В фрогз вокселы преобразуются в полигоны а в вокслаб я вообще незнаю что с ними делают =) Но нормальные вокселы никогда не рендеряться ровными кубиками со сторонами, освещёнными поразному =)
Отсюда вывод что ресурсоёмкие технологии, включая рейтрейс, они не используют. Потому и теней с отражениями у них нету.

Кстати сам то ты что использовал в своей демке ?

XfaNT
в Tiberium Sun воксельный дыижек. скачай посмотри. там ваще тормозов очень мало.

паравоз
тибериан сан это не то, это же 2Д. Как понял там спрайты кладуться на карту высот и всё.

Слово воксель - voxel - образовано от слова VOlume и аббревиатуры piXEL (pixel, расшифровывается как PICture'S ELement, элемент картины). То есть, переводится как "элемент объемного изображения" или "элемент объема изображения".. Обычно это шар или куб.

Не стоит приписывать пикселу и вокселю равносторонность. Это удобно, не более того. Иногда даже удобнее считать воксель неким параллепипедом - например, в карте высот.

Обо всем - Что есть Воксель

Что есть Воксель

Как работают воксельные движки

Воксели – точки в виртуальном трехмерном мире, эдакие маленький кубики, из которых можно построить любую фигуру. Использование вокселей дает нам возможность сохранить трехмерную фигуру любой сложности. Поэтому воксельные движки в компьютерных играх чаще всего применяются для генерации земного ландшафта, всех его бугорков и неровностей. Идеальный пример - серия вертолетных симуляторов Comanche от фирмы Novalogic. Впрочем, воксельной движок можно использовать и для других целей (в Blade Runner все трехмерные модели персонажей состоят из вокселей).

Давайте попытаемся разобраться, как именно воксельный движок создает трехмерный ландшафт. Вначале берется плоская картинка (как будто мы сфотографировали кусок земли сверху) и так называемая "карта высот" (heightmap) - массив данных, в котором хранятся значения высоты для каждого пикселя нашей картинки. Теперь движок в состоянии превратить плоский пиксель в трехмерный воксель. При этом - чем точнее будет наша карта высот, тем реалистичнее будет наш трехмерный ландшафт. И наоборот, если взятая карта высот будет слишком неточной (скажем, сможет хранить лишь десять различных отсчетов по оси Z), то финальная картинка получится весьма угловатой (так называемый эффект лесенки).

Окружающий нас мир изобилует мельчайшими деталями. Поэтому в воксельных движках используются специальные технологии, улучшающие качество heightmap низкого разрешения. Два наиболее распространенных способа основаны на диаметрально противоположных алгоритмах: первый добавляет множество новых отсчетов в карту высот, используя псевдослучайные карты смещения (displacement maps), второй сглаживает угловатости, получая новые значения по оси Z путем интерполяции между существующими.

К этому моменту наш движок вполне может построить трехмерный скелет кусочка земли. Осталось лишь найти цветовую карту (color map) и покрасить верхний слой вокселей всеми цветами радуги. Для этого потребуется обыкновенная плоская текстура. Теперь, если ставить кубики-воксели друг на друга и присваивать самому верхнему определенный цвет, рано или поздно можно добиться желаемого результата. Впрочем, результат мы получим скорее поздно, нежели рано, ибо движок наш выполняет слишком много ненужной работы. Человечество еще не научилось видеть сквозь предметы, поэтому глаза наши фиксируют только верхний слой кубиков и даже не задумываются о том, что под всем этим кроется груда вокселей, каждый из которых рендерил наш трудолюбивый движок. Чтобы избавить его от лишней работы, конечный рендеринг использует технологию трассировки лучей. Несмотря на громоздкое название, ничего сложного в ней нет.

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

Движок наш с офтальмологами не знаком, поэтому считает, что человеческий глаз работает именно так, как описано в предыдущем абзаце. И поэтому рендеринг финальной картинки методом трассировки лучей происходит следующим образом: нашли самую нижнюю координату в карте высот, выпустили туда луч, натолкнулись на какое-нибудь препятствие, считали значение в карте цветов, покрасили пиксель и поднялись на один пиксель повыше. Снова пустили луч, натолкнулись на что-то твердое и т. п. Интересно, что и на этом этапе можно немножко ускорить работу движка, слегка изменив алгоритм. Предположим, пущенный луч уперся в стенку красного кубика, причем в самый низ. Следующий по счету пиксель сверху тоже будет красным, и что самое важное - будет иметь те же координаты по осям X и Y. Зачем же, спрашивается, пускать еще один луч от самого "глаза", если можно сначала подняться наверх и посмотреть, что там такое. Если стенка, то сразу ее покрасить, и снова наверх - до тех пор, пока на свежий воздух не выберемся, сиречь ничего не найдем. Вот тогда и новый луч выпустим. Недостатков у такого подхода никаких - сплошная экономия времени.

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

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

Может быть если бы тогда все получилось иначе, сейчас бы мы играли в полностью воксельные игрушки и интересовались поддержкой полигонов.

Обо всем - Что есть Воксель

Что есть Воксель

Сейчас на рынке представлено совсем немного игр с воксельной графикой: как пример C&c Tiberian Sun (на скрине сверху), Периметр от Российских разработчиков, но чаще воксели используют в авиасимуляторах. Однако уже существуют игры, сочетающие в себе как полигональную, так и воксельную графику (первыми такое проделали создатели Zar). И результат получается прямо-таки великолепный: красивые детализированные ландшафты и аккуратненькие модели с цветным освещением.

Так что будущее, как мне кажется, именно за таким вот симбиозом. Но это зависит от крупных магнатов, производителей "железа". Многие считают технологию тупиковой и устаревшей.

Добавление №1 Взято с википедии

Новый Воксельный движок (Острожно! Много умного текста)

id Tech 6 — игровой движок серии id Tech, который в настоящее время разрабатывается американской компанией id Software и который должен стать преемником id Tech 5. id Tech 6 позиционируется как движок для ПК и, возможно, для игровых консолей следующего поколения, т.е. для будущих наследников PlayStation 3 и Xbox 360. На данный момент не анонсирована ни одна игра на id Tech 6, сам движок находится на начальной стадии разработки. Однако уже известно о некоторых характеристиках и инновационных особенностях движка. Основными разработчиками движка являются Джон Кармак (англ. John Carmack) и Йон Олик (англ. Jon Olick).

Описание

Геометрические объекты, полученные благодаря SVO, теоретически могут иметь неограниченное число уровней детализации, более того, данные уровни детализации генерируются автоматически. Это устраняет потребность в использовании разных псевдотрёхмерных методик типа параллакс-маппинга. Тем не менее, все тесты с использованием SVO нуждаются в большом количестве памяти (вплоть до нескольких гигабайт). Йон Олик заявил, что является возможным сжатие такого SVO до уровня 1,15 битов на один воксел.

Кроме SVO, id Tech 6 будет использовать более продвинутую технологию мегатекстуры, которая впервые использовалась ещё в id Tech 4. При помощи данной технологии вся поверхность уровня покрывается одной текстурой.

Разработчики id Tech 6 и SVO ориентируются не на текущее аппаратное обеспечение, а на аппаратное обеспечение, которое на момент начала разработки ещё не доступно. В частности, id Tech 6 ориентируется на CUDA, Intel Larrabee и AMD Fusion. Также Кармак заявил, что если игровые консоли следующего поколения (наследники Xbox 360 и PlayStation 3) будут иметь такие аппаратные спецификации, которые будут удовлетворять архитектуре движка, то, возможно, id Tech 6 будет работать и на этих консолях.


Рейтинг:

Создание островов - Учебное пособие по воксельному снайперу

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

Я видел воксельную игру с естественным ландшафтом. Под этим я подразумеваю не блочный. В игре есть 4 * 4 * 4 блока на кубический метр, а такие блоки, как земля, песок и камень, имеют округлые края и как бы сливаются друг с другом (как в обычных играх). Вот скриншот


Как этого добиться?

Это достигается за счет интерполяции пандусов между кубами разной высоты.

Когда у тебя такой пейзаж (вид сбоку)

вы бы добавили многоугольники, чтобы он выглядел так:

Алгоритм для расчета этих рамп - алгоритм марширующих кубов.

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

Есть два препятствия, с которыми вам нужно столкнуться, чтобы достичь такого же качества, как на изображении, первое - художественное, а второе - техническое (память, обработка). Во-первых, я предполагаю, что вы уже решили свою художественную задачу, вы можете создавать модели, арт, шейдеры и т. Д. (Частично потому, что я не могу ответить на задачи с искусством)

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

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

Подробнее о SVO в этой статье

Вот видео, в котором объясняется рендеринг на основе полигонов и SVO (плюсы и минусы).

GoHa.Ru II Степени
Просветитель Награжден за: За публикацию на форуме интересной информации по Mabinogi

Воксели = либо все квадратное, либо все замыленно-сглаженное, либо 6-12гб оперативки в минимальных требованиях, либо карты размером 5 на 5 метров с обязательной подгрузкой.
//переиграла в outcast

GoHa.Ru II Степени
Просветитель Награжден за: За публикацию на форуме интересной информации по Mabinogi

Хм. По первым впечатлениям - там реализовали что-то на подобии механизма в crytech3 - из вокселей состоят невидимые части рельефа, а рендеринг полигональный.

GoHa.Ru II Степени
Просветитель Награжден за: За публикацию на форуме интересной информации по Mabinogi

GoHa.Ru - 10 лет

Признанный автор Награжден за: Журналист


GoHa.Ru I Степени

В бородатом Magic Carpet можно было адский терраморфинг воротить, и никто про майнкрафты не орал.
Но вообще здорово конечно. Хочется только чтобы с ним игры делали, а не сендбоксы.

speak no evil, see no evil, hear no evil

Медаль
GoHa.Ru - 10 лет

Леди


воксели убьют 3D

наконец-то будущее настало.

Зомби мутанта
GoHa.Ru - Старожил

Крафтер
Знатоку игры Albion Online Награжден за: За участие в конкурсе по игре Albion Online

Медаль
Победитель турнира Награжден за: Победитель турнира
Победитель конкурса Награжден за: Победу в мини конкрусе на лучший скриншот по Fallout 3
Просветитель Награжден за: за развитие раздела DarkFall

Признанный автор Награжден за: За создание полезных тем и описаний посвященных вселенной Warhammer
GoHa.Ru - 10 лет
Крафтер

Аватар для Dansilent

Лекарь
Победитель конкурса Награжден за: За победу в конкурсе Демотивируй Дракона

Эмм.. новые возможности PhysX, разрушение объектов в реальном времени, а не по кусочкам запланированным. Мне кажется это будет по веселей

GoHa.Ru I Степени

Эмм.. новые возможности PhysX, разрушение объектов в реальном времени, а не по кусочкам запланированным. Мне кажется это будет по веселей

Судя по тем видео что я нашел, это все покрывает только хаотическое однородное разрушение.
Пока это колонна из фарфора или кусок навоза как в другом видео, которые могут либо разбиться либо нет - все смотрится клево, конечно. Что потом с этим шлаком от колонн делать? Если грузовик влетит в резиновую ограду, это всё тоже рассыплется на осколки? Я просто к тому, что physx немного не для тех целей движок своей делает.

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

Читайте также: