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

[D3D9]Variance CSM размытие на границе

Страницы: 1 2 3 Следующая »
#0
10:40, 20 июля 2019

Хотелось бы для каскадов теней избавится от ярко выраженной границы, я посмотрел пример из DX SDK, там испольхуется SampleGrad, как я понял эта функция берет некое среднее значение на ddx, ddy, а как быть с тем, что у нас разные текстурные координаты двух текстур теней?

В общем я не очень понимаю как оно работает и как мне перевести на D3D9.


#1
11:03, 20 июля 2019

Osiris

граница между каскадами ?

> я посмотрел пример из DX SDK, там испольхуется SampleGrad, как я понял эта
> функция берет некое среднее значение на ddx, ddy

вроде нет

просто захватываешь кусочки соседних каскадов и блендишь

#2
11:44, 20 июля 2019

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

#3
(Правка: 12:00) 11:48, 20 июля 2019

Mr F
> что помогает уменьшать радиус блюра каскадам по мере удалённости, чтобы он на
> стыке не особо отличался.

так оно и на скорость влияет

#4
12:36, 20 июля 2019

Mr F
> Помимо собственно блендинга двух теней, заметил, что помогает уменьшать радиус
> блюра каскадам по мере удалённости, чтобы он на стыке не особо отличался.
А не будет ли заметно, что размытость уменьашется, а потом увеличивается?

>просто захватываешь кусочки соседних каскадов и блендишь
А как контролировать глубину смешивания, как в примере? У нас же тени не накладываются одна на другую, а идут стык в стык.

#5
12:40, 20 июля 2019

Osiris
> А не будет ли заметно, что размытость уменьашется, а потом увеличивается?
Наоборот. Заметно когда он одинаковый при разном разрешении тени)

#6
12:41, 20 июля 2019

Mr F
> Наоборот. Заметно когда он одинаковый при разном разрешении тени)
Ок, попробую

#7
12:42, 20 июля 2019

Osiris
> А как контролировать глубину смешивания, как в примере? У нас же тени не
> накладываются одна на другую, а идут стык в стык.

некая дельта - ты берешь кусок из N и N+1 каскада

#8
12:45, 20 июля 2019

innuendo
> некая дельта - ты берешь кусок из N и N+1 каскада
типа как с PCF?

#9
12:47, 20 июля 2019

Osiris
> типа как с PCF?

ну ты посмотри код примера из dxsdk

#10
12:49, 20 июля 2019

innuendo
> ну ты посмотри код примера из dxsdk
Смотрю, но он не самый очевидный, ладно, буду делать и поглядывать.

#11
22:03, 20 июля 2019

Osiris

ну и как результат ?

#12
9:36, 21 июля 2019

innuendo
> ну и как результат ?
Вчера руки не дошли, постараюсь сегодня

#13
16:53, 21 июля 2019

Так, я сделал, но не совсем так как в примере, хотя логика все же оттуда.

Первый момент - даже при выранивании камеры в которую отображается тень, у нас размер каждого последующего сплита такой, что он цепляет немного предыдущий, особенно если near-far plan каждого сплита установлен не точно на границе, а чуть больше.

При таких условиях мы можем смело получать в точке сплита 0 (на границах сплита по определенной глубине) по той же позиции и камере сплита 1 текстурные координаты в карте теней сплита 1, в результате имеем два набора параметров для просчета SM или VSM и далее эти два параметра можно интерполировать линейно по размеру зоны - сделать плавный переход.

Прелесть реализации на D3D11 в том, что там реально большой блюр из-за SampleGrad.

#14
17:23, 21 июля 2019

Osiris
> что там реально большой блюр из-за SampleGrad.

какая свзяь между размером блюра и SampleGrad ?

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