Воксели и ИИ
Я издревле интересуюсь ранними техниками программной имитации 3D: Mode7-подобные плоскости, масштабирование спрайтов, рейкастеры, векторы, и иные экзотические способы имитации трёхмерного пространства, которые использовались до того, как компьютеры научились бодро рисовать полигоны. Лет двадцать назад писал много чего подобного, сначала просто так, потом с прицелом на игры на тогдашних маломощных портативных устройствах типа КПК.
В том числе в середине 2000-х я игрался с воксельным ландшафтом на основе карты высот. Вы знаете, как в игре Comanche Maximum OverkillD, самый простой вариант, пускаем лучи от камеры к горизонту, выбираем высоты для каждой клетки и решаем, рисовать ли столбец. Всё очень просто, две текстуры (высоты и цвета), работает быстро. Подобные решения были реализованы в Z.A.R. на ПК и Amok на Sega Saturn, а также в десятке других игр.
Однако, оптимальный по скорости алгоритм проходит по клеткам как попало, иногда пропуская их, и рисует воксели в виде грубых мазков. Столбцы воксельной карты получаются неопределённой формы, всё странное и непонятное, нестабильное на вид. Я тогда экспериментировал с идей сделать псевдотрёмерный Pac-Man с лабиринтом, на который камера смотрит сверху вниз, и мне хотелось, чтобы грани лабиринта были чёткими, как в полигональных движках (полигональный с программным рендером и потом OpenGL я тоже делал). Тогда я смог добиться этого с помощью оверсэмплинга, что дало чёткие воксели-кубики, но работало слишком медленно, и хотя я понимал, как можно оптимизировать алгоритм, мне не хватило ума — я не дружу с математикой.
Но теперь у нас есть ИИ, и у него ума хватает! Ковырялся с движком NPNG, и вспомнил про эту тему. Я просто объяснил ИИ свои идеи: нужно идти по карте алгоритмом DDA, чтобы посещать каждое ребро каждой клетки, как в рейкастерах для Wolf 3D-подобных движков, и попросил его доработать код обычного воксельного ландшафта. Он это осилил. Результат был сомнительный: у чётких столбцов не было вершин, но после обсуждения проблемы нашлось решение и для этого. Сначала работало медленно, но удалось оптимизировать до скорости, близкой к обычному воксельному ландшафту.
Также с помощью ИИ удалось обойти ограничение простого кастера, который позволяет рендерить карту только с камерой, направленной вниз — стандартный алгоритм обрезает вершины всех холмов на линии горизонта. Это было не очень просто, пришлось изучить и исправить глюки, но всё получилось: чёткие воксели и камера, способная опускаться к самой земле. И это написал ИИ, я лишь объяснил, чего я хочу добиться, и каким образом, как мне кажется, это можно сделать.
Видео записано в 30 кадрах, на самом деле всё работает очень плавно. Тестовая карта взята из Comanche. Это просто тест, который я сделал в рамках движка EvgEngine, применения ему в игре пока не планируется. Но в движке давно есть и векторы, и полигоны, и прочие интересные псевдо-3D штуки, некоторые из которых нам точно пригодятся. Может и воксели куда-нибудь присунем.
разное
разработка
npngg
ии
псевдо3д