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.DIMAS 26.10.2014 00:15

Ответ: [TrueHorror] - разработка
 
Я немного упорот сегодня поэтому, все еще разок с начала.

Мои действия:
1) Создаю viewProjection матрицу для спота.
2) С ее помощью отрисовываю сцену - получаю шадоумапу.
3) При расчете освещения беру восстановленую позицию( по глубине ), и домножаю ее на матрицу viewProjection спота, делаю выборку из текстуры
...

С текстурой пятна все хорошо, с тенями нет - они вращаются при повороте камеры.

Можно объяснение для даунов пжлста.

Mr_F_ 26.10.2014 00:47

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

mr.DIMAS 26.10.2014 01:09

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

[УДАЛЕНО]

еще глянь код чтоли, в подписи у меня есть ссылка на репозиторий, файлы ShadowMap.h и DeferredRenderer.cpp

mr.DIMAS 26.10.2014 12:15

Ответ: [TrueHorror] - разработка
 
можешь просто объяснить последовательность действий? только поподробней

Mr_F_ 26.10.2014 13:15

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

mr.DIMAS 26.10.2014 14:47

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

Код:

        g_device->SetRenderState( D3DRS_ZENABLE, FALSE );
        g_device->SetRenderState( D3DRS_ZWRITEENABLE, FALSE );

а баги у меня были из-за

Код:

        g_device->SetRenderState( D3DRS_ZENABLE, TRUE );
        g_device->SetRenderState( D3DRS_ZWRITEENABLE, FALSE );

че делать? сортировать объекты по глубине? это как-то жирно, depth-peeling? кароч я постоянно натыкаюсь на z-буфер. >>:(

Mr_F_ 26.10.2014 17:08

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

я опять вляпался по-колено в z-буфер. чистить и записывать в него мне его нельзя, следовательно нормально шадоумапу я нарисовать не смогу
WTF? у шадоумапы отдельный збуфер, у сцены отдельный

mr.DIMAS 26.10.2014 17:14

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

http://msdn.microsoft.com/ru-ru/libr...=vs.85%29.aspx

тебе конечно все очевидно, мне не очень - ибо опыта и знаний маловато

Mr_F_ 26.10.2014 17:33

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

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

mr.DIMAS 26.10.2014 17:35

Ответ: [TrueHorror] - разработка
 
да пока-что такого же

mr.DIMAS 26.10.2014 18:15

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

Mr_F_ 26.10.2014 18:27

Ответ: [TrueHorror] - разработка
 
не понял вопрос.
суть такова:

1. рендеришь глубину относительно фонарика в РТ фонарика.
2. рендеришь свой гбуфер игровой камерой.
3. восстанавливаешь мировую позицию из глубины гбуфера.
4. множишь её на матрицу фонарика - получаешь глубину в том же пространстве, что у него и проекционные коорды в XY.
5. семплишь шадоумапу и сравниваешь глубину из неё с projectedCoords.z

mr.DIMAS 26.10.2014 18:48

Ответ: [TrueHorror] - разработка
 
Вложений: 1
Ну наконец-то я сделал это. Теперь PCF надо хотя бы 2х2. И оптимизацию по объектам которые рисуются в шадоумапу. А чтобы дырки в текстурах учитывались, нужно передать в шейдер, который пишет шадоумапу еще и диффуз текструру с альфаканалом и там отсекать через clip.

Mr_F_ 26.10.2014 19:07

Ответ: [TrueHorror] - разработка
 
Вложений: 1
как-то коряво выглядит, или меня глючит. мне кажется, в обозначенных местах должны быть тени, а их нет.

mr.DIMAS 26.10.2014 19:13

Ответ: [TrueHorror] - разработка
 
кубики немного подняты от земли, поэтому такой обман зрения


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

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