|
01.02.2015, 16:38
|
#1
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Восстановление позиции по глубине
Нашел тут статейку: https://mynameismjp.wordpress.com/20...-from-depth-3/
Там предлагается очень быстрый способ восстановления позиции из глубины. Тоесть в пиксельном шейдере вместо умножения на матрицу( 4 MADD ) и деления - всего 5 операций, будет только умножение и сложение ( 1 MADD ) - 1 операция. Вроде все просто, но как обычно возникают косяки на пустом месте, а именно: я заменил код из своих шейдеров на код из статьи( первый кусок кода ), свет рассчитывается но он перемещается вместе с камерой. Что за ботва? Может кто-нибудь делал по этой методе восстановление позиции? Так же есть про восстановление позиции здесь: http://habrahabr.ru/company/mailru/blog/248873/но опять же у меня свет перемещается вместе с камерой.
ps. думаю tirarex'у и pozitiffcat'у тоже пригодится этот способ.
__________________
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо mr.DIMAS за это полезное сообщение:
|
|
01.02.2015, 18:10
|
#2
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Восстановление позиции по глубине
Блин, умножил позицию на матрицу (model-)view-proj — получил координаты на экране с глубиной.
Их же умножил на обратную матрицу (model-)view-proj — получил назад изначальные координаты.
Какие ещё проблемы? Я так делал, даже не думал, что кто-то будет на эту тему всё разжёвывать.
Если у тебя там что-то не так, значит не на те матрицы умножаешь, вот и всё.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
01.02.2015, 18:28
|
#3
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: Восстановление позиции по глубине
Ты вообще читал статью? Множить на invViewProj в пиксельном шейдере слишком жирно. Этот метод "в лоб" у меня работает хорошо - 120 фпс на средней сцене. Метод в статьях в первом посте дает 155 фпс, единственная проблема то что источник света перемещается вместе с камерой. 35 фпс никогда не бывают лишними.
__________________
|
(Offline)
|
|
01.02.2015, 19:03
|
#4
|
Мастер
Регистрация: 12.01.2009
Сообщений: 980
Написано 389 полезных сообщений (для 632 пользователей)
|
Ответ: Восстановление позиции по глубине
Хмм.
Хорошие статьи, спс.
Ну я пока сам не прочитаю, я не смогу ответить на вопрос,
но есть одна догадка -- может быть это зависит от того в какиx координатах считается свет.
Например он может считаться во view space или даже в projection space и глубина восстанавливается для view или projection space.
А если свет считается во world space то видимо обратно восстановить до world space очень затратно и выше описанные методы ограничиваются view или projection space.
|
(Offline)
|
|
02.02.2015, 13:08
|
#5
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: Восстановление позиции по глубине
Ок. Вопрос вдогонку: нормализация вектора обычно занимает три ассемблерные команды: DP3, RSQ, MUL. Можно запихнуть единичные нормали в кубмапу, и читать их оттуда по значению любого не нормализованного вектора. Вопрос такой, выборка из кубмапы быстрее чем простая нормализация?
__________________
|
(Offline)
|
|
02.02.2015, 13:10
|
#6
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Восстановление позиции по глубине
Вопрос такой, выборка из кубмапы быстрее чем три операции?
|
на сегодняшнем железе очень вряд ли.
трюк тобой описанный применялся на заре шейдеров аля sm1_0, сейчас уже нигде не встречаю, арифметика стала в много раз шустрее выборок.
|
(Offline)
|
|
02.02.2015, 13:15
|
#7
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: Восстановление позиции по глубине
ок, Mr_F_ а ты пробовал восстанавливать позицию из глубины по методе в первом посте? Вроде же в 5 раз быстрее восстановление получается
__________________
|
(Offline)
|
|
02.02.2015, 13:21
|
#8
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Восстановление позиции по глубине
вроде пробовал, в крайзисе так же.
|
(Offline)
|
|
02.02.2015, 13:33
|
#9
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: Восстановление позиции по глубине
ок, а сравнивал производительность разных подходов?
и если есть док от крайтека по восстановлению позиции то скинь ссыль пожалуйста.
__________________
|
(Offline)
|
|
02.02.2015, 13:57
|
#10
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Восстановление позиции по глубине
ок, а сравнивал производительность разных подходов?
|
нет, если тебе не 100 раз в цикле это делать, там мизерная разница будет, я запаривался над разными подходами чтобы больше точности выжать только. И вот скажу, такой view space у меня точнее вышел, чем сохранять z/w и потом умножать на инверсную матрицу для восстановления.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
08.02.2015, 00:38
|
#11
|
Мастер
Регистрация: 12.01.2009
Сообщений: 980
Написано 389 полезных сообщений (для 632 пользователей)
|
Ответ: Восстановление позиции по глубине
Сообщение от 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, лучше не?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:54.
|