XaeroX (xaerox) wrote in ru_hlfx,
XaeroX
xaerox
ru_hlfx

Математика рулит

Итак, я использую в HLFX 0.6 попиксельное освещение. Для его расчета я взял вот такую формулу:



Вроде все правильно. Мы прибавляем к лайтмапе вклад диффузного бампа, сохраняем в текстуру, потом умножаем на неосвещенную сцену, и наконец прибавляем спекулярный бамп. Меня смущало вот что:
1. Требуется два прохода рендера (для лайтмапы и для неосвещенной сцены), и оба требуют привязки соответствующего шейдера (lightmap или unlit).
2. Приходилось два раза перебирать списки источников света. А это означает, что приходилось дважды рисовать теневые объемы и дважды выполнять ресурсоемкие операции по очистке стенсил-буфера.
3. Ну и копирование лайтмапы в текстуру - это означает остановку конвеера, что очень плохо.

На помощь пришло простейшее алгебраическое преобразование :) Только не говорите, что это очевидно - это мне теперь очевидно. А до этого я этого не осознавал. Формула теперь выглядит так:



Это добавило дополнительный проход для аттенуации (из-за ограничение на количество текстурных блоков), но она рисуется только в альфу и не сильно понижает fps. Зато все вышеперечисленные недостатки исчезли. FPS вырос в два раза :)
Потратил весь вечер на переписывание кода бампа (в который раз!), но оно того стоило %)
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 8 comments