Хотелось бы для каскадов теней избавится от ярко выраженной границы, я посмотрел пример из DX SDK, там испольхуется SampleGrad, как я понял эта функция берет некое среднее значение на ddx, ddy, а как быть с тем, что у нас разные текстурные координаты двух текстур теней?
В общем я не очень понимаю как оно работает и как мне перевести на D3D9.
Osiris
граница между каскадами ?
> я посмотрел пример из DX SDK, там испольхуется SampleGrad, как я понял эта
> функция берет некое среднее значение на ddx, ddy
вроде нет
просто захватываешь кусочки соседних каскадов и блендишь
Помимо собственно блендинга двух теней, заметил, что помогает уменьшать радиус блюра каскадам по мере удалённости, чтобы он на стыке не особо отличался.
Mr F
> что помогает уменьшать радиус блюра каскадам по мере удалённости, чтобы он на
> стыке не особо отличался.
так оно и на скорость влияет
Mr F
> Помимо собственно блендинга двух теней, заметил, что помогает уменьшать радиус
> блюра каскадам по мере удалённости, чтобы он на стыке не особо отличался.
А не будет ли заметно, что размытость уменьашется, а потом увеличивается?
>просто захватываешь кусочки соседних каскадов и блендишь
А как контролировать глубину смешивания, как в примере? У нас же тени не накладываются одна на другую, а идут стык в стык.
Osiris
> А не будет ли заметно, что размытость уменьашется, а потом увеличивается?
Наоборот. Заметно когда он одинаковый при разном разрешении тени)
Mr F
> Наоборот. Заметно когда он одинаковый при разном разрешении тени)
Ок, попробую
Osiris
> А как контролировать глубину смешивания, как в примере? У нас же тени не
> накладываются одна на другую, а идут стык в стык.
некая дельта - ты берешь кусок из N и N+1 каскада
innuendo
> некая дельта - ты берешь кусок из N и N+1 каскада
типа как с PCF?
Osiris
> типа как с PCF?
ну ты посмотри код примера из dxsdk
innuendo
> ну ты посмотри код примера из dxsdk
Смотрю, но он не самый очевидный, ладно, буду делать и поглядывать.
Osiris
ну и как результат ?
innuendo
> ну и как результат ?
Вчера руки не дошли, постараюсь сегодня
Так, я сделал, но не совсем так как в примере, хотя логика все же оттуда.
Первый момент - даже при выранивании камеры в которую отображается тень, у нас размер каждого последующего сплита такой, что он цепляет немного предыдущий, особенно если near-far plan каждого сплита установлен не точно на границе, а чуть больше.
При таких условиях мы можем смело получать в точке сплита 0 (на границах сплита по определенной глубине) по той же позиции и камере сплита 1 текстурные координаты в карте теней сплита 1, в результате имеем два набора параметров для просчета SM или VSM и далее эти два параметра можно интерполировать линейно по размеру зоны - сделать плавный переход.
Прелесть реализации на D3D11 в том, что там реально большой блюр из-за SampleGrad.
Osiris
> что там реально большой блюр из-за SampleGrad.
какая свзяь между размером блюра и SampleGrad ?