romanshuvalov
> затем еще раз поверх всего фреймбуфера нарисовать полупрозрачный квад - проиводительность упадёт ниже приемлимого уровня.
> Не на телефоне, на VR-устройстве с Qualcomm Snapdragon XR2 и разрешением 1440х1560 в каждый глаз.
Да, я понял. Но всё равно странно. Как же, тами hud рисуют и частицы?
Der FlugSimulator
Частицы мелкие, на порядки меньше площади экрана. Hud обычно только в меню, тоже небольшой и даже не всегда полупрозрачный
romanshuvalov
> Частицы мелкие, на порядки меньше площади экрана.
Я видимо что-то не понимаю. Там что, растеризация софтовая?
По моему, пиксельный размер квада особо не имеет значения, а вот их количество - да.
В аликс фроксели используют. На vr-мобиле норм потянет
Воксели это кубики.
Фроксели это лягушатами ?
ronniko
Фр от слова fart, т.е. пердоксели
romanshuvalov
> Допустим, мы имеем плоскую стену (один квад)
"Плоский" ещё не обязательно значит "один квад", стена может быть тесселирована.
Battle Angel Alita
> В аликс фроксели используют. На vr-мобиле норм потянет
За один проход сделать невозможно. Ну и от второго метода не сильно отличается.
Мисс_Самец
> > https://ijdykeman.github.io/graphics/simple_fog_shader
> для мобилки очень мило
> еще варианты есть?
Вот, жду, может кто что предложит.
Я тут подумал - можно совместить первые два варианта: сначала вторым рисуем фигуру, а затем используем первый, но перед применением домножаем на результат рендера фигуры.
Плюсы: сработает, не будет перекрывать геометрию, экономим один канал при рендера фигуры (в который я изначально хотел сохранить глубину).
Минусы: используем сразу два метода для одного источника света. Вряд ли это будет лучше, чем просто использовать второй метод, но если каналы RG уже заняты, одним третьим каналом можно выкрутиться.
Имбирная Ведьмочка
> "Плоский" ещё не обязательно значит "один квад", стена может быть
> тесселирована.
Как бы ни была тесселирована стена, попытка перевести расчёты в вершины ни к чему хорошему не приведёт, всё будет мелькать и всё будет мыльное.
А должно быть вот так:

(Само собой, в данном примере можно заранее посчитать, что объекты переднего плана не попали под действие объемного освещения и рисовать их просто "как есть", но это частный случай, а я ищу общее решение.)
Подскажите про объёмный свет.
Ищу общее решение.
RTX on\ RTX off :)
romanshuvalov
> За один проход сделать невозможно. Ну и от второго метода не сильно отличается.
В смысле? Заполняешь 3d текстуру в начале каждра, потом в основном пассе сэмплишь её в шэйдере.
Battle Angel Alita
А, да. Но и заполнять, и считывать довольно большую 3d-текстуру довольно накладно. Разве что в глубину сделать её с очень коротким числом слоëв и сделать ось глубины ещё и нелинейной. Получится более сложная вариация на второй способ. Сработать сработает, но, думаю, дороговато в производительности.
Battle Angel Alita
Так, минуту, 3д-текстуру надо ведь сэмплить целиком? Если она глубиной 16 текселей, значит 16 выборок? Не годится, долго же. Лучше уж тогда отсортировать источники по глубине и раскидать их на несколько 2д-текстур (2-й способ), непересекающиеся пусть лежат на одной, пересекающиеся - на разных, будто на разных слоях. Звучит как неплохое решение "в лоб".
romanshuvalov
> (Само собой, в данном примере можно заранее посчитать, что объекты переднего
> плана не попали под действие объемного освещения и рисовать их просто "как
> есть", но это частный случай, а я ищу общее решение.)
Ты неправ. Нарисуй треугольники стены и перчаток на бумаге, с конусом света посередине между ними, и посчитай интеграл от волюма для каждой вершины руками. Никакой особой обработки для перчаток не нужно, ибо для них интеграл изначально должен получиться нулевой.
romanshuvalov
> Как бы ни была тесселирована стена, попытка перевести расчёты в вершины ни к
> чему хорошему не приведёт, всё будет мелькать и всё будет мыльное.
Снова неправ. Если ты рассчитываешь по вершинам — то, очевидно, интерполяция будет происходить по треугольникам меша, а не в скринспейсе.
Имбирная Ведьмочка
Кажется, я что-то не понимаю. Но что именно я не понимаю - я не понимаю.
Вот стена. Допустим, я расщедрился и разделил её аж на 64 квада. Для каждой вершины посчитал, попала она в конус или нет.
Получится примерно так:

И как мне это поможет?
В продолжение темы.
Как покрасивей и подешевле нарисовать объект с размытыми краями?
Поробовал привязать к альфу к нормали, ожидаемо, получился отстой:

(Хорошо работает только на сферах, даже капсула с торца некрасивая).
Поскольку объект почти всегда выпуклый - возникла такая мысль:
- на ЦПУ все вершины переводим в плоскость экрана
- считаем convex hull плоского объекта
- рисуем этот плоский convex hull, добавив уходящую в прозрачность полосу с отступом вдоль границы (операция "buffer", пример на картинке)

Фигуры несложные, максимум на пару десятков вершин, вроде сработает.
Но, может, есть общепринятый способ попроще?
(Очень не хочется лезть в параметрическое задание фигур.)
Тема в архиве.