Executor
Не замерял где быстрее получается ? C depthTexture или colorTexture ?
0r@ngE
лучше сразу PSSM(CSM)
Неплохо.
А ето видел - http://developer.download.nvidia.com/whitepapers/2008/PCSS_Integration.pdf
0r@ngE
>неплохо, но ИМХО наверное стоило рассмотреть какой-нить более продвинутый
>алгоритм, типа LiSPSM, TSM или ваще CSM. ;)
Пусть люди с простыми тенями разберуться сначала... :)
innuendo
>Не замерял где быстрее получается ? C depthTexture или colorTexture ?
Насколько помню, примерно одинаково, как не мучал...
>А где слова что при помощи shadow2D можно поиметь PCF фильтр ?
Прям конкретно про PCF я не посчитал нужным говорить по той причине, что это не стандартизированная вещь, к сожалению... Всё что касаемо стандарта я упомянул:
"Если у нас фильтрация текстуры глубины GL_TEXTURE_MAG_FILTER не GL_NEAREST или GL_TEXTURE_MIN_FILTER не GL_NEAREST/GL_NEAREST_MIPMAP_NEAREST, то тогда R может быть сравнено больше чем с одним значением текстуры глубины. Детали реализации зависят от производителя видеокарты. Это означает, что на разных видеокартах картинка может различаться."
И привёл скрин того, как это выглядит на НВидиа...
Sergio666
>А где слова что shadow2DProj обычно криво работает на ATI :)))
Незнаю как насчёт proj, но shadow2d на дровах 8.10-9.1 ведёт себя нормально...
Zemedelec
>А ето видел -
>http://developer.download.nvidia.com/whitepapers/2008/PCSS_Integration.pdf
Видел... Это мягкие тени, смысл же статьи несколько другой - показать основы, самое начало, самое простое...
Executor
Да не, понятно. Просто можно етот линк кинуть в конец, тем кто хочет дальше развивать тени - филтрация ето как раз просто.
А вот уже проекции всякие - там кровавое месиво, про которое статьи писать нужно очень осторожно.
Zemedelec
>филтрация ето как раз просто.
Это просто на примерах DX9 :) Где тени можно построить только одним способом...
Executor
Предлагаю добавить про выборку shadowCube из Cube с DEPTH_COMPONENT для omni
innuendo
>Предлагаю добавить про выборку shadowCube из Cube с DEPTH_COMPONENT для omni
Разве что в качестве новой статьи... Текущая статья завершена и добавлять в неё я уже ничего не буду, ибо процесс улучшения бесконечен, надо когдато поставить точку...
На висте посмотреть не удалось. Пишет - программа некорректно работает с памятью и закрывает.
Создал свой проект - весь код и шейдеры идентичны как в статье.
Откуда эти артефакты?
GraphiX
CBuilder ?
Java+eclipse
GF 8600 GT
Драйвера 180.11.02 - новый с GL 3.0
Помогло
glPolygonOffset(2.0, 500.0);->glPolygonOffset(2.0, 1000.0);
void glPolygonOffset(factor, units)
o=m*factor+r*units
Написанно что r - зависит от реализации - как тогда правильно units подбирать?
MNAndrew
>На висте посмотреть не удалось. Пишет - программа некорректно работает с
>памятью и закрывает.
Ати? НВидиа? Если Ати, то драйвера выше чем 8.10?
GraphiX
>Помогло glPolygonOffset(2.0, 500.0);->glPolygonOffset(2.0, 1000.0);
>void glPolygonOffset(factor, units)
>o=m*factor+r*units
>Написанно что r - зависит от реализации - как тогда правильно units подбирать?
r - минимальное значение, которое гарантирует разницу между depth и new_depth при тесте глубины... Я думаю всё что тут можно сделать, это подобрать значение ручками, которое будет везде давать правильный результат (поглядеть нет ли артефактов на разных видеокартах), то есть оффсет делать с запасом, а не прям тютелька в тютельку... Также подбирать zNear и zFar, от них тоже не мало зависит... Особенно zNear как можно ближе к объекту придвинь...
Можно также эмулировать в шейдере, там уже шаг сам можешь сделать какой надо:
#version 120 float PolygonOffset(float slope_factor, float bias) { float dx = abs( dFdx( gl_FragCoord.z)); float dy = abs( dFdy( gl_FragCoord.z)); float slope = max( dx, dy); return gl_FragCoord.z + slope * slope_factor + bias; } void main( void) { float z = PolygonOffset( 2.0, 1000.0); gl_FragColor = vec4( z); }
Функция примерно аналогична glPolygonOffset(), за исключением второго аргумента, тут тупо константа, а не множитель, который умножается на константу...
Правда боюсь по скорости это будет проигрывать по сравнению с glPolygonOffset(), я не тестил скорость... Хотя код вообщемто не шибко страшный, так что врядли это будет узким местом...
Executor
>MNAndrew
>>На висте посмотреть не удалось. Пишет - программа некорректно работает с
>>памятью и закрывает.
>Ати? НВидиа? Если Ати, то драйвера выше чем 8.10?
Intel встроеный в буке 3100 вроде.. 10й директикс держит, т.е. должны быть третьи шэйдеры.
Тема в архиве.