Для "не рисования" объектов, которые находятся вне фрустума, обычно используют frustum culling, octree/quad-tree, occlusion query тест и пр. А как быть с тенями (если, объект находится вне фрустума, а тень во фрустуме)?
Для точечного источника света(ис) подходит сфера.
Для спотового ис - бокс (я пока не разбирался, как его вычислять) или, мб, какой-то другой объём?
Для направленного ис я вообще не знаю, какой объём брать (и нужно ли?) и как тут вообще обрезать тени?
Кто реализовывал данную "обрезку теней" (для спотового и направленного ис)? Подскажите, как делали?
Скрин (фрустум):

Скрин (фрустум + octree/quad-tree):

Отрисовывать геометрию в ShadowMap полностью?
А
> frustum culling, octree/quad-tree, occlusion query тест
применять только к финальной отрисовке(на которую ложатся тени)
строить очередь видимых объектов с позиции источника света во время SM-прохода
Надо определить, есть ли контакт между пирамидой и усечённой пирамидой.
Elec3C
>А как быть с тенями (если, объект находится вне фрустума, а тень во фрустуме)?
тени рисуется на приемнике теней, а он виден в данной ситуации, или я неправильно понял?
по идее Frustum источника и frustum тени это разные frustum.
BenTech
> Отрисовывать геометрию в ShadowMap полностью
Какая же это оптимизация для направленного ис?
Blew_zc
Это буду делать для точечного и спотового ис.
SNVampyre
Если я правильно понял, это для спотового ис.
Andrey
> frustum тени
Это что ещё такое? Для каждой тени при направленном ис нужно строить ещё и фрустумы тени и по ним уже проверять, попал ли фрустум тени во фрустум камеры?
Для направленного ис:
Скрин (здесь объект находится вне фрустума камеры и не отрисовывается, а сама тень от объекта должна отрисовываться):

Скрин (здесь объект находится вне фрустума камеры и не отрисовывается и сама тень от объекта тоже находится вне фрустума камеры и не должна отрисовываться - как это контролировать можно (строит фрустумы для теней?:) )):

P.S. Все скрины в нулевом посте приведены для направленного ис.
Elec3C
> Это что ещё такое? Для каждой тени при направленном ис нужно строить ещё и
> фрустумы тени и по ним уже проверять, попал ли фрустум тени во фрустум камеры?
>
>
Я как раз пришел в эту тему предложить тебе сделать именно это.
BenTech
>>Отрисовывать геометрию в ShadowMap полностью?
:D
Blew_zc
>>строить очередь видимых объектов с позиции источника света во время SM-прохода
У направленного источника нет позиции. Есть только направление.
Elec3C
Т.к. для направленного источника тень имеет тотже размер, что и сам объект, то всю тень можно запихать в бокс.
А уже этот бокс проверять на попадание в фрустум или дерево.
Elec3C
>Это что ещё такое? Для каждой тени при направленном ис нужно строить ещё и фрустумы тени и по ним уже проверять, >попал ли фрустум тени во фрустум камеры?
Смотри. Для источника света строим frustum(для каждого типа свой если случай с Cube Map там по другому)
далее ищем список объектов для источника света этого, как сказал Blew_zc. Рисуем в текстуру тени.
Далее есть два случая:
- тень будет на самом объекте в случае само затенения - тогда объект будет виден из frustum камеры и он и тень будут видны.
- эта тень будет на приемнике тени, тогда если виден приемник из frusutm камеры,кусок ландшафта к примеру, рисуем его, ну а текстура тени по идее будет передаваться для шейдера и она автоматически будет видна там где нужно.
Зачем тут что проверять видимости теней я не пойму,
Есть общая текстура тени после SM прохода, она передается в шейдеры. То что видно из frustum камеры рисуется и используется эта текстура.
@!!ex
> У направленного источника нет позиции. Есть только направление.
значит можно выбрать её самому
@!!ex
Это как-то тени имеет одинаковый размер, что и объект - помести солнце на горизонт - одинаковый размер тени и объекта?
Andrey
> Зачем тут что проверять видимости теней я не пойму
Перечитай мои посты ещё раз и посмотри внимательно на скрины)
Надо попробовать строить фрустумы от каждой тени и проверять на принадлежность фрустума тени фрустуму камеры.
Elec3C
>перечитай мои посты ещё раз и посмотри внимательно на скрины)
Теперь я кажется понял что ты хочешь, ты хочешь оптимизировать отрисовку объектов в тень, если тень заведомо не будет видна frustum камеры, не рисовать этот объект для теней. Так ?
Andrey
Да-да - это мне и нужно реализовать :)
Камера упирается в землю, смотрит вниз - большой фрустум, ето нормальнъй фрустум. Вътянутъй фрустум - ето фрустум тени. Его юзает для второго прохода по графу сценъ, чтобъ найти все обьектъ, которъе бросают тень в наше view:

Elec3C
>>Это как-то тени имеет одинаковый размер, что и объект - помести солнце на горизонт - одинаковый размер тени и объекта?
И что? От направленного источника света тень всегда будет одного размера, на любом расстоянии.
Странно, что это нужно объяснять...
Тема в архиве.