Войти
ПрограммированиеФорумГрафика

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

Страницы: 1 2 3 Следующая »
#0
(Правка: 4:15) 4:11, 16 апр. 2018

Всем привет!

Подскажите пожалуйста, как рассчитать по отношению к точечному источнику (Omni) видимость полигона.
Относительно камеры он виден, а относительно Omni он может быть не виден (например, если он внутри объекта).

Тут наглядное видео: https://yadi.sk/i/COptSSOw3USSxh

В общем создается эффект внутренней подсветки, а это не нужно.
Нужно, чтобы полигоны между камерой и Omni не подсвечивались.
Конечно же у Omni нет вектора (Light Dir). Есть только позиция и радиус.

#1
8:53, 16 апр. 2018

>нет LightDir
Как это нету а? А wPos - lPos это что такое?

#2
10:15, 16 апр. 2018

Освещенность пикселя как считаешь? (specular+defuse)*max(dot(n,l), 0.0) ?

#3
10:22, 16 апр. 2018

lookid
> Освещенность пикселя как считаешь? (specular+defuse)*max(dot(n,l), 0.0) ?

Bomb has been defused.
#4
(Правка: 12:11) 12:09, 16 апр. 2018

>Освещенность пикселя как считаешь? (specular+defuse)*max(dot(n,l), 0.0) ?

Немного по  другому:
p = PixelPos
l = LightPos

Distance = Sqrt(Sqr(l.X - p.X) + Sqr(l.Y - p.Y) + Sqr(l.Z - p.Z));
Attenuation = 1.0 - (Distance / Radius)
gl_FragColor = (DiffColor + SpecularColor) * Attenuation

Вектора нет вообще.
Могу и так считать (specular+defuse)*max(dot(n,l), 0.0), но тогда направленный источник получается.

#5
12:26, 16 апр. 2018

гениально. пиши пейпер по новым методикам освещениея.

#6
12:36, 16 апр. 2018

Что по-твоему вектор? По-моему он как раз является описательной штукой направления от одной точки к другой. Две точки у тебя есть, но вывести вектор не получается? Во втором посте тебе ответили как искать направление.

#7
(Правка: 14:01) 14:00, 16 апр. 2018

eDmk
> Attenuation = 1.0 - (Distance / Radius)
> gl_FragColor = (DiffColor + SpecularColor) * Attenuation
член с dot(n, l) является чисто геометрическим соотношением, говорящим, что поверхность локально находится под углом к падающему свету, поэтому если в модели освещения этого коэффициента нет, это практически гарантированный нефизичный фейк.

> Distance = Sqrt(Sqr(l.X - p.X) + Sqr(l.Y - p.Y) + Sqr(l.Z - p.Z));
удобно, да, при каждой модификации формулы менять её в трёх местах?

#8
(Правка: 14:25) 14:20, 16 апр. 2018

Suslik
У меня софтвер. OpenGL'я нет ваще. Свои шейдеры (совместимы по расчетам с OpenGL).

Мне в общем то математика не нужна. Мне нужно понять как в таком случае считать видимость.
Просто логика подойдет. Посчитаю сам.

На крайний случай можно источник в объект не помещать, но что если вдруг он попал в объект?
Не считать же с точки зрения источник<->камера видимость для каждого треугольника?

#9
14:27, 16 апр. 2018

eDmk
Нормаль треугольника и направление камеры. Скалярное произведение

#10
(Правка: 14:43) 14:43, 16 апр. 2018

lookid
>
> lookid
Это OMNI, а не направленный свет. Вы забываете.
Он направлен во все стороны СРАЗУ.

С направленным у меня нет проблем.

#11
(Правка: 14:51) 14:47, 16 апр. 2018

eDmk
Ну-ка покажи мне как можно быть направленным во все стороны по отношению к треугольнику. Схему в паинте плес. Как придумаешь - нобелевку делим пополам.

#12
16:29, 16 апр. 2018

eDmk
Ты хочешь не пер-пиксель лайтинг, а куллинг.

#13
16:38, 16 апр. 2018

>куллинг
Возможно. Где почитать?

#14
(Правка: 17:48) 17:48, 16 апр. 2018

eDmk
> Он направлен во все стороны СРАЗУ.
Пора вспоминать теорию относительности

eDmk
> Могу и так считать (specular+defuse)*max(dot(n,l), 0.0), но тогда направленный
> источник получается.
Источник в любом случае куда-то направлен. В одну сторону, либо во все сразу.

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика