Может кто-нибудь описать алгоритм, используемый движком Кена Сильвермана Voxlap? - PullRequest
5 голосов
/ 25 сентября 2010

Из того, что я собрал, он использовал редкие воксельные октреи и лучевое вещание. Не похоже, что он использовал opengl или direct3d, и когда я смотрю на игру Voxelstein, выясняется, что миниатюрные кубы на самом деле нарисованы, а не просто кучка 2d квадрата. Что застало меня врасплох, я не уверен, как он это делает без opengl или direct3d.

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

Мне интересно, как он выполнял рендеринг, отбраковку, окклюзию и освещение. Любая помощь приветствуется.

Ответы [ 2 ]

7 голосов
/ 27 октября 2010

Алгоритм ближе к приведению лучей, чем к трассировке лучей.Вы можете получить объяснение от самого Кена Сильвермана здесь:

https://web.archive.org/web/20120321063223/http://www.jonof.id.au/forum/index.php?topic=30.0

Вкратце: в сетке сохраните список поверхностных вокселей для каждого стека вокселей x, y (еслиz означает «вверх»).Предполагая 4 степени свободы, наведите лучи на каждую вертикальную линию на экране и сохраните список видимых участков, которые обрезаются при рисовании каждого куба.Для 6 степеней свободы сделайте что-то подобное, но с линиями сканирования, которые наклонены в пространстве экрана.

5 голосов
/ 25 сентября 2010

Я не смотрел на сам алгоритм, просто на скриншотах:

кажется, что миниатюрные кубы на самом деле рисуются вместо просто сгустка 2d квадрата

Да, так работает трассировка лучей.Он не рисует 2D-квадраты, он отслеживает лучи.Если вы проведете свои лучи по множеству миниатюрных кубиков, вы увидите множество миниатюрных кубиков.Сцена представлена ​​множеством миниатюрных кубиков (вокселей), поэтому вы видите их, когда смотрите ближе.Было бы неплохо как-то сгладить данные (отследить от сглаженной энергетической функции), чтобы они выглядели более сглаженными.

Мне интересно, как он выполнял рендеринг

по трассировке лучей

выбраковка

нет необходимости отбраковки при трассировке лучей

окклюзия

окклюзия вокселей обрабатывается естественным путем путем трассировки лучей.Если он рисует спрайты, он может использовать Z-буфер, сгенерированный трассировщиком лучей.

и освещение

Можно приблизиться к локальной норме, посмотрев на соседние ячейкии смотреть, какие заняты, а какие нет.Затем выполняется расчет освещения.

Любая помощь приветствуется.

Спасибо.

...