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

Реализация карт теней с использованием GLSL шейдеров (комментарии) (2 стр)

Страницы: 1 2 3 416 Следующая »
#15
12:42, 2 фев. 2009

Executor
Не замерял где быстрее получается ? C depthTexture или  colorTexture ?


#16
13:25, 2 фев. 2009

0r@ngE
лучше сразу PSSM(CSM)

#17
13:50, 2 фев. 2009

Неплохо.
А ето видел - http://developer.download.nvidia.com/whitepapers/2008/PCSS_Integration.pdf

#18
15:12, 2 фев. 2009

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

Видел... Это мягкие тени, смысл же статьи несколько другой - показать основы, самое начало, самое простое...

#19
16:26, 2 фев. 2009

Executor
Да не, понятно. Просто можно етот линк кинуть в конец, тем кто хочет дальше развивать тени - филтрация ето как раз просто.
А вот уже проекции всякие - там кровавое месиво, про которое статьи писать нужно очень осторожно.

#20
16:57, 2 фев. 2009

Zemedelec
>филтрация ето как раз просто.

Это просто на примерах DX9 :) Где тени можно построить только одним способом...


#21
18:13, 2 фев. 2009

Executor
Предлагаю добавить про выборку shadowCube из Cube с DEPTH_COMPONENT для omni

#22
22:50, 2 фев. 2009

innuendo
>Предлагаю добавить про выборку shadowCube из Cube с DEPTH_COMPONENT для omni

Разве что в качестве новой статьи... Текущая статья завершена и добавлять в неё я уже ничего не буду, ибо процесс улучшения бесконечен, надо когдато поставить точку...

#23
12:53, 3 фев. 2009

На висте посмотреть не удалось. Пишет - программа некорректно работает с памятью и закрывает.

#24
15:01, 3 фев. 2009

Создал свой проект - весь код  и шейдеры идентичны как в статье.
Откуда эти артефакты?

http://www.gamedev.ru/images/?id=39032

#25
15:08, 3 фев. 2009

GraphiX
CBuilder ?

#26
15:10, 3 фев. 2009

Java+eclipse

GF 8600 GT
Драйвера 180.11.02 - новый с GL 3.0

#27
15:28, 3 фев. 2009

Помогло
glPolygonOffset(2.0, 500.0);->glPolygonOffset(2.0, 1000.0);

void glPolygonOffset(factor, units)
o=m*factor+r*units

Написанно что r - зависит от реализации - как тогда правильно units подбирать?

#28
16:09, 3 фев. 2009

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(), я не тестил скорость... Хотя код вообщемто не шибко страшный, так что врядли это будет узким местом...

#29
18:57, 3 фев. 2009

Executor
>MNAndrew
>>На висте посмотреть не удалось. Пишет - программа некорректно работает с
>>памятью и закрывает.
>Ати? НВидиа? Если Ати, то драйвера выше чем 8.10?
  Intel встроеный в буке 3100 вроде.. 10й директикс держит, т.е. должны быть третьи шэйдеры.

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

Тема в архиве.