Как реально совместить освещение Фонг с диэлектрическим отражением / передачей Френеля? - PullRequest
3 голосов
/ 27 марта 2012

ОБНОВЛЕНИЕ: Я ответил на свой вопрос о том, какую модель освещения использовать, но теперь мне нужно знать, как рассчитать термины Френеля для отраженных и прошедших лучей.

У меня есть частично реализованный C ++ ray tracer. Прямо сейчас освещение Фонг теневыми лучами работает нормально. Я решил не иметь сущностей с одним цветом плюс скалярные коэффициенты окружения / рассеяния / скаляра; у каждого из трех коэффициентов есть компоненты RGB, поэтому я могу реализовать такие материалы, как this . Свет, с другой стороны, имеет один цвет RGB плюс скалярные диффузные и зеркальные интенсивности. Также есть один RGB рассеянный свет.

В этот момент я мог бы также реализовать полностью диэлектрические объекты, которые отражают или пропускают весь свет, с пропорцией отраженного к преломленному свету, определяемой уравнениями Френеля. Однако как я могу реально сочетать отраженные и преломленные цвета с цветом Фонга? Я хочу иметь слегка отражающий цветной пластик, полированное золото, идеальные зеркальные или стеклянные сферы, витражи, стеклянные панели, прозрачные в лоб, но зеленые по краям и так далее. Я планировал добавить коэффициенты отражения и коэффициента пропускания RGB к каждому объекту и позволить разработчику объекта убедиться, что окружающий + рассеянный + зеркальный + коэффициент отражения + пропускания находится в разумном диапазоне, но это кажется произвольным. Есть ли физически обоснованный способ?

1 Ответ

3 голосов
/ 28 марта 2012

Я нашел подходящую модель освещения в документации для файлов .mtl :

color = KaIa
+ Kd { SUM j=1..ls, (N*Lj)Ij }
+ Ks ({ SUM j=1..ls, ((H*Hj)^Ns)Ij Fr(Lj*Hj,Ks,Ns)Ij} + 
Fr(N*V,Ks,Ns)Ir})
+ (1.0 - Kx)Ft (N*V,(1.0-Ks),Ns)TfIt

Она плотная и на самом деле имеет некоторые опечатки (например, Kx и Ft), так что я исправил это:

I = Ka * Ia
+ Kd * [sum for each light: (N . L) * Il]
+ Ks * [sum for each light: ((R . V) ^ Ps) * Fl * Il]
+ Ks * Fr * Ir
+ Kt * (1 - Ks) * Ft * It

I := surface point's color
V := ray direction
P := surface point
N := surface normal
L := light's position - P
R := L - 2 * (N . L) * P
Ka := surface material's ambient coefficient
Kd := surface material's diffuse coefficient
Ks := surface material's specular coefficient
Ps := surface material's shininess
Kt := surface material's transmission coefficient
Ia := ambient light color
Il := light's color
Ir := reflected ray's color
It := transmitted ray's color
Fl := light's Fresnel coefficient
Fr := reflected Fresnel coefficient
Ft := transmitted Fresnel coefficient

Эта модель имеет для меня смысл, особенно после прочтения Освещение 101 - Зеркальное отражение Фонга - это хак, ориентированный на производительность, для отражающих источников света,поэтому естественно использовать один и тот же коэффициент для зеркальных бликов и отраженных лучей.

Есть еще одна вещь, которую я не понимаю. Если я не хочу беспокоиться о терминах Френеля, яможно установить Fl, Fr и Ft на 1. Однако если я хочу получить дополнительную точность, как бы я рассчитал их в терминах моих уже определенных переменных?

...