Источник света в Screen Space

Шейдеры и все-все-все.

Источник света в Screen Space

Сообщение kripto289 03 ноя 2017, 06:57

Кто-нибудь знает как перевести attenuation у источника света в screen space пространство?
Проблема на скрине
Изображение

должно быть всегда так при любом повороте.
Изображение

Я не совсем понимаю как работает UNITY_LIGHT_ATTENUATION.
Куда копать?
Аватара пользователя
kripto289
UNIверсал
 
Сообщения: 475
Зарегистрирован: 30 сен 2013, 03:30
Откуда: Екатеринбург
  • Сайт

Re: Источник света в Screen Space

Сообщение jetyb 03 ноя 2017, 07:47

Какого источника света? На сцене может быть 100500 источников света.
В шейдеры передаются только 8 ближайших и главный свет (см. файл UnityShaderVariables.cgic).

Если есть конкретный источник света, то можно передавать его параметры (цвет, позицию, интенсивность..) в шейдер.
jetyb
Адепт
 
Сообщения: 1271
Зарегистрирован: 31 окт 2011, 17:21

Re: Источник света в Screen Space

Сообщение kripto289 03 ноя 2017, 16:42

jetyb писал(а):Какого источника света? На сцене может быть 100500 источников света.
В шейдеры передаются только 8 ближайших и главный свет (см. файл UnityShaderVariables.cgic).

Если есть конкретный источник света, то можно передавать его параметры (цвет, позицию, интенсивность..) в шейдер.

Не я не про вертексный свет, а про пиксельный.
Point light источник с аддитивным пассом.
Quality pixel light > 1
Tags{ "LightMode" = "ForwardAdd"}
#if defined(POINT)
код для аттеньюации
#endif

У меня есть позиция источника света, его матрица и прочие параметры (которые прописаны autoLight.cginc)

Код я взял отсюда:
UNITY_LIGHT_ATTENUATION(attenuation, 0, i.worldPos.xyz);
Аватара пользователя
kripto289
UNIверсал
 
Сообщения: 475
Зарегистрирован: 30 сен 2013, 03:30
Откуда: Екатеринбург
  • Сайт

Re: Источник света в Screen Space

Сообщение jetyb 07 ноя 2017, 08:20

По-прежнему не совсем понимаю что вам надо. На скринах все вроде бы освещено корректно. Деревья правда освещены странно, но они сделаны совсем по-своему, под Directional Light, и обновляются через TerrainData.RefreshPrototypes.

Тень хотите к точечному свету добавить? Берется рендертекстура кубмэпа глубины, ставится на место источника света. Каждая точка кубмэпы - расстояние от источника света до ближайшего препятствия. Определяется глубина точки через функцию texCube из трехмерного вектора направления текущей точки относительно источника света. Вектор направления относительно источника света текущего пикселя можно вычислить из позиции текущего пикселя в мировом пространстве.
Все: зная глубину пискселя, можно узнать "виден ли он" из точки света. Если виден то его attenuation = 1, иначе -0.
jetyb
Адепт
 
Сообщения: 1271
Зарегистрирован: 31 окт 2011, 17:21


Вернуться в Shader Lab

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2