Войти
ПроектыФорумОцените

[Конкурс шутеров] Half-Assed (2 стр)

Страницы: 1 2
#15
10:01, 12 мар. 2021

0xc0de
> О, воксели.. Очень круто)
спасибо, у тебя тоже движок очень крутой.

Рендерферма кроликов
> > Название: пока не знаю
> > буду воровать ассеты
> Unnamed: Stolen assets
>
спасибо за название, но я не успеваю сделать игру.

> Есть тема про твой движок?
неа, он не был готов, да и времени нет.


#16
(Правка: 14:09) 13:30, 15 апр. 2021

Сейчас выбрал название для игры - Half-Assed - "недоделанная".

За последний месяц сделал:
- тупой и багнутый AI для NPC
- тупая и багнутая навигация для NPC
- враги разлетаются на "кровавые ошмётки" (gibs) при смерти
- враги могут наносить урон игроку
- индикатор урона игрока (красный экран) и звуки боли
- создание различных предметов, которые игрок может подбирать (аптечка, оружие и боеприпасы)
- из дула ракетницы теперь вылетает "живая" ракета
- ракета при взрыве наносит урон всему в радиусе 10 м (splash damage)
- спрайты для взрывов
- самый простой прицел
- разброс плазмагана при стрельбе зажимом
- градиентное небо
- простые меню при нажатии ESC и диалог смерти
- возможность проигрывать музыку в фоне
- загрузка, сохранение, отображение в окошке и применение настроек игры
- фикс всех найденных багов в воксельном движке и выключение неиспользуемых фич.

destruction-test-14-04-2021-10-56-08.mp4

Сейчас затык - никак не могу придумать цель игры (не говоря уже о сюжете).
Хотел вначале сделать волны врагов и "точку выхода", но если всё можно разрушить,
то непонятно, куда поставить "телепорт"/флаг.
Пока вяло пишу редактор расстановки NPC и подбираемых предметов на уровне.

#17
20:28, 20 апр. 2021

пол-задницы, сорри за офтоп

#18
22:33, 20 апр. 2021

да, там "игра" сделана на ползадницы, но зато релизнулся, не слил.
даже не факт, что эта поделка запустится (я на других компах не проверял).

(
half-assed - это 'недоделанный'
бестолковый; недостаточный; непродуманный; путаный;
работанный на скорую руку
сработанный наспех; сработанный топорно
https://slovar-vocab.com/english-russian/vocab-tiger/half-assed-4232772.html
)

#19
7:49, 21 апр. 2021

PVSector
Не спорю, это круто и достойно уважения
Кстати, как сделал воксели?

#20
12:40, 21 апр. 2021

Для создания сцены использовались бесплатные модели с турбосквида; за основу взял этот замок:
https://www.turbosquid.com/3d-models/3d-castle-dae-1374619

Модели можно помещать на сцену в редакторе, они конвертируются в воксели (методом бросания лучей, с сохранением инфы для Dual Contouring).

  map | [Конкурс шутеров] Half-Assed

Карта размером 250 игровых метров разбита на 16^3 кубических блоков, каждый разрешением 32^3 ячеек. Всё это выходит очень дёшево, в оперативной памяти карта занимает мало (несколько мегабайт с быстрым сжатием), но в проге есть лимит на 64 мб.

#21
13:11, 21 апр. 2021

PVSector
> они конвертируются в воксели (методом бросания лучей
Как это? Разве не надо проверять каждую грань на пересечение с узлами OctTree?
Как я понял  тебя двухуровневый OctTree и воксель 250/16/32 ~= 0.5 м
А как же тогда получились стены под углом?

#22
14:33, 21 апр. 2021

Рендерферма кроликов
> Как это? Разве не надо проверять каждую грань на пересечение с узлами OctTree?
> А как же тогда получились стены под углом?
не понял, что значит "проверять каждую грань на пересечение с узлами OctTree".

1) Чтобы поставить меш на сцену с заданным local-to-world трансформом вначале делаем копию меша, где к каждой вершине применён этот трансформ (трансформированный меш может даже выходить за пределы сцены, как большой замок).
  castle voxelization | [Конкурс шутеров] Half-Assed

2) Затем из трансформированного меша строим лучевое представление (Ray-Rep) (у этой структуры данных много названий: Triple Ray Representation, Layered Depth Cube (LDC), Layered Depth-Normal Images (LDNI), Tri-Dexel, Z-list, 'Stick Representation'), которое и будет использоваться для вокселизации:

набор лучей, пронизывающих модель вдоль трёх координатных направлений, на каждом луче хранятся отсортированные точки пересечения с поверхностью и нормали к поверхности в этих точках (реализации тоже разные, вместо точек пересечения могут храниться "сплошные" сегменты).
  Ray-Rep | [Конкурс шутеров] Half-Assed

тут видео с лучевым представлением:

+ Показать

Лучи в Ray-Rep проходят через центры вокселей.

4) Затем выполняется CSG-операция объединения Ray-Rep с чанками, которые он пересекает.

Для каждого чанка, который пересекается с Ray-Rep, определяются воксели, лежащие внутри модели, и находятся нормали к поверхности модели в точках её пересечения с рёбрами ячеек чанка.

Для отдельного луча из Ray-Rep можно очень просто определить, лежить ли центр вокселя внутри модели (подсчётом числа пересечений и учитывая нормали).
Если данный воксель определяется, как сплошной на 2 или 3 лучах, то считаем его сплошным.
Нормали к поверхности модели берутся из Ray-Rep.

5) Для изменившихся чанков перестраивается сетка. Алгоритм Dual Contouring использует нормали к поверхности для приблизительной реконструкции острых углов поверхности.

Рендерферма кроликов
> Как я понял тебя двухуровневый OctTree и воксель 250/16/32 ~= 0.5 м
Рендерферма кроликов

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

#23
15:39, 21 апр. 2021

PVSector
Ого! Спасибо за лекцию
А рендеришь как?

#24
16:16, 21 апр. 2021

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

Для рендеринга чанков используется пул из динамических VB/IB.

Каждая вершина весит 16 байт, но там многие данные не используются,
и вполне можно было сделать 8 байт (4 байта на позицию вершины, 3 байта на нормаль и 1 байт на материал; блендинга материалов нету).

Страницы: 1 2
ПроектыФорумОцените