ENAleksey
А где берем LightData.CosOuterCone и LightData.InvCosConeDifference?) Вручную задаем?)
float DistanceSqr = dot(ToLight, ToLight);
L = ToLight * rsqrt(DistanceSqr);
Dot двух одинаковых векторов всегда будет равен единице ибо же они сонаправлены... Да и то, что это квадрат дистанции не видно - что там делает скалярное произведение двух одинаковы векторнов?) А потом извлекать из единицы квадрат) ToLight - вектор направления от источника света как я понял... Хотелось бы объяснения смысла)
Mr F
> Вот ещё хорошая ссылка по хдр тонмапам:
> http://filmicworlds.com/blog/filmic-tonemapping-operators/
>
> Спотлайты по идее могут быть тысячи разных форм - всё зависит от конструкции
> прожектора. Многие производители ламп замеряют яркость своих продуктов на
> разных углах и публикуют в виде IES файлов - можно много их нагуглить. Я делал
> конвертер из иесов в кубмапу и потом просто домножал поинтовый свет на выборку
> из неё.
> В принципе твой спот уже смотрится неплохо, так что можешь не париться)
О, за ссылочку спасибо)
Я видел подобное что-то c IES в UE4) И еще...) Как лучше текстурку для спота заиспользовать? (например, гало от ручного фонарика) Это как-то, учитывая расстояние от позиции спота и до освещаемого фрагмента, брать значение расстояния и на его основе как-то проецировать текстуру, учитывая направление?)
Привязал к камере)
const float ClampedInnerConeAngle = Clamp(Component->InnerConeAngle, 0.0f, 89.0f) * ( float)PI / 180.0f; const float ClampedOuterConeAngle = Clamp( Component->OuterConeAngle * ( float)PI / 180.0f, ClampedInnerConeAngle + 0.001f, 89.0f * ( float)PI / 180.0f + 0.001f); CosOuterCone = Cos( ClampedOuterConeAngle); CosInnerCone = Cos( ClampedInnerConeAngle); InvCosConeDifference = 1.0f / ( CosInnerCone - CosOuterCone);
Target
> Dot двух одинаковых векторов всегда будет равен единице
Почему?
dot(vec3(1, 2, 3), vec3(1, 2, 3)) == 14
Target
> Dot двух одинаковых векторов всегда будет равен единице
Dot двух сонаправленных еденичных(нормализованных) векторов.
ENAleksey
> > Dot двух одинаковых векторов всегда будет равен единице
> Почему?
> Изображение
> dot(vec3(1, 2, 3), vec3(1, 2, 3)) == 14
MrOcelot
> > Dot двух одинаковых векторов всегда будет равен единице
> Dot двух сонаправленных еденичных(нормализованных) векторов.
Цц) Прошу прощения за сей упущение) Действительно - нормализованных) Забыл про это совсем)
Сделал, как предложил ENAleksey и вот что получилось:
Все круто)
Все круто)
Ziltop
Сам в шоке
Ещё советую почитать вот это: https://google.github.io/filament/Filament.md.html
Очень много полезной информации по созданию реалистичной картинки (система материалов, освещение, пост-эффекты, туман), и всё с кодом.
Исходники движка: https://github.com/google/filament/
Тема в архиве.