Временное решение

топ 100 блогов stokesequation23.11.2019

Вчера отчитал последнюю в этом году лекцию в МГУ, для ВМКшников.

Временное решение

Читал про графоуни и грязные хаки, с графоуни связанные. Хотя народ там в математике более чем прошаренный, старался рассказывать все на словах и картиночках, так как нагромождение матриц трансформации, упаковка констант в беззнаковые целые и прочий ужас — вовсе не то, за что я графику полюбил.

Вчера под конец лекции рассказал про технологию, которая называется "темпоральная репроекция".

Суть такова: вообще говоря, почти все то, что у нас рисуется в текущем кадре, уже было в предыдущем. Что-то сдвинулось и переместилось, камера повернулась - но добрых процентов 90 того, что было на прошлом кадре, попадает в кадр и сейчас. В том же виде.

А если ничего не сдвинулось и не поменялось, так вообще все 100%. Ну и это сохранение информации надо бы как-то использовать, чтобы можно было прилично так сэкономить на вычислениях.

Для этого мы, для начала, сохраняем предыдущий кадр, так как он нам пригодится.

Во-вторых, во время рисования следующего кадра мы в каждой точке проводим нехитрую операцию: берём мировую позицию только что нарисованной точки и проецируем её на предыдущий кадр. Получая экранную позицию нашей точки на предыдущем кадре. И из сохраненного предыдущего кадра берем цвет из этой экранной позиции.

Временное решение
Зелёная точка присутствует на обоих кадрах, мы всего лишь восстанавливаем ее позицию на предыдущем кадре

Далее мы смешиваем тот цвет, который мы вычислили для текущего кадра, с цветом, который мы вычислили на предыдущем. В пропорциях 90/10. Где 90% — это доля предыдущего кадра. И проделываем все эти операции в каждой точке для каждого пикселя.

Почему так много? Потому что в предыдущем кадре тоже замешано 10% от него, и 90 процентов от пред-предыдущего. И так далее, и так далее, рекуррентно и на бесконечность, в прошлое.

К слову говоря, от рисования текущего кадра нас это не избавляет никак. Репроекция может не получиться - так как на предыдущем кадре эта точка может оказаться за пределами экрана, закрытой другим объектом или еще какой-то кракозяброй. И в этих точках мы будем вынуждены использовать все 100% с текущего кадра. Тогда зачем нам нужна эта технология?

Временное решение

Вот тут точки не совпадают, поэтому использовать в ней информацию с предыдущего кадра нельзя

А затем, что мы можем рисовать текущий кадр с куда меньшей тщательностью.

Например, при вычислении отражений от шероховатых поверхностей надо выполнить многие десятки трассировок в разных случайных направлениях. Каждый кадр. А каждая трассировка — это очень и очень дорого.

Временное решение
Получение таких "размазанных" отражений от шероховатого пола возможно только благодаря большому числу трассировок

Но - рррраз! - на помощь приходит темпоральная репроекция. И мы на каждом кадре делаем не 30 трассировок на точку, а всего лишь 5. В случайных направлениях. На следующем кадре мы делаем их тоже 5, но уже в других направлениях. И на следующем. И на следующем.

Соотношение 10/90 позволяет эффективно аккумулировать изображения из 6 кадров. Поэтому на итоговой картинке благодаря репроекции отражения будут выглядеть так, будто они получены 30 трассировками. В то время как в реальности они обходятся в 6 раз дешевле.

То же самое проделывается для расчета рассеянного освещения. Для расчета Global Illumination. Для сглаживания теней. Для сглаживания всей картинки в целом. Для всего почти. А для того, для чего репроекция не используется, надо придумать, как использовать. Потому что очень уж эффективно.

И все благодаря технологии, вся суть которой заключена в одной простой математической операции.

Правда, к ней потом добавляется чёртова прорва подпорок и костылей, которая позволяет ей работать с движущимися, анимированными и прочими объектами, а также не порождать целое семейство темпоральных багов.

Но это уже совсем другая история.

Оставить комментарий

Архив записей в блогах:
А не портировать ли мне BolgenOS на свой HTC Diamond . Нафига мне всякий там буржуйский Android, ...
Не знал. Это не о «кухаркиных детях» закон: Указ Президиума Верховного Совета СССР от 28 декабря 1940 года «Об ответственности учащихся ремесленных, железнодорожных училищ и школ ФЗО за нарушение дисциплины и за самовольный уход из училища (школы)» ...
Замуж за мужчину с ребенком К своим 30 годам я полностью разочаровалась в ...
...
А вот вам загадка ( на ночь ): Зашла сегодня к нам одна няня. Пригнали её купить 10 летнему мальчику девайс. Ассортимент наш здесь: http://kizlyar.kiev.ua/catalog/ если вы у нас не были. Предмет предварительно был согласован с родителями. Есть предположения? :) ...