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


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


  • Если вектор освещения близок к нормали, L’x и L’y малы.
  • Если вектор освещения близок к касательной, L’x и L’y значительны.
  • Что, если L’z меньше нуля?
    • Свет на стороне, обратной к нормали
    • Приравняем его вклад к нулю
    • Реализация на TNT

      • Вычисления векторов и координат текстур  на хосте
      • Передаем коэффициент рассеяния как alpha

      • Можно использовать цвет вершины для передачи цвета диффузного рассеяния источника света

    • H0 и цвет поверхности берем из текстурного блока 0
    • H1 берем из текстурного блока 1 (та же самая текстура, но с другими координатами)
    • Используем расширение ARB_multitexture
    • Это расширение для комбайнов (точнее, речь идет о расширении NVIDIA_multitexture_combiners, поддерживаемом всеми карточками семейства TNT — прим. Дженса)
    • Реализация на TNT (продолжение)

       

      Первичная установка комбайна 0:

      • (1-T0a) + T1a - 0.5 (T0a означает "текстурный блок 0, альфа-канал" — прим. Дженса)

      • (T1a-T0a) отображается в диапазон (-1,1), но аппаратура сжимает его до (0,1)
      • Смещение на 0.5 балансирует потерю от сжатия (подумайте о применении масштабирования с коэффициентом 0.5, ведь можно использовать разные карты рельефа — прим. Дженса)

    • Цвет диффузного рассеяния источника света можно регулировать с помощью T0c
    • Установка RGB комбайна 1:

      • (T0c * C0a + T0c * Fda - 0.5 )*2

      • Смещение на 0.5 балансирует потерю от сжатия
      • Умножение на 2 осветляет изображение

      Конец теории ( Наложение микрорельефа методом тиснения )

       

      Мы у себя делаем все не совсем так, как это предложено для TNT, поскольку хотим, чтобы наша программа работала на любом железе, однако здесь есть пара-тройка ценных идей. Во-первых, то, что на большинстве карточек наложение рельефа — многопроходная операция (хотя это не относится к семейству TNT, где рельефность можно реализовать за один двухтекстурный проход). Сейчас вы, наверное, оценили, какая отличная вещь — возможность мультитекстурирования. Теперь мы напишем 3-проходный немультитекстурный алгоритм, который можно (и мы это сделаем) реализовать за два мультитекстурных прохода.




      - Начало -  - Назад -  - Вперед -