Показать сообщение отдельно
Старый 06.03.2015, 14:35   #833
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

Попробовал occlusion query. Результат порадовал, если свет(70 источников) загорожен стенкой, то фпс 130. Если эти же источники распределить в лабиринте ( чтоб все сразу не было видно ) то фпс в среднем 90, без оклюжена фпс 58. Я щитаю это вин.

upd. Проверил в игре, фпс не опускается ниже 100

Но без косяков никуда. Бывает такой момент, что сферка пролезает сквозь стену и соответственно на экране нет ее фрагментов и свет пропадает, что с этим делать я не знаю.

Код оклюжена такой:
    gpDevice->SetRenderState( D3DRS_STENCILENABLE, FALSE );
    gpDevice->SetRenderState( D3DRS_COLORWRITEENABLE, 0x00000000 );
    gpDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );    

    for( auto pLight : g_pointLightList ) {
        pLight->pQuery->Issue( D3DISSUE_BEGIN );
        RenderSphere( pLight );
        pLight->pQuery->Issue( D3DISSUE_END);
        pLight->trulyVisible = false;
    }

    gpDevice->SetRenderState( D3DRS_COLORWRITEENABLE, 0xFFFFFFFF );
    gpDevice->SetRenderState( D3DRS_STENCILENABLE, TRUE );
    
    int count = g_pointLightList.size(), readyCount = 0;
    do {
        for( auto pLight : g_pointLightList ) {
            DWORD pixelsVisible;
            if( !pLight->trulyVisible ) {
                if( pLight->pQuery->GetData( &pixelsVisible, sizeof( pixelsVisible ), D3DGETDATA_FLUSH ) == S_OK ) {
                    readyCount++;
                    if( pixelsVisible > 0 ) {                
                        pLight->trulyVisible = true;
                    }
                }
            }
        }
    } while( readyCount < count );
Для каждого света свой IDirect3DQuery9

ты левел собираешь из каких-то модулей (типа кусок пещеры прямой, кусок с поворотом) или просто полигоны тянешь?
просто полигоны
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Samodelkin (06.03.2015)