Вий
>У тебя есть идеи, как можно ускорить raytrace?
Как минимум можно попытаться пойти по пути voxlap и делать куб из 6 камер, но рендерить не лучами а столбиками лучей и хранить мир тоже столбиками.
samrrr
Есть исходники voxlap, можно просто взять и запустить.
Вот такой вопрос - а можно ли иметь в одной сцене несколько независимых воксельных секций, где каждая расположена по произвольной 3*4 матрице? Типа, чтобы в лесу одно и тоже воксельное дерево повторялось с разными поворотами и масштабами.
Вот Суслик предлагает бить сцену на блоки. А расположение блоков в октри - это обязательное условие? Или можно всё-таки, без значительных проблем в алгоритмах, располагать блоки произвольным образом в произвольной структуре - типа bsp или visleaf; а уже внутри блока хранить геометрию в виде 3д-текстуры.
Вий
Зазубрины на кубиках вблизи намекают на то, что там использован другой способ трейса лучей.
samrrr
На каких кубиках? Там где 1000 кубов вообще нет ни лучей ни трассировки, обычная растеризация
Вий
>На каких кубиках?
https://youtu.be/NgpahxDYms0?t=759
На обычнейших кубиках.
samrrr
Я написал выше как работает voxlap. Какой другой способ?
короче я пока в сомнениях. на самом деле видюха просто вытягивает 60 миллионов точек, если их в device local память затолкать, поэтому вся вот эта сцена нормально рендерится, даже если вообще никаких телодвижений по оптимизации не совершать:
Voxlap (и Unlimited Detail) уже прошлый век.
Вы видели Mutate (https://mutate.se/)?
https://www.reddit.com/r/VoxelGameDev/comments/groib0/modifying_b… ns_of_voxels/
https://www.reddit.com/r/VoxelGameDev/comments/gqk2id/voxel_engine/
https://imgur.com/eAVkXwC
https://imgur.com/xI2h0Rb
https://imgur.com/ywOqpNT
https://imgur.com/YBk9ljM
Не невидал, но выглядит эпично, а что там по пределам размера мира?
вот куда sony ssd нужен, а не для всякой фигни
PVSector
Интересно. Надо тоже попробовать вот по этой статье сделать
https://newq.net/dl/pub/ModifyingCompressedVoxels-main.pdf
Вий
https://gamedev.ru/code/forum/?id=252811&page=2&m=5199564#m23
> Для каждого рассматриваемого узла octree определяется его
> bounding box. Проверяется, попадают ли незакрашенные точки
> экрана в этот bounding box
И как это быстро проверить?
> можно взять SVO и отрисовать его при помощи 6 камер
> смотрящих вдоль осей, идя от камеры вдаль, а
> потом натянуть это на кубик как текстуру и вращать его
Можно так крутить твой "Ужас 3D", только для верхней и нижней граней другой рендер (идти от центра квадрата по диагоналям до границы, сдвигать по XY пропорционально текущей глубине)
Aslan
> И как это быстро проверить?
Экран делим на линии высотой 1 шириной 64 пиксела. Для такой линии используем 64 битное число как маску. 0 - не обработанный пиксель, 1 - закрашенный ранее. 64 таких линии соединяем в квадратик с аналогичной маской для линий. 0 - есть хоть один недокрашеный пиксель в линии, 0 - вся линия готова. И ещё раз 64 квадратика в линии, и в итоге получаем весь экран. Невидимую часть сразу помечаем как готовую.
Для bounding box строим маску на первом уровне, 0 если внутри бокса, 1 если снаружи. Делаем OR. Если остались 0 то для соответствующего элемента углубляемсся на 1 уровень. Так очень быстро проверяем.
Вий
HiZ или HiMask
можно брать 8х8