вторник, 21 декабря 2010 г.

Решил узнать какого качества игру можно сделать на quad. Для того, чтобы не замахиваться на что-то огромное, было решено накидать пакмана. Да не простого — а золотого!

Идея:
Классический пакман, но в темноте. Пакман — солнышко, которое подзаряжается точечками и светит ярче. Солнышко освещает всё вокруг, но свет не проходит сквозь стены.

Реализация:
Сложности реализации дали о себе знать с первых минут разработки. Если с полом всё понятно — там normalmapping, то со светом всё сложнее на порядок. Как делался свет. Итак, для затенения мы накладываем через умножение (multiply) карту освещенности. В карту освещенности должны попасть светящиеся точки (они слегка мерцают), небольшая область в пару пикселей вокруг точек (эффект свечения) и, собственно, свет от солнышка. Свет от солнышка заслуживает отдельной большой статьи. Обмолвлюсь лишь, что рендеринг в данном случае 17-ти проходный. Да, да! Однако результат превосходит ожидания. Свет не проходит сквозь препятствия, угасает с дальностью и более того — рассеивается с дальностью.

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

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

  1. > Обмолвлюсь лишь, что рендеринг в данном случае 17-ти проходный.

    Ой.. а не проще было бы volume-методом отрендерить в stencil тень от стен, и потом отрисовать освещение со stencil-тестом?

    ОтветитьУдалить
  2. Поподробнее бы про метод... может линк есть почитать?

    ОтветитьУдалить
  3. Про стенсильные тени тут
    http://www.gamedev.ru/code/articles/?id=4201
    http://steps3d.narod.ru/tutorials/shadow-volumes-tutorial.html
    Метод не очень любят в 3д-графике, потому что много вычислений для теневого объёма и трудно сделать мягкие тени.

    В случае с 2д вычислений теневого объёма должно быть значительно меньше. Это, наверно, можно сделать за один рендер — рисуем в стенсил все стенки с шейдером вытягивания их от источника света. Но я дилетант и тут всё может быть не так просто :)

    ОтветитьУдалить
  4. Стенсильные тени дают слишком жесткий силуэт, не угасают с дальностью и т.п. Кроме того в 2д реализация будет другая всеравно :)

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