Кто-нибудь знает как перевести attenuation у источника света в screen space пространство?
Проблема на скрине
должно быть всегда так при любом повороте.
Я не совсем понимаю как работает UNITY_LIGHT_ATTENUATION.
Куда копать?
jetyb писал(а):Какого источника света? На сцене может быть 100500 источников света.
В шейдеры передаются только 8 ближайших и главный свет (см. файл UnityShaderVariables.cgic).
Если есть конкретный источник света, то можно передавать его параметры (цвет, позицию, интенсивность..) в шейдер.
jetyb писал(а):По-прежнему не совсем понимаю что вам надо. На скринах все вроде бы освещено корректно. Деревья правда освещены странно, но они сделаны совсем по-своему, под Directional Light, и обновляются через TerrainData.RefreshPrototypes.
Тень хотите к точечному свету добавить? Берется рендертекстура кубмэпа глубины, ставится на место источника света. Каждая точка кубмэпы - расстояние от источника света до ближайшего препятствия. Определяется глубина точки через функцию texCube из трехмерного вектора направления текущей точки относительно источника света. Вектор направления относительно источника света текущего пикселя можно вычислить из позиции текущего пикселя в мировом пространстве.
Все: зная глубину пискселя, можно узнать "виден ли он" из точки света. Если виден то его attenuation = 1, иначе -0.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2