Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Проекты > Проекты C++

Ответ
 
Опции темы
Старый 03.03.2015, 01:26   #811
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: [TrueHorror] - разработка

4) Рисуем квад освещения, пиксельный шейдер проходит только по фрагментам прошедшим тест трафарета
а почему тут ту же сферку не рисовать?
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 03.03.2015, 01:31   #812
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

Возможно кодом будет понятнее о чем я.
    
for( auto pLight : g_pointLightList ) {
        if( g_camera->frustum.IsSphereInside( pLight->GetRealPosition(), pLight->GetRadius() ) && pLight->IsVisible() ) {
            gpDevice->SetRenderState( D3DRS_COLORWRITEENABLE, 0x00000000 );
            gpDevice->SetRenderState( D3DRS_STENCILFUNC, D3DCMP_ALWAYS );
            gpDevice->SetRenderState( D3DRS_STENCILPASS, D3DSTENCILOP_KEEP );

            RenderIcosphereIntoStencilBuffer( pLight );

            mPointLightShader->SetLight( g_camera->invViewProjection, pLight );

            mFullscreenQuad->Bind();        

            gpDevice->SetRenderState( D3DRS_COLORWRITEENABLE, 0xFFFFFFFF );
            gpDevice->SetRenderState( D3DRS_STENCILFUNC, D3DCMP_NOTEQUAL );
            gpDevice->SetRenderState( D3DRS_STENCILPASS, D3DSTENCILOP_ZERO );
            // quad render
            mFullscreenQuad->Render();
        }
    }
Сферка жи помечает фрагменты реально попадающие в радиус действия света. Она рисуется только в трафарет.
__________________

(Offline)
 
Ответить с цитированием
Старый 03.03.2015, 02:00   #813
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: [TrueHorror] - разработка

Рисуй вторую такую же с шейдером света уже, без Z теста, но со стенсил тестом.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 03.03.2015, 10:45   #814
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

А как тогда быть с текстурными координатами? Они же используются для восстановления позиции по глубине.
__________________

(Offline)
 
Ответить с цитированием
Старый 03.03.2015, 10:58   #815
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: [TrueHorror] - разработка

ну так генерируешь на сфере такие же экранные координаты.
можешь конечную позицию из VS скопировать в PS, поделить на w и привести из -1 1 в 0 1, или же VPOS юзать.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 03.03.2015, 19:35   #816
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

Кароч я нашел тормозное место. Это смена шейдеров, для рендера сферки используется простейший шейдер ( трансформация и запись белого цвета ), затем я меняю шейдеры для рендера фулскрин квада и вот эта смена дает тормоза.
__________________

(Offline)
 
Ответить с цитированием
Старый 03.03.2015, 20:08   #817
Wegox
Бывалый
 
Аватар для Wegox
 
Регистрация: 17.12.2011
Сообщений: 862
Написано 443 полезных сообщений
(для 1,133 пользователей)
Ответ: [TrueHorror] - разработка

Сообщение от mr.DIMAS Посмотреть сообщение
Кароч я нашел тормозное место. Это смена шейдеров, для рендера сферки используется простейший шейдер ( трансформация и запись белого цвета ), затем я меняю шейдеры для рендера фулскрин квада и вот эта смена дает тормоза.
Я тоже.


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

Ещё что-то на первом уровне, память забивает.. тоже после сохранения и загрузки на первом уровне ФПС падает - да так, что лучше начать заново.
__________________
W.E.G.Ox.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
mr.DIMAS (03.03.2015)
Старый 03.03.2015, 21:35   #818
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

Как можно отсечь источники света полностью загороженные стенкой? Я что-то такое читал про occlusion query но вот не очень в этом разобрался. Че предложите?
__________________

(Offline)
 
Ответить с цитированием
Старый 03.03.2015, 21:57   #819
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: [TrueHorror] - разработка

occlusion query
забей на него, у него лаг непредсказуемый на несколько кадров, на цпу определяй.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 03.03.2015, 22:00   #820
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

Подкинешь идей?
__________________

(Offline)
 
Ответить с цитированием
Старый 03.03.2015, 22:22   #821
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: [TrueHorror] - разработка

ну самое самое тупое - обозначить из какой комнаты (любого конвекса) какую другую видно - не рисовать остальные.
чуть менее тупо - можно поставить порталы (хотя бы в форме прямоугольников), проводить доп фрустум от камеры через рёбра портала и отсекать всё что не попало в соседней комнате.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 04.03.2015, 01:30   #822
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: [TrueHorror] - разработка

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

Насчёт света: распространение света и теней вещь не предсказуемая. Вот пример, источник света сзади игрока и должен отсекаться, однако вместе с этим и пропадает тень от игрока, которая должна падать впереди игрока и её должно быть видно. Например у тебя при входе в шахту резко меняется освещение потому что отсекается свет идущий от прожектора на входе. Короче я бы лучше отсечение делал более ручным, в редакторе, с помощью дизайнера.
(Offline)
 
Ответить с цитированием
Старый 05.03.2015, 13:25   #823
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

Может вместо смены шейдеров сделать ветвление? Например как это делают для материалов -- записывают индекс материала в гбуффер и затем выполняют нужный для этого материала код из общего шейдера.
Кароч ветвление делать не нужно. Если убрать запись цвета (gpDevice->SetRenderState( D3DRS_COLORWRITEENABLE, 0x00000000 ); ) то пиксельный шейдер не выполняется, следовательно можно не менять пиксельный шейдер( оставить активным шейдер света ) - я понял это исходя из замеров производительности: 70 источников света в кадре без записи цвета при рендере в трафарет - 64 фпс, с записью цвета 28 фпс. Так что одну проблему я убрал, но блин все равно у меня прирост фпс вообще мизерный - 5-7 к\с. Попробую еще рисовать сферку вместо квада, как предложил Mr_F_.

upd. Разве блендинг выполняется для фрагментов не прошедших тест трафарета?
__________________

(Offline)
 
Ответить с цитированием
Старый 05.03.2015, 14:10   #824
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: [TrueHorror] - разработка

upd. Разве блендинг выполняется для фрагментов не прошедших тест трафарета?
нет, но сами пиксели этим трафаретом надо тестить, что тоже не абсолютно бесплатно.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 05.03.2015, 14:28   #825
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

Какой-то бред. Если источник света загорожен чем-либо, то по идее ограничивающая сферка не проходит тест глубины и соответственно не проходится тест трафарета, и никакие фрагменты не посылаются на блендинг. Но у меня почему-то это не прокатывает. Блин что я делаю не так?
__________________

(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com