суббота, 8 октября 2011 г.

Повершинное освещение через шейдер.

В отличие от попиксельного освещения, где цвет рассчитывается для каждого видимого пикселя, в данном случае все рассчеты идут в вершинном шейдере. Выглядит это, безусловно, хуже, зато работает быстрее. При добавлении восьми источников света фпс упал с 200 до 160. Данный подход может быть использован при глобальном использовании шейдеров в программе в случае нахождения камеры на достаточно большом расстоянии от источников света, где "повершинность" освещения будет слабо заметна. Или, например, при текстурировании\освещении ландшафта на слабых конфигурациях, где попиксельное освещение с бампом может сильно осложнить жизнь.
Демка, cg_libs_2.0.0.12

4 комментария:

  1. Эм, что-то слабо видна повершинность. Судя по всему сетка регулярная, т.е. много полигонов на полу и потолке?

    ОтветитьУдалить
  2. Марцелл, выглядит интересно... из последних твоих постов можно сделать вывод, что делаешь какую-то indoor рпг! круть!

    perfect daemon, хм... давроде на полу чуть слева прям синий ромб виден... хотя могу ошибаться))

    ОтветитьУдалить
  3. perfect daemon, комната построена из девяти тайлов. Пол каждого тайла - 18 треугольников.
    Такое ощущение, что использование шейдерного повершинного освещение, визуально немного хуже обычной OGL лампочки.

    Lampogolovii, не, я пока просто прорабатываю шейдеры, которые могут потребоваться в будущем.
    Вообще в планах - переписать класс TGLBaseMesh под себя для более удобного использования шейдеров, выкинуть все ненужное оттуда.

    ОтветитьУдалить
  4. Марцелл, то бишь на пол более 150 полигонов. Неудивительно, что на полу довольно ровный для вершинного переход.

    Насчет обычного glLight - может ты опустил часть вычислений, присущих для fixed pipeline?

    ОтветитьУдалить