Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Освещение точечным источником (Omni) (2 стр)

Освещение точечным источником (Omni) (2 стр)

Страницы: 1 2 3 Следующая »
DelfigamerПостоялецwww16 апр. 201818:19#15
eDmk
> Могу и так считать (specular+defuse)*max(dot(n,l), 0.0), но тогда направленный
> источник получается.
Ты неправильно понимаешь формулу.
Смотри на схему:
Изображение
Свет, который приходит в пиксел камеры - это отражённый свет [cht]I_r[/cht].
Свет, который падает на поверхность - это падающий свет [cht]I_i[/cht].
В общем случае, соотношение между ними [cht]f=\frac{I_r}{I_i}[/cht] зависит от свойств самой поверхности, от угла падения света [cht]\omega_i[/cht] и от угла, с которого на эту поверхность смотрят [/cht]\omega_r[/cht].
В "свойства самой поверхности" входит как цвет поверхности - свойство по-разному отражать разные длины волн, так и структура - например, у глянцевых поверхностей [cht]f[/cht] будет высоким, когда [cht]\omega_r[/cht] будет близко к зеркальному отражению [cht]\omega_i[/cht], тогда как матовые выглядят практически одинаково со всех углов обзора.
Самая простая модель поверхности - ламбертовая:
[cht]f=D \max (n \cdot \omega_i, \;\;\; 0)[/cht]
В ней [cht]n \cdot \omega_i[/cht] отвечает за то, чтобы наклонённые к источнику поверхности казались менее освещёнными, чем смотрящие прямо на него, [cht]\max[/cht] не позволяет формуле дать отрицательную интенсивность при освещении с обратной стороны, а [cht]D[/cht] придаёт поверхности цвет.
Отдельная формула - это зависимость интенсивности падающего света [cht]I_i[/cht] от положения относительно источника [cht]r[/cht]. Для ненаправленного источника, интенсивность зависит только от расстояния до источника и выражается как [cht]I_i = \frac{K}{|r|^2}[/cht], где [cht]K[/cht] - мощность источника.
eDmkУчастникwww16 апр. 201818:58#16
Delfigamer
Это получается Ламберт с полусферой:
https://yadi.sk/i/SuAMPCcp3UTp7E

А у меня сфера без Ламберта:
https://yadi.sk/i/vBLh76k63UTpDL

Вот и думаю как затенить треугольник, если Omni-источник находится внутри объекта.

barnesПостоялецwww16 апр. 201819:15#17
eDmk
> Вот и думаю как затенить треугольник, если Omni-источник находится внутри
> объекта.
Вам выше уже ответили на этот вопрос)))
SuslikМодераторwww16 апр. 201819:20#18
eDmk
> А у меня сфера без Ламберта:
eDmk
> Вот и думаю как затенить треугольник, если Omni-источник находится внутри объекта.
то есть ты выдумал волшебную модель освещения и теперь спрашиваешь, как её сделать неволшебной что ли?
eDmkУчастникwww16 апр. 201819:36#19
Suslik
>то есть ты выдумал волшебную модель освещения и теперь спрашиваешь, как её сделать неволшебной что ли?
Вы похожи на вирус WIN.CIH95. Вас очень много и все разновидности опасны.
Очевидно, что ответить или подсказать желания нет, но вы все равно тут.
Ваши «волшебные» работы видел. Не впечатляют. Поделки мелкого пакостника.
А за свои мне не стыдно. Я начинающий.

И о да! Формулу я придумал сам.

Правка: 16 апр. 2018 19:39

FordPerfectПостоялецwww16 апр. 201819:40#20
Suslik
С тем что Луна - волшебная даже спорить как-то не хочется.
А вообще, хоть бы и
[cht]I \cdot \max(\operatorname{sgn}(\vec{n} \cdot \vec{\omega}_i),0)[/cht]
вместо
[cht]I \cdot \max(\vec{n} \cdot \vec{\omega}_i,0)[/cht]
SuslikМодераторwww16 апр. 201819:43#21
FordPerfect
какбе в уравнении рендеринга [cht]\omega \cdot \vec n[/cht] вообще by design есть всегда, потому что если на поверхность свет падает под углом, то плотность входящего светового потока получается меньше, так как он распределяется по большей площади, и коэффициент этот, разумеется — косинус угла падения:
Изображение

или ты хочешь сказать, что луна ему не подчиняется?

Правка: 16 апр. 2018 19:45

barnesПостоялецwww16 апр. 201819:48#22
eDmk
> Я начинающий.
Так и начните с азов, что проверка триангла на освещеность это если dot(normal, lightVec) больше нуля.
Где лайтВек это LightPos - vertexPos (потом не забываем это нормализировать). Вам же написали выше это.
eDmkУчастникwww16 апр. 201819:50#23
>Вам же написали выше это.
Так это полусфера, а мне сфера нужна. Видимо в 2-х направлениях надо проверять.
barnesПостоялецwww16 апр. 201819:53#24
eDmk
> а мне сфера нужна
Зачем? Практическое применение?
DampireПостоялецwww16 апр. 201819:56#25
eDmk
Ты поехавший? Что по твоему значит освещение по полусфере?
MikleМодераторwww16 апр. 201820:04#26
eDmk
> Это OMNI, а не направленный свет. Вы забываете.
> Он направлен во все стороны СРАЗУ.
> С направленным у меня нет проблем.
Нужно направление не источника света, а НА источник света, его можно брать от любой вершины треугольника, знак будет один.
FordPerfectПостоялецwww16 апр. 201820:11#27
Suslik
> потому что если на поверхность свет падает под углом, то плотность входящего светового потока получается меньше, так как он распределяется по большей площади
С этим я не спорю.
Но the Moon is a non-lambertian scatterer.
> или ты хочешь сказать, что луна ему не подчиняется?
Можно воспринимать в том смысле, что внутри fr есть нечто, что Ламберта примерно компенсирует. И визуально яркость почти не зависит от угла падения. Вплоть до терминатора.
Вообще BRDF Луны - особая интересная тема.
http://graphics.stanford.edu/~henrik/papers/nightsky/
DelfigamerПостоялецwww16 апр. 201821:02#28
eDmk
> Это получается Ламберт с полусферой:
> https://yadi.sk/i/SuAMPCcp3UTp7E
> А у меня сфера без Ламберта:
> https://yadi.sk/i/vBLh76k63UTpDL
+ Показать

Правка: 16 апр. 2018 21:03

MrShoorУчастникwww16 апр. 201823:43#29
Dampire
> Ну-ка покажи мне как можно быть направленным во все стороны по отношению к
> треугольнику. Схему в паинте плес. Как придумаешь - нобелевку делим пополам.
nobel | Освещение точечным источником (Omni)
Можно мне нобелевку?
Страницы: 1 2 3 Следующая »

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр