MNAndrew
> Intel встроеный в буке 3100 вроде.. 10й директикс держит, т.е. должны быть третьи шэйдеры.
Интел только недавно реализовала ГЛСЛ и то не уверен, что на должном уровне...
Хорошо, что кто-то еще пишет статьи. А то, последнее время, совсем голяк - спасибо :)
Почему бы не делать это в шейдере? Или так быстрее?
float mvLightPos[3]; mvLightPos[0] = cameraModelViewMatrix[0] * lightPos[0] + cameraModelViewMatrix[4] * lightPos[1] + cameraModelViewMatrix[8] * lightPos[2] + cameraModelViewMatrix[12]; mvLightPos[1] = cameraModelViewMatrix[1] * lightPos[0] + cameraModelViewMatrix[5] * lightPos[1] + cameraModelViewMatrix[9] * lightPos[2] + cameraModelViewMatrix[13]; mvLightPos[2] = cameraModelViewMatrix[2] * lightPos[0] + cameraModelViewMatrix[6] * lightPos[1] + cameraModelViewMatrix[10] * lightPos[2] + cameraModelViewMatrix[14]; glUniform3fARB(uniformShadow_lightPos, mvLightPos[0], mvLightPos[1], mvLightPos[2]); [.code]
GraphiX
>Почему бы не делать это в шейдере? Или так быстрее?
В шейдер придётся передавать дополнительно матрицу вида эту, и расчёт будет проводится каждую вершину... В моём случае один раз на всю сцену...
Executor
а если матрици будут менятся от модели к модели, то каждый раз када рисуем модель мы будем пересчитывать и запихивать в шейдер?
это будет лучше чем в шейдере считать?
Bokl
Источник света только одной матрицей переводится в свою систему координат.
Что там куда и кому надо пересчитывать - не понятно.
SNVampyre
туплю)
Executor
Respect, отличная статья!
Помогла мне закрепить те знания относительно этой темы,
в которых я был ранее не уверен, в частности детали процесса
проецирования.. Всё изложено хорошо, чётко и ясно. Спасибо,
буду рад видеть следующие статьи :)
Ещё 2 вопроса:
1.
как правильно выбирать
gluPerspective(90.0, 1.0, 10.0, 30.0); ?
Если поставить угол 45 то качество тени очень повысится, но тогда тень может не войти в кадр и потом будет обрезана.
2
vec3 smcoord = lpos.xyz / lpos.w;
а если координаты выходят за пределы [0.0, 1.0] тогда там будет тоже тень?
тогда это нужно проверять в шейдере?
просто в статье вокруг темнота и рендер из источника охватывает всё световое пятно
P.S.:если туплю сильно не бейте)
GraphiX
>Ещё 2 вопроса:
>1.
>как правильно выбирать
>gluPerspective(90.0, 1.0, 10.0, 30.0); ?
>Если поставить угол 45 то качество тени очень повысится, но тогда тень может не
>войти в кадр и потом будет обрезана.
Ты делаешь направленый источник? Если "omni", тогда надо рисовать в кубическую карту
Если
gluPerspective(90.0, 1.0, 10.0, 300.0);
то тень такая http://www.gamedev.ru/images/?id=39113
если
gluPerspective(45.0, 1.0, 10.0, 300.0);
то тень лучше http://www.gamedev.ru/images/?id=39114, но
получается что рендер из источника не охватывает весь кадр и появляется тёмная область
http://www.gamedev.ru/images/?id=39115
как выбирать угол чтоб тёмной области не было, но тень была макс. лучше
Erion
>как выбирать угол чтоб тёмной области не было, но тень была макс. лучше
если большие пространства - используй CSM (cascaded), PSSM (parallel-split)
пойду читать
GraphiX
>1.
>как правильно выбирать
>gluPerspective(90.0, 1.0, 10.0, 30.0); ?
>Если поставить угол 45 то качество тени очень повысится, но тогда тень может не
>войти в кадр и потом будет обрезана.
Я думаю это зависит от самого источника света... Какой угол надо, такой и ставь...
>2
>vec3 smcoord = lpos.xyz / lpos.w;
>а если координаты выходят за пределы [0.0, 1.0] тогда там будет тоже тень?
>тогда это нужно проверять в шейдере?
>просто в статье вокруг темнота и рендер из источника охватывает всё световое пятно
Ну тут зависит от настроек клампинга текстуры, что будет за пределами...
Можешь например чтонить типа такого написать smcoord = clamp(smcoord, 0.0, 1.0);
innuendo
>Не замерял где быстрее получается ? C depthTexture или colorTexture ?
Вспомнил про NVShaderPerf...
NVShaderPerf : version 2.0, build date Jun 11 2008, 19:15:47
Copyright (C) 2002-2008, NVIDIA Corporation
=====================================================================
Performance analysis of shadow_tex2D.frag
Fragment Performance Setup: Driver 174.74, GPU G80, Flags 0x0
Results 45 cycles, 14 r regs, 3,366,400,051 pixels/s
=====================================================================
Performance analysis of shadow_shad2D.frag
Fragment Performance Setup: Driver 174.74, GPU G80, Flags 0x0
Results 41 cycles, 14 r regs, 3,512,319,946 pixels/s
Как видно, разница в скорости есть, но она вообщемто не слишком значительная... Но стоит не забывать, что в одном случае мы рендерим в колор, а в другом напрямую в глубину... Я думаю в глубину должно быть немного побыстрее, поэтому отрыв наверное будет в реальной сцене чуть выше, но ИМХО разницу заметить будет сложновато... Но ведь у нас может быть несколько выборок, поэтому разрыв будет уже заметнее...
Тема в архиве.