Народный учебник по OpenGL


Урок 22. Наложение микрорельефа - часть 14


  • Если рельеф выглядит хорошо, используйте его!
  • Расчет рассеяния света

     

    C=(L*N) x Dl x Dm

    • L — вектор освещения
    • N — вектор нормали
    • Dl — цвет падающего света
    • Dm — цвет рассеяния материала
    • При наложении микрорельефа попиксельно меняется N
    • При наложении микрорельефа методом тиснения используется аппроксимация (L*N)

    Аппроксимация коэффициента рассеяния L*N

     

    В текстурной карте содержится поле высот

     

    • [0,1] — диапазон значений, принимаемых функцией рельефности
    • Первая производная определяет величину уклона m (материала) в данной точке (Заметьте, что m — чисто одномерная величина. Считайте, что m — это оценка grad(s,t) (градиента) в данной точке — прим. Дженса)
    • m увеличивает/уменьшает базовый коэффициент рассеяния Fd
    • (Fd+m) приближенно определяет (L*N) для каждого пикселя

     

    Приближенное вычисление производной

     

    Используется приближенное вычисление производной

    • Берется высота H0 в точке (s,t)
    • Определяется высота H1 в точке, слегка сдвинутой в направлении источника света, (s+ds,t+dt)
    • Исходная высота H0 вычитается из возмущенной высоты H1
    • Разница является оценкой мгновенного угла наклона m=H1-H0

    Вычисление рельефа

     

     

    1) Исходный рельеф (H0).

     

     

    2) На исходный рельеф (H0) накладывается другой, (H1), слегка сдвинутый в направлении источника света.

     

     

    3) Из второго вычитается первый (H0-H1). Появляются освещенные (B, bright) и затемненные (D, dark) участки.

     

     

    Вычисление освещенности

     

    Вычисляется цвет фрагмента Cf

    • Cf = (L*N) x Dl x Dm
    • (L*N) ~ (Fd + (H1-H0))
    • Dm x Dl закодировано в текстуре поверхности Ct.

    • Если хватит соображения, можно управлять Dl по отдельности (мы управляем им, пользуясь освещением OpenGL — прим. Дженса)

  • Cf = (Fd + (H0-H1)) x Ct
  • И все? Так просто!

     

    Нет, мы еще не закончили. Мы должны: