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

Ускоряющая структура для эффективной трассировки линий (3 стр)

Страницы: 1 2 3 4 5 Следующая »
#30
12:35, 8 июля 2024

THE_MASTER
> на миллионах линий конкретно проседает фетчинг текстур.
Он в кэш помещается обычно, ну и можно формулой заменить тогда.

#31
12:54, 8 июля 2024

/A\, слушай, я так подумал, вообще заманчивое предложение отрендерить рёбра текстурой, но там возникает другая проблема - scale independent line thickness. Хмм... думаю можно попробовать без текстур и попробовать вот что:
1. вместе с каждым трианглом слать 3 флага для каждого ребра, мол игнор/не игнор.
2. по барицентрикам проверять дистанцию до каждого не игнорного ребра (максимум до трёх) и если дистанция меньше толщины - рисую линию.
3. тут же делаю поправку толщины в зависимости от масштаба.

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

Хмм...надо будет как-то погемороиться с генератором мешей, чтобы понять, какое ребро в игнор, а какое - нет...

#32
13:09, 8 июля 2024

THE_MASTER
> в итоге я получаю линии, но они правда не будут как бы выпирать в сторону за модель, а будут чётко на гранях
Добавь параллакс

#33
13:16, 8 июля 2024

/A\
> Добавь параллакс
хмм, да, как вариант.

#34
13:42, 8 июля 2024

/A\
Только не параллакс ... Тесселяция же

#35
15:06, 8 июля 2024

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

+ Артефакты
#36
(Правка: 20:31) 20:23, 8 июля 2024

Тестирую метод рендера линий "текстурами", точнее просто процедуркой, короче то, о чём говорили выше.

Как можно только лишь атрибутами вертексов обозначить линию (отрезок) как не рисуемую?
Изображение
Вот на этом рисунке отрезок V2 - V4 не должен рисоваться, т.к. он внутренний. Хмм.. как бы его вертексы пометить так, что бы в рендере его игнорить? Добавить флаг в V2 и в V4, хмм, но если подумать, то есть ещё другие смежные треугольники, не изображённые на рисунке и по факту, каждый вертекс скорее всего будет контачить и с внутренними линиями и с внешними...

UPD: пока вижу только один путь, уходить он индексов и рендерить все аля triangle list

#37
20:33, 8 июля 2024

THE_MASTER
У тебя индексы неправильные, должно быть 123, 234 и ребро 23 не рисуется в обоих треугольниках. Можно по индексам вершин отсекать.

Я бы использовал fragment barycentrics и получил бы градиент до ребра, записываешь его во 2й рендер таргет и постпроцессом рисуешь линию.

#38
20:55, 8 июля 2024

/A\
> У тебя индексы неправильные, должно быть 123, 234
да это не индексы, я просто обозначил 4 токи, индексы - да, такие как указал. Хмм...да, чёт я и не подумал, не обязательно же индекс буфер должен состоять только лишь из uint32_t.

/A\
> Я бы использовал fragment barycentrics и получил бы градиент до ребра
сейчас я сделал проверку дистанции от луча до отрезка (ребра), хмм... а как барицентрики то помогут, это же координаты до 3-х точек, то есть что бы сделал линию одинаковой толщины по всей длине, нужно смотреть дистанцию именно до ребра, а не до точек, т.к. иначе с барицентриками ты будешь получать как бы треугольную линию

#39
20:56, 8 июля 2024

/A\
> и постпроцессом находишь именно ребра.
В кадах обычно такое не катит, ибо нужно видеть ребра поверхностей. Типичный пример:

+ Показать

Но я не знаю что там пилит земастер

#40
20:57, 8 июля 2024

THE_MASTER
> Как можно только лишь атрибутами вертексов обозначить линию
Атрибуты вертекса не нужны. Вертекс - это тупо в коде шейдера:
static const float2 Quad[4] = {{-1, -1}, {-1, 1}, {1, -1}, {1, 1}}; и дальше выборка по SV_VertexID

#41
21:06, 8 июля 2024

MrShoor
> static const float2 Quad[4] = {{-1, -1}, {-1, 1}, {1, -1}, {1, 1}};
да, но сейчас же речь о RTX-линиях, то есть я в RTX трейсером нахожу треугольник и закрашиваю пиксель линии на границе (это и есть линия), то есть в RTX ты не генеришь квад, это в растеризаторе такое.

#42
21:15, 8 июля 2024

THE_MASTER
> то есть я в RTX трейсером нахожу треугольник и закрашиваю пиксель линии
А нафига тебе там треугольник? Нужен тупо семент из двух float3 точек, и функция расстояния от луча до сегмента

#43
(Правка: 21:24) 21:19, 8 июля 2024

MrShoor
> А нафига тебе там треугольник?
ты чё-то всё пропустил, мы тут рисуем рёбра без рёбер:) То есть сущности "ребро" вообще нет и рёбра мы красим как бы outline-ом, но не именно им (как в постпроцессе), а тупо подкрашиваем небольшие участки треугольника по краям, то есть трейсинг или растеризация именно линий вообще отсутствует, идёт RTX по обычному мешу и треугольник по краям закрашивается, очень экономный метод кстати.

#44
21:27, 8 июля 2024

THE_MASTER
Я про барицентрики при растеризации
https://docs.vulkan.org/samples/latest/samples/extensions/fragmen… c/README.html
Там можно толщину линий задать в пикселях в скринспейсе.

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