Восстановление позиции по глубине
Нашел тут статейку: https://mynameismjp.wordpress.com/20...-from-depth-3/
Там предлагается очень быстрый способ восстановления позиции из глубины. Тоесть в пиксельном шейдере вместо умножения на матрицу( 4 MADD ) и деления - всего 5 операций, будет только умножение и сложение ( 1 MADD ) - 1 операция. Вроде все просто, но как обычно возникают косяки на пустом месте, а именно: я заменил код из своих шейдеров на код из статьи( первый кусок кода ), свет рассчитывается но он перемещается вместе с камерой. Что за ботва? Может кто-нибудь делал по этой методе восстановление позиции? Так же есть про восстановление позиции здесь: http://habrahabr.ru/company/mailru/blog/248873/но опять же у меня свет перемещается вместе с камерой. ps. думаю tirarex'у и pozitiffcat'у тоже пригодится этот способ. |
Ответ: Восстановление позиции по глубине
Блин, умножил позицию на матрицу (model-)view-proj — получил координаты на экране с глубиной.
Их же умножил на обратную матрицу (model-)view-proj — получил назад изначальные координаты. Какие ещё проблемы? Я так делал, даже не думал, что кто-то будет на эту тему всё разжёвывать. Если у тебя там что-то не так, значит не на те матрицы умножаешь, вот и всё. |
Ответ: Восстановление позиции по глубине
Ты вообще читал статью? Множить на invViewProj в пиксельном шейдере слишком жирно. Этот метод "в лоб" у меня работает хорошо - 120 фпс на средней сцене. Метод в статьях в первом посте дает 155 фпс, единственная проблема то что источник света перемещается вместе с камерой. 35 фпс никогда не бывают лишними.
|
Ответ: Восстановление позиции по глубине
Хмм.
Хорошие статьи, спс. Ну я пока сам не прочитаю, я не смогу ответить на вопрос, но есть одна догадка -- может быть это зависит от того в какиx координатах считается свет. Например он может считаться во view space или даже в projection space и глубина восстанавливается для view или projection space. А если свет считается во world space то видимо обратно восстановить до world space очень затратно и выше описанные методы ограничиваются view или projection space. |
Ответ: Восстановление позиции по глубине
Ок. Вопрос вдогонку: нормализация вектора обычно занимает три ассемблерные команды: DP3, RSQ, MUL. Можно запихнуть единичные нормали в кубмапу, и читать их оттуда по значению любого не нормализованного вектора. Вопрос такой, выборка из кубмапы быстрее чем простая нормализация?
|
Ответ: Восстановление позиции по глубине
Цитата:
трюк тобой описанный применялся на заре шейдеров аля sm1_0, сейчас уже нигде не встречаю, арифметика стала в много раз шустрее выборок. |
Ответ: Восстановление позиции по глубине
ок, Mr_F_ а ты пробовал восстанавливать позицию из глубины по методе в первом посте? Вроде же в 5 раз быстрее восстановление получается
|
Ответ: Восстановление позиции по глубине
вроде пробовал, в крайзисе так же.
|
Ответ: Восстановление позиции по глубине
ок, а сравнивал производительность разных подходов?
и если есть док от крайтека по восстановлению позиции то скинь ссыль пожалуйста. |
Ответ: Восстановление позиции по глубине
Цитата:
|
Ответ: Восстановление позиции по глубине
Цитата:
Кстати в той презенташке про Skyforge перевернули числа Z-buffer'а для лучшего распределения точности, так что в 24 бита можно рисовать дистанцию до 50км (передняя плоскость отсечения 0.5м от камеры). Кто-нибудь пробовал так? Нет ли Z-fighting'а с ближлежащими мелкими объектами? Помница в презентации Crysis-3 Z-buffer был тож 24 бита, но как паковали я не нашел (вроде ничего особого). А вот Mr_F_ ещё где-то выкладывал презенташку Jast Cause 2 с хитрой упаковкой глубины, как там по сравнению со Skyforge, лучше не? |
Часовой пояс GMT +4, время: 20:51. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot