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

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

Вернуться   www.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 01.02.2015, 13:38   #1
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,569
Написано 544 полезных сообщений
(для 1,525 пользователей)
Восстановление позиции по глубине

Нашел тут статейку: https://mynameismjp.wordpress.com/20...-from-depth-3/

Там предлагается очень быстрый способ восстановления позиции из глубины. Тоесть в пиксельном шейдере вместо умножения на матрицу( 4 MADD ) и деления - всего 5 операций, будет только умножение и сложение ( 1 MADD ) - 1 операция. Вроде все просто, но как обычно возникают косяки на пустом месте, а именно: я заменил код из своих шейдеров на код из статьи( первый кусок кода ), свет рассчитывается но он перемещается вместе с камерой. Что за ботва? Может кто-нибудь делал по этой методе восстановление позиции? Так же есть про восстановление позиции здесь: http://habrahabr.ru/company/mailru/blog/248873/но опять же у меня свет перемещается вместе с камерой.

ps. думаю tirarex'у и pozitiffcat'у тоже пригодится этот способ.
__________________
Junior Tools Programmer at Larian Studios
ПеКа: AMD Ryzen 1700X 8@3.4 ГГц, 16 Гб ОЗУ,

NVIDIA GTX 960 4 Гб, SSD Samsung 960 EVO 500 Гб
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо mr.DIMAS за это полезное сообщение:
Mr_F_ (02.02.2015), Samodelkin (01.02.2015)
Старый 01.02.2015, 15:10   #2
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 25.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,407
Написано 5,238 полезных сообщений
(для 15,163 пользователей)
Ответ: Восстановление позиции по глубине

Блин, умножил позицию на матрицу (model-)view-proj — получил координаты на экране с глубиной.
Их же умножил на обратную матрицу (model-)view-proj — получил назад изначальные координаты.
Какие ещё проблемы? Я так делал, даже не думал, что кто-то будет на эту тему всё разжёвывать.
Если у тебя там что-то не так, значит не на те матрицы умножаешь, вот и всё.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 01.02.2015, 15:28   #3
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,569
Написано 544 полезных сообщений
(для 1,525 пользователей)
Ответ: Восстановление позиции по глубине

Ты вообще читал статью? Множить на invViewProj в пиксельном шейдере слишком жирно. Этот метод "в лоб" у меня работает хорошо - 120 фпс на средней сцене. Метод в статьях в первом посте дает 155 фпс, единственная проблема то что источник света перемещается вместе с камерой. 35 фпс никогда не бывают лишними.
__________________
Junior Tools Programmer at Larian Studios
ПеКа: AMD Ryzen 1700X 8@3.4 ГГц, 16 Гб ОЗУ,

NVIDIA GTX 960 4 Гб, SSD Samsung 960 EVO 500 Гб
(Offline)
 
Ответить с цитированием
Старый 01.02.2015, 16:03   #4
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 977
Написано 388 полезных сообщений
(для 630 пользователей)
Ответ: Восстановление позиции по глубине

Хмм.
Хорошие статьи, спс.
Ну я пока сам не прочитаю, я не смогу ответить на вопрос,
но есть одна догадка -- может быть это зависит от того в какиx координатах считается свет.
Например он может считаться во view space или даже в projection space и глубина восстанавливается для view или projection space.
А если свет считается во world space то видимо обратно восстановить до world space очень затратно и выше описанные методы ограничиваются view или projection space.
__________________
Config1: Windows 10 x64 / Linux Ubuntu Xenial x64 (Xfce-4); Default Resolution 1920x1080; Intel Core i7 930 @ 2.80GHz; DDR3 9GB Triple; AMD Radeon R9 290 4GB; SSD Ignition 2 120GB; HDD Seagate 1TB.
Config2: Linux Ubuntu Xenial x64 (Xfce-4); Default Resolution 1366x768; Intel Pentium Dual-Core T4400 @ 2.20GHz; DDR2 2GB; NVIDIA GeForce G105M; HDD WD 250GB.
(Offline)
 
Ответить с цитированием
Старый 02.02.2015, 10:08   #5
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,569
Написано 544 полезных сообщений
(для 1,525 пользователей)
Ответ: Восстановление позиции по глубине

Ок. Вопрос вдогонку: нормализация вектора обычно занимает три ассемблерные команды: DP3, RSQ, MUL. Можно запихнуть единичные нормали в кубмапу, и читать их оттуда по значению любого не нормализованного вектора. Вопрос такой, выборка из кубмапы быстрее чем простая нормализация?
__________________
Junior Tools Programmer at Larian Studios
ПеКа: AMD Ryzen 1700X 8@3.4 ГГц, 16 Гб ОЗУ,

