forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты C++ (http://forum.boolean.name/forumdisplay.php?f=56)
-   -   [TrueHorror] - разработка (http://forum.boolean.name/showthread.php?t=17293)

Mr_F_ 05.03.2015 14:40

Ответ: [TrueHorror] - разработка
 
а как ты определил, что посылается на блендинг?

mr.DIMAS 05.03.2015 14:46

Ответ: [TrueHorror] - разработка
 
че? я говорю о том что если ограничивающая сфера не пройдет z тест, то никаких фрагментов фулскрин квада не отрисуется. а у меня почему то все равно производительность падает, даже если источник света загорожен. наверное все таки попробую occlusion query

Mr_F_ 05.03.2015 14:56

Ответ: [TrueHorror] - разработка
 
ну так говорю, даже если блендинга нет, все равно куча фулскрин тестов всех пикселей квада об стенсил буфер идёт йопт.

mr.DIMAS 05.03.2015 15:04

Ответ: [TrueHorror] - разработка
 
ну таки что делать? порталы я юзать не хочу, там нужно карту вручную разбивать

неужели используя occlusion query я не буду в выигрыше? им нужно затестить только сферы ограничивающие

Mr_F_ 05.03.2015 15:17

Ответ: [TrueHorror] - разработка
 
Цитата:

Попробую еще рисовать сферку вместо квада, как предложил Mr_F_.
вот это сделай и ок будет.
а если не будет, то в любом случае не рекомендую query, результат может приходить иногда через 1, а иногда и через все 15 кадров.
с такими опозданиями что ты будешь делать? лайты будут запоздало появляться.

mr.DIMAS 06.03.2015 12:40

Ответ: [TrueHorror] - разработка
 
Кароч не ок. фпс почти не увеличился, он также проваливается даже когда свет загорожен стенкой. хуита кароч, даже не смотря на то что серьезно уменьшилось число фрагментов проходящих через трафарет, все равно фпс проваливается. я в пичали.

Mr_F_ 06.03.2015 13:25

Ответ: [TrueHorror] - разработка
 
хм, странно, в общем тут уже надо в PIXе смотреть детально что происходит.
ты левел собираешь из каких-то модулей (типа кусок пещеры прямой, кусок с поворотом) или просто полигоны тянешь? на основе модулей можно было бы автоматом порталы сгенерить.

mr.DIMAS 06.03.2015 14:35

Ответ: [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

Цитата:

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

Mr_F_ 06.03.2015 15:44

Ответ: [TrueHorror] - разработка
 
Цитата:

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

mr.DIMAS 06.03.2015 15:50

Ответ: [TrueHorror] - разработка
 
Цитата:

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

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

mr.DIMAS 06.03.2015 21:49

Ответ: [TrueHorror] - разработка
 
В общем сделал кэширование, работает хорошо. Опишу алгоритм:
При перемещении камеры строим ее путь - просто добавляем точки через равные промежутки, попутно проверяя наличие уже существующих точек рядом - таким образом на пути следования камеры образуется регулярная(с равным шагом ) сетка из точек, а заодно находим ближайшую существующую точку к камере. При рендере стартуем оклюжен, и при помощи него формируем список источников света видимых из данной точки. Есть одна очень досаждающая особенность оклюжена для света, если ограничивающая сфера пройдет сквозь стенку, то свет не отрисуется, потому что никакие фрагменты сферы не были отрисованы - решается это отрисовкой сферы 1/4 размера исходной.

Пробовал записать видео, но фрапс лочит фпс и поэтому производительность надо щупать самому. Код можно глянуть на гитхабе в DeferredRenderer.cpp и Camera.cpp

У меня средний фпс не опускается ниже 105 к\с( 2560х1440 ). без этого метода фпс иногда( когда много источников света в далеке за стеной ) проваливается до 57 к\с. Также убрана задержка оклюжена.

mr.DIMAS 08.03.2015 03:12

Ответ: [TrueHorror] - разработка
 
Вложений: 2
А тем временем я пилю новый уровень с гермодверями и лабиринтами - канализация. АХТУНГ! На скринах нет графония, у вас может произойти кровавое слезотечение от следующих скриншотов :-D.




Двери открываются кнопками на стене. По началу хотел сделать вентили( типа крутишь и дверь поднимается\опускается ), но словил нехилую попоболь с осями вращения вентилей, так что сделал кнопками.

Samodelkin 08.03.2015 04:24

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 293932)
По началу хотел сделать вентили( типа крутишь и дверь поднимается\опускается ), но словил нехилую попоболь с осями вращения вентилей, так что сделал кнопками.

Ещё можно рычагами как у домкрата или инвалидной коляски.

Nex 08.03.2015 06:50

Ответ: [TrueHorror] - разработка
 
Твоя игра уже в сталкера/метро 2033 превращается. :)

Randomize 08.03.2015 07:46

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от Nex (Сообщение 293935)
Твоя игра уже в сталкера/метро 2033 превращается. :)

Дак и хорошо же


Часовой пояс GMT +4, время: 18:17.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot