Как реально совместить освещение Фонга с диэлектрическим отражением / пропусканием Френеля?

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

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

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


person Remy    schedule 27.03.2012    source источник


Ответы (1)


Я сам нашел подходящую модель освещения в документации для файлов .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

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

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

person Remy    schedule 28.03.2012
comment
Что касается вашего последнего вопроса: насколько мне известно, вам нужен показатель преломления материала для расчета значений Френеля для отражения и пропускания. Также не то, что ссылка на Освещение 101 больше не доступна. Изменить: ссылка на документацию для файлов .mtl также больше не доступна. - person kleinfreund; 26.08.2016