NVIDIA GTX 960 4 Гб, SSD Samsung 960 EVO 500 Гб
(Offline)
 
Ответить с цитированием
Старый 02.02.2015, 10:10   #6
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,900
Написано 2,149 полезных сообщений
(для 5,781 пользователей)
Ответ: Восстановление позиции по глубине

Вопрос такой, выборка из кубмапы быстрее чем три операции?
на сегодняшнем железе очень вряд ли.
трюк тобой описанный применялся на заре шейдеров аля sm1_0, сейчас уже нигде не встречаю, арифметика стала в много раз шустрее выборок.
__________________
бложик
geom.io
твиттер
(Online)
 
Ответить с цитированием
Старый 02.02.2015, 10:15   #7
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,569
Написано 544 полезных сообщений
(для 1,525 пользователей)
Ответ: Восстановление позиции по глубине

ок, Mr_F_ а ты пробовал восстанавливать позицию из глубины по методе в первом посте? Вроде же в 5 раз быстрее восстановление получается
__________________
Junior Tools Programmer at Larian Studios
ПеКа: AMD Ryzen 1700X 8@3.4 ГГц, 16 Гб ОЗУ,

NVIDIA GTX 960 4 Гб, SSD Samsung 960 EVO 500 Гб
(Offline)
 
Ответить с цитированием
Старый 02.02.2015, 10:21   #8
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,900
Написано 2,149 полезных сообщений
(для 5,781 пользователей)
Ответ: Восстановление позиции по глубине

вроде пробовал, в крайзисе так же.
__________________
бложик
geom.io
твиттер
(Online)
 
Ответить с цитированием
Старый 02.02.2015, 10:33   #9
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,569
Написано 544 полезных сообщений
(для 1,525 пользователей)
Ответ: Восстановление позиции по глубине

ок, а сравнивал производительность разных подходов?
и если есть док от крайтека по восстановлению позиции то скинь ссыль пожалуйста.
__________________
Junior Tools Programmer at Larian Studios
ПеКа: AMD Ryzen 1700X 8@3.4 ГГц, 16 Гб ОЗУ,

NVIDIA GTX 960 4 Гб, SSD Samsung 960 EVO 500 Гб
(Offline)
 
Ответить с цитированием
Старый 02.02.2015, 10:57   #10
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,900
Написано 2,149 полезных сообщений
(для 5,781 пользователей)
Ответ: Восстановление позиции по глубине

ок, а сравнивал производительность разных подходов?
нет, если тебе не 100 раз в цикле это делать, там мизерная разница будет, я запаривался над разными подходами чтобы больше точности выжать только. И вот скажу, такой view space у меня точнее вышел, чем сохранять z/w и потом умножать на инверсную матрицу для восстановления.
__________________
бложик
geom.io
твиттер
(Online)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
mr.DIMAS (02.02.2015)
Старый 07.02.2015, 21:38   #11
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 977
Написано 388 полезных сообщений
(для 630 пользователей)
Ответ: Восстановление позиции по глубине

Сообщение от Mr_F_ Посмотреть сообщение
вроде пробовал, в крайзисе так же.
2mr.DIMAS Я вроде тоже делал как Crysis в том примере для SSAO, который в теме TrueHorror выкладывал -- можешь там посмотреть (если там есть код в комплекте =) ).

Кстати в той презенташке про Skyforge перевернули числа Z-buffer'а для лучшего распределения точности, так что в 24 бита можно рисовать дистанцию до 50км (передняя плоскость отсечения 0.5м от камеры). Кто-нибудь пробовал так? Нет ли Z-fighting'а с ближлежащими мелкими объектами?

Помница в презентации Crysis-3 Z-buffer был тож 24 бита, но как паковали я не нашел (вроде ничего особого). А вот Mr_F_ ещё где-то выкладывал презенташку Jast Cause 2 с хитрой упаковкой глубины, как там по сравнению со Skyforge, лучше не?
__________________
Config1: Windows 10 x64 / Linux Ubuntu Xenial x64 (Xfce-4); Default Resolution 1920x1080; Intel Core i7 930 @ 2.80GHz; DDR3 9GB Triple; AMD Radeon R9 290 4GB; SSD Ignition 2 120GB; HDD Seagate 1TB.
Config2: Linux Ubuntu Xenial x64 (Xfce-4); Default Resolution 1366x768; Intel Pentium Dual-Core T4400 @ 2.20GHz; DDR2 2GB; NVIDIA GeForce G105M; HDD WD 250GB.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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