Ответ: [TrueHorror] - разработка
2mr.DIMAS
Гораздо лучше. 20 fps в нагруженной сцене (в начале) и 60 если отвернуться к решетке (на месте старта). В пол и потолок где-то 30.
По поводу производительности: по всей видимости с шейдерами теперь все в порядке - падение fps видимо из-за циклов в коде движка, когда ноды перебираешь или т. п.
По поводу zfighting'а: мне кажется это не zfighting (его раньше же небыло на той же геометрии). Скорей всего у тебя источник света пограничный то появляется, то пропадает, и из-за этого начинает мигать освещаемая поверхность.
По поводу алгоритма: проверять на попадание в кадр не стоит. Представь себе лампу которая над головой, или фонарик на каске - их не видно, но они должны освещать все что в кадре.
Вообще чтобы быстрее определять какие источники что освещают, нужно использовать octree например. Пока у тебя их нет, я могу предложить кешировать запись о статической геометрии в список каждого статического источника, если геометрия и источник не двигаются друг относительно друга, то обходить достаточно только список. Также можно ограничить источник по дальности - если объект далеко то сразу убираем его.
И еще о непопадании в кадр и octree (или quadtree, чего там у тебя будет). Вот например тени: представь себе что сзади камеры находится объект, за объектом источник света, а перед камерой стена. Свет от объекта сзади должен падать на стену спереди камеры, хотя сам объект не видно и по логике он должен отсекаться фрустумом. Здесь зависит от реализации тени, если это карта которая рендерится с камеры с позиции источника света, то тогда возможно все будет в порядке, потому что как раз во время рендера карты объект будет во фрустуме, но если ты строишь тень каким либо другим геометрическим способом то могут быть артефакты. Об этом нужно помнить при реализации подобных пространственных эффектов (лучи, тени и т. п.). Например такой артефакт был в Gothic3 - там правда не объект пропадал, а его анимация останавливалась, и когда чел бежал за игроком, его небыло видно, но была видно его тень и было видно что анимации нет.
И еще насчет деревьев: попробуй сначала BSP или даже еще проще - обрабатывай только текущее помещение и соседние, в которые есть открытый проход. Таким образом ты избежишь неприятностей которые я выше описал с octree, а также источникам света нужно будет обходить с проверкой только объекты в данных помещениях, а не по всей карте.
|