Войти
ПрограммированиеФорумГрафика

Воксельные миры

Страницы: 1 2 3 4 5 6 Следующая »
#0
(Правка: 6:32) 6:23, 10 июня 2020

История вопроса

В дословном переводе воксель - это элемент (а именно ячейка) объемного изображения. Можно представить себе, что весь игровой мир разделен на крошечные кубические элементы, которые настолько малы, что при отображении на экране один такой элемент превратиться в один пиксель. Наивный подход заключается в том, чтобы хранить воксельный мир в огромном 3д-массиве и отображать его на экране определяя куда проецируется каждый воксел. Такая модель занимает очень много памяти, а отрисовка очень медленно работает.

Первые известные мне воксельные игры делали одно из двух:

1. задавали крошечные модели 3д-массивами.

Изображение Изображение

2. задавали модель как 2д карту высот, трассировали по ландшафту лучи и рисовали вместо вокселов крупные квадраты.

Изображение

Для подхода 2 придумали очень быстрые способы отрисовки для случаев, когда камера смотрит ровно вдоль одной из осей координат, например Wave Surfing. [https://github.com/s-macke/VoxelSpace]

Изображение

Позже добавилось еще пара подходов:

3. хранить мир как 2д-массив указателей на Run-Length Encoded (RLE) столбцы, рисовать несколько видов из сонаправленных с осями координат камер, накладывать результаты на куб как текстуру и рисовать этот куб (вид изнутри) на экране. Voxlap by Ken Silverman [http://advsys.net/ken/voxlap.htm]

Изображение Изображение

4. хранить мир в виде Sparse Voxel Octree (SVO), трассировать по нему лучи в 3д. Для SVO известно множество оптимизаций, например RLE-сжатие небольших групп листьев дерева, использование Perfect Hashing для создания деревьев без явных указателей.

Изображение

Большой интерес вызывают Atomontage Engine и Unlimited Detail.

Изображение

Atomontage использует GPU и в цеолм выглядит как добротная реализация игрового движка работающего с Octree.
Изображение

Unlimited detail настолько удачно всех заинтриговал, что я просто не могу не привести патенты Euclideon, которые описывают использование SVO для отрисовки, передачу SVO по сети и переход от перспективной к ортогональной проекции для оптимизации отрисовки далеких объектов:

Патент 1
Патент 2
Патент 3


#1
(Правка: 6:29) 6:28, 10 июня 2020

Вий
> хранить мир как 2д-массив указателей на Run-Length Encoded (RLE) столбцы,
> рисовать несколько видов из сонаправленных с осями координат камер, накладывать
> результаты на куб как текстуру и рисовать этот куб (вид изнутри) на экране.
> Voxlap by Ken Silverman [http://advsys.net/ken/voxlap.htm]
жесть, я не думал, что это может быть так тупо и гениально одновременно

Вий
> https://www.lens.org/images/patent/AU/2012390266/A1/20150507/AU\_2012\_390266\_A1.pdf
> https://www.lens.org/images/patent/WO/2014094047/A1/WO\_2014\_094047\_A1.pdf
> https://www.lens.org/images/patent/US/9842425/B2/US\_9842425\_B2.pdf
ни одна из ссылок не открывается

реквестирую более подробный разбор алгоритмов Вангеров, UD и твоих кроликов.

#2
6:31, 10 июня 2020

Поправил ссылки

#3
6:36, 10 июня 2020

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

#4
8:20, 10 июня 2020

Патенты то совсем свежие, 2014 и 2017 года. Неужели оно в самом деле новое? Воксельные технологии активно развивались в середине 90х еще. Если что-то тогда было опробовано, запатентовано сейчас оно быть уже не может.

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

#5
8:24, 10 июня 2020

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

#6
8:45, 10 июня 2020

А основного способа то и не представлено тут.

#7
8:55, 10 июня 2020

Вий
> хранить мир как 2д-массив указателей на Run-Length Encoded (RLE) столбцы,
> рисовать несколько видов из сонаправленных с осями координат камер, накладывать
> результаты на куб как текстуру и рисовать этот куб (вид изнутри) на экране.
> Voxlap by Ken Silverman [http://advsys.net/ken/voxlap.htm]
всё-таки как именно он растеризует переспективную камеру, направленную по осям координат? я могу легко представить, как рендерится ортогональная камера, но как быть с перспективной?

#8
9:44, 10 июня 2020

В voxlap вроде 6 камер создают куб, который потом и отрисовывается. Где-то тут было обсуждение как там оно работает.

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

Atomontage выглядит более современно, но он досихпор в разработке.

Я пока жду выхода Teardown, видео выглядят эпично.

#9
9:46, 10 июня 2020

Непонятно вот еще что. Камера то все время движется, как правило. Мы описание мира будем под нее перестраивать на каждом кадре, если все относительно нее описывается?

#10
(Правка: 10:16) 10:15, 10 июня 2020

Zab
12 полигонов куба нужно каждый кадр правильно текстурировать и поворачивать внутри них камеру 7. Текстуры кубов строятся примерно как показано в анимации выше. Там же ясно что можно разместить камеры 1-6 в любой точке и построить для них изображения, лишь бы камеры были направлены вдоль осей координат.

#11
14:59, 10 июня 2020

Suslik
> реквестирую более подробный разбор алгоритмов Вангеров, UD и твоих кроликов.
Начнем с Вангеров

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

Изображение

Карта высот влияет на движение машинок, которые в игре полигональные. Машинки оставляют на ландшафте следы, дыры, воронки от взрывов. Экономия на ландшафте позволила сделать очень детальные для тех времен модельки машинок, количество полигонов там "измеряется несколькими тысячами, при этом, самих плоскостей на самом деле не видно из-за небольших размеров объектов, выглядящих из-за этого очень качественно - видимость мелких деталей (вплоть до поворачивающихся колес), динамическое освещение, тени придают игровым объектам очень высокую степень реализма."

Изображение
#12
(Правка: 16:09) 16:00, 10 июня 2020

Suslik
> всё-таки как именно он растеризует переспективную камеру, направленную по осям
> координат? я могу легко представить, как рендерится ортогональная камера, но
> как быть с перспективной?
Voxlap

Давай рассмотрим камеру, смотрящую на Север вдоль оси Z. Для определенности пусть ось X будет направлена направо а ось Y наверх. FOV 90 градусов. Уровень задан как 2д-карта указателей на колонки в осях X-Z. Запускаем рейкастинг по этой карте, разжимая RLE в колонках сразу на экран.

Изображение

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

Теперь рассмотрим камеру, смотрящую вверх вдоль оси Y. Пусть верх камеры смотрит вдоль оси Z для определенности. Тут можно рассмотреть сначала одну колонку по центру камеры, причем интересует нас только такой уровень Y на котором и находится камера. Если в этом месте будет воксел, то вся камера окажется внутри него. Дальше можно перейти к следующему слою вокселов, состоящему из 9 соседних вокселов на уровне Y+1. Сначала пройдем по ряду вокселов Z-1, потом по ряду Z и потом по Z+1, рисуя цветные полоски, соединяющие прошлый ряд с текущим. При этом вообще никаких вычислений свяазнных с перспективной проекцией не возникает, мы постепенно идем от слоя к слою вдоль колонок вокселов.

Примерно как тут показано, только в обратном порядке, от камеры вдаль.
Изображение

#13
(Правка: 16:21) 16:19, 10 июня 2020

https://www.youtube.com/watch?v=hPR-iSnaCuc
SNES Voxel Landscape Demo (Super FX)
snes 16bit = технология вокселей
https://ru.wikipedia.org/wiki/Comanche_(серия_игр)
собственный движок компании, Voxel Space, полностью написанный на ассемблере.
Zab
> Патенты то совсем свежие,
встречалась книга название примерно programming voxels(как программировать воксели) 1986.

#14
(Правка: 17:18) 17:13, 10 июня 2020

Вий
> Примерно как тут показано, только в обратном порядке, от камеры вдаль.
тут показано, как растеризуется карта высот, причём на ней колонки смотрят вверх относительно направления взгляда камеры. с ней всё понятно. а как осуществляется переход от карты высот к произвольному объёму, причём ты описываешь алгоритм, в котором колонки смотрят по направлению взгляда камеры, так?

Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумГрафика