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

Omni Shadows (5 стр)

Страницы: 1 2 3 4 5 6 Следующая »
#60
(Правка: 7:02) 7:01, 14 июля 2021

Bonus
> m_PointLightClips[0] = CalculateLineEquationCoeffs(new Vector2(0, 0), new
> Vector2(-1, 1));
> m_PointLightClips[1] = CalculateLineEquationCoeffs(new Vector2(1, 1), new
> Vector2(0, 0));
>
> m_PointLightClips[2] = CalculateLineEquationCoeffs(new Vector2(0, 0), new
> Vector2(1, 1));
> m_PointLightClips[3] = CalculateLineEquationCoeffs(new Vector2(1, -1), new
> Vector2(0, 0));
>
> m_PointLightClips[4] = CalculateLineEquationCoeffs(new Vector2(0, 0), new
> Vector2(1, -1));
> m_PointLightClips[5] = CalculateLineEquationCoeffs(new Vector2(-1, -1), new
> Vector2(0, 0));
>
> m_PointLightClips[6] = CalculateLineEquationCoeffs(new Vector2(0, 0), new
> Vector2(-1, -1));
> m_PointLightClips[7] = CalculateLineEquationCoeffs(new Vector2(-1, 1), new
> Vector2(0, 0));
Вопрос, это значения расчитанные на оптимизированный (для использования всей теневой карты, чтобы место не пропадало зря) вариант со стенсилом? И без стенсила работать не будут, верно?


#61
10:17, 14 июля 2021

MikeNew
> Вопрос, это значения расчитанные на оптимизированный (для использования всей
> теневой карты, чтобы место не пропадало зря) вариант со стенсилом? И без
> стенсила работать не будут, верно?
Нет, стенсил я не юзаю. И шадомапа для поинт лайтов у меня лежит в атласе теней, т.е. она не занимает всю теневую карту.
Матрица проекции подшаманена как в статье и вьюпорт.
А вот эти координаты клиппинга, о которых ты спрашиваешь, они именно в clip space. Т.е. после умножения на подшаманенную матрицу viewProj, получаются координаты в ренже [-1;1] и по ним будет рассчитываться расстояние до прямой указанной в CalculateLineEquationCoeffs

#62
(Правка: 5:35) 5:19, 15 июля 2021

Bonus
> Нет, стенсил я не юзаю. И шадомапа для поинт лайтов у меня лежит в атласе
> теней, т.е. она не занимает всю теневую карту.
Если представить что у нас один источник света чтобы не путаться пока из-за атласа теней, то вопрос был в том используется ли полностью теневая карта? По твоим координатам клипа я так понял что используется (они нарисованы на рисунке снизу).

Bonus
> Матрица проекции подшаманена как в статье и вьюпорт.
В смысле - вьюпорт сделан так же как и в статье?
Матрицы вида у тебя такие же как в статье или свои?

Я взял и матрицы вида и матрицы проекций из этой же статьи. Если не использовать стенсил, то получатся вот такая картина (четыре камеры - имеются в виду четыре матрицы вида для четырех граней тетраэдра):

Изображение

То есть, если сделать камеры как в статье, но без стенсила, получается что используется только половина карты теней (та что выше диагонали (-1,1)(1,-1) )
У тебя не используется стенсил, но, судя по координатам клипа, ты используешь всю карту теней. Как?
Или у тебя сделано как-то так?:

Изображение


Update:
Или я херню написал.
Полетал вокруг источника света и увидел, что все-таки и в нижнем правом углу карты теней тоже есть прорисовка, если быть отбрасывающее тень тело над источником света в определенном месте.

#63
10:02, 15 июля 2021

MikeNew
> Или я херню написал.
Типа того :)
Clip space в ренже [-1;1]. У меня координаты, например

m_PointLightClips[0] = CalculateLineEquationCoeffs(new Vector2(0, 0), new Vector2(-1, 1));
m_PointLightClips[1] = CalculateLineEquationCoeffs(new Vector2(1, 1), new Vector2(0, 0));
Т.е. от центра, к углам.
Я уже не помню почему так сделал. Сейчас мне очевидно, что достаточно двух прямых. Наверное я так сделал, чтобы знак расстояния до прямой был у всех фейсов одинаковый.
#64
10:07, 15 июля 2021

MikeNew
> Или я херню написал.

покажи простой кейс

#65
(Правка: 14:46) 14:45, 15 июля 2021

Bonus
> Типа того :)
> Clip space в ренже [-1;1]. У меня координаты, например
Это я уже понял, с клипами я понемногу разбираюсь, вопрос немного не о том был.
А о том как ты, используя матрицы из статьи, при этом обходишься без стенсила рисуя на всю карту теней. Ну да ладно, как-нибудь разберусь потихоньку.

#66
17:05, 15 июля 2021

MikeNew
Так в этом и суть клиппинга, чтобы он полностью заменил стенсил. Все 4 матрицы рисуют на всю текстуру. А клиппинг отсекает все, кроме нужной четверти. Как стенсил, только лучше.

#67
2:17, 16 июля 2021

Bonus
> Так в этом и суть клиппинга, чтобы он полностью заменил стенсил. Все 4 матрицы
> рисуют на всю текстуру. А клиппинг отсекает все, кроме нужной четверти. Как
> стенсил, только лучше.
Вчера это понемножку, со скрипом, стало доходить.
Вьюпорты располагаются как-то так?:

Изображение
#68
9:20, 16 июля 2021

MikeNew
Нет, вьюпорт одинаковый для всех фейсов. Я испольую вьюпорт ТОЛЬКО для того, чтобы правильно расположить шадомапу одного лайта в общем атласе.
Если сделать вьюпорты как у тебя на картинке, то координаты клиппинга съедут, потому что они локальны для вьюпорта.

#69
(Правка: 10:56) 10:54, 16 июля 2021

Bonus
> Нет, вьюпорт одинаковый для всех фейсов.
Ясно. А каким именно способом ты тогда пишешь фейс в нужную область отдельной шэдоумапы одного лайта? Они же все равно должны рендерится в свои области, как на моей картинке.

#70
11:44, 16 июля 2021

Просто передаю _FaceId в шейдер. По нему выбираю матрицу и прямые для клиппинга

output.clip[0] = -GetClipDistance(output.positionCS.xy, _FaceId, 0);
output.clip[1] = -GetClipDistance(output.positionCS.xy, _FaceId, 1);

#71
12:57, 16 июля 2021

Bonus
> Просто передаю _FaceId в шейдер. По нему выбираю матрицу и прямые для клиппинга
Из этого я понимаю как ты клипаешь, но все еще до меня не доходит как тени рендерятся в нужные области фреймбуфера.
Пусть пространство фреймбуфера в диапазоне (-1,1). Вот нужно чтобы рендер пошел начиная с координаты
(0, -1) и вся теневая карта текущего фейса отрендерилась в область (0,-1)-(1,1):

Изображение загрузить фото

У меня создается впечатление что я не знаю чего-то элементарного, поскольку я умею рендерить в определенную область фреймбуфера только через меняя вьюпорт.
Это как-то определяется матрицей проекции?

#72
13:40, 16 июля 2021

А от кастомного клипа случаем earlyZ не отвалиться?

#73
14:45, 16 июля 2021

Battle Angel Alita
> Пусть пространство фреймбуфера в диапазоне (-1,1). Вот нужно чтобы рендер пошел
> начиная с координаты
Давай уберем из всего этого вьюпорт и атлас. Сделаем вьюпорт на всю текстуру. Так вот, рендерится всё на весь вьюпорт. Но клиппингом отрезается все кроме нужного треугольника. Пополам, как у тебя, ничего и ни чем не делится.

#74
(Правка: 3:02) 2:47, 17 июля 2021

Bonus
> Давай уберем из всего этого вьюпорт и атлас. Сделаем вьюпорт на всю текстуру.
> Так вот, рендерится всё на весь вьюпорт.
Ок, вьюпорт один для одного источника света.
Тогда такой вопрос - каковы матрицы проекций фейсов? Взяты ли они один в один из исходников OmniTiledShadows или изменены? Если изменены, то можно ли тебе показывать как ты их делал (запостить код из создания)?
Тот же самый вопрос про матрицы вида...

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