2013-04-28 1 views
0

В этой статье о сознании кода, http://www.codermind.com/articles/Raytracer-in-C++-Depth-of-field-Fresnel-blobs.html, часть о отражении/преломлении имеет несколько случаев, когда она проверяет, передавать или отражать луч.Для рефракций/отражений лучей, не должен пропускать + отражения = 1?

Это говорит для rand_num в диапазоне от 0 до 1:

if(rand_num<=reflectance){ 
    //reflect a ray 
}else if(rand_num<=reflectance+transmittance){ 
    //transmit a ray through surface 
}else{ 
    //diffuse calculation 
} 

Я был под впечатлением, что коэффициент отражения + коэффициент пропускания = 1, так что другое заявление будет usesless. Каким должен быть коэффициент пропускания, если не 1-отражение?

+0

Есть четыре вещи, которые происходят с входящим светом: 1) Направленное отражение 2) диффузное отражение 3) поглощение 4) коэффициент пропускания – CodesInChaos

+0

Таким образом, я бы предположил, что отражение направления будет в случае отражения = 1,0f и передачи = 0,0f. Тогда коэффициент пропускания будет иметь вид передачи = 1,0f и коэффициент отражения = 0,0f. Итак, каковы два других случая? –

+0

Ссылка на codermind больше не работает. Интересно, что с ним случилось? –

ответ

0

Это в основном дает ответ на комментарий в коде:

Луч получить передаваемую, отраженное или диффузно отраженное. Физически последующие два являются одинаковыми, но в raytracing они управляются по-разному.

Первый производит блики и фактические отражения, как в зеркале, в то время как диффузная часть важна для поверхностей, таких как резина, которые очень сильно отличаются от зеркал.

+0

Я считаю, что. Мой вопрос в том, что если rand_num находится в диапазоне от 0 до 1 и всегда отражать + передавать = 1, то этот оператор else никогда не будет вызван. Rand_num должен быть меньше или равен отражению + передаче. –

+0

«Отражение» здесь относится конкретно к зеркальному (зеркальному) отражению. –

+0

Итак, когда вы говорите об отражении, вы имеете в виду коэффициент в brdf поверхности. Как кто-то может сказать, что любой отраженный луч необходимо умножить на эту константу «отражения». Но это отличается от расчетного коэффициента отражения от уравнений Френеля? –

1

В такой простой модели есть четыре вещи, которые происходят с входящим светом: 1) Направленное отражение 2) диффузное отражение 3) поглощение 4) коэффициент пропускания

Несколько (идеализированные) примеры:

  • Зеркало: только направлено отражение
  • Белый: только диффузное отражение
  • черный: только поглощение
  • Антибликовое стекло: только коэффициент пропускания

Абсорбция обрабатывается неявно, устанавливая сумму трех коэффициентов на значение, меньшее единицы.

На практике есть некоторые дополнительные эффекты, такие как отражение, которое приближается только в идеальном направлении со средним отклонением в зависимости от материала, материала, излучающего свет сам по себе, необычных эффектов отражения, которые направлены или меняют цвет. .