Информация об изменениях

Сообщение Re[8]: фотореалистичность - достигнута ! (Matrix Awakens, UE от 24.12.2021 9:20

Изменено 24.12.2021 9:25 Nikе

Re[8]: фотореалистичность - достигнута ! (Matrix Awakens, UE
Здравствуйте, Воронков Василий, Вы писали:

N>>Не совсем понял. Что значит делать освещение вручную? Дизайнеру рисовать? Впл расставлять?

N>>Чую недопонимание разницы между реалтаймовым и запеченным освещением.

ВВ>RTX позволяет получить красивую и правдоподобную картинку, не используя запеченного освещения вообще.

Чтобы было понятно — я типа гуру графики вообще и рейтрейсинга в частности.
Нет, это не так.

ВВ>Если нужна аналогичная красота от более примитивной системы реалтаймового освещения большую часть световых эффектов приходится "запекать".

ВВ>Что мы и видим в большинстве игр, претендующих на эффектность картинки. Разве не так? Мне всегда казалось, что создать результат очень близкий к RTX, можно и без него.

Запекание (лайтмапы) это самый древний способ, при нём мы никак не ограничены в количестве лучей, но динамики нет.
По поводу рейтрейсинга у неспециалистов часто есть существенное недопонимание, важны не сами лучи, а их количество. 10-20 миллиардов лучей, которые обеспечивает RTX это хорошо, но ни о чём, для реалтайма. Это если говорить про методы рендеринга типичные для фильмов/мутиков (метод монте-карло). Типичный оффлайновый рендер фигачит кучу лучей из камеры или источника света или от обоих, при каждом пересечении генерируется пачка новых (мин.50 новых). И так несколько раз. Получается, по минимуму, 10000 лучей на точку, точек у нас 2 ляма (для FullHD), итого 20 миллиардов на кадр. + вычислительные мощности на материалы и прочее.
Есть попытки уменьшить количество лучей с интеллектуальным фильтрованием (https://developer.nvidia.com/nvidia-rt-denoiser), но это самое фильтрование выглядит мерзотно: всё становится пластиковым, ну и шумы всё-равно заметны. Надо заметить, что фильтры всё-равно активно используются для многих целей, но не настолько в лоб.
Реалтаймовая графика ещё очень долго будет алгоритмически очень сложной. Приходится разбивать рендер на логические блоки и каждый оптимизировать по своему.
По простому всё делится на прямые и вторичные эффекты. Прямые: камера, прямые тени, отражения с различимыми деталями (чаще всего от плоских поверхностей), в общем — всё когерентное, где хорошо видны детали.
Вторичные — это прежде всего global illumination. Как раз то самое вторичное освещение, то что отличает реальность от игрового рендера. В играх его никто нормально никогда не считал, очень дорого. Лайтмапы — самый древний способ, могут быть очень качественные, но статичные.
Есть очень убогий и отратительный метод для локальных световых эффектов — Ambient occlusion. Его можно делать рейтрейсингом, можно считать прямо по свежеотрендеренной сцене (SSAO), всякими вокселями. На мой взгляд, разница не велика — он так и так отвратителен, зато SSAO довольно быстрый и простой, хотя даже мощные телефоны его еле тянут и там он убивает батарейку из-за огромного bandwidth.
Для собственно global illumination давно было придумано море алгоритмов, достаточно эффективных:
Radiosity с кучей вариаций. Вполне себе реалтаймовый.
Light Propagation Volumes (https://ericpolman.com/2016/06/28/light-propagation-volumes/) — тоже имеет кучу реализаций.
Screen space — очень убого, зато быстро.

Проблема рейтрейсинга — в крайне низкой эффективности. Каждый луч при обходе дерева обращается к фактически случайным ячейкам памяти, бегая по десяткам мегабайт: оно фигово кешируемо. Каждому лучу нужно проверить пересечение с несколькими десятками примитивов AS, а затем с несколькими десятками треугольников.
Это очень долго по сравнению с любым другим методом. Кроме того, один луч — это материальная точка, место его попадания практически случайно. Отклонение на малую долю градуса может дать совсем другие показания: поэтому приходится работать со статистикой, кидать много лучей — сотня это ещё не самое большое количество.

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

Вот тут красиво стадии показаны, можно найти статью прямо с описанием всех алгоритмов.
https://www.youtube.com/watch?v=J0raLnXvHl0

Смысл в том, что рейтрейсинг пока не вышел на производительность достаточную для заметного улучшения качества — даже в рекламных материалах маркетологам либо приходится жульничать (отключая эффекты в безрейтрейсных вариантах), либо пользователи 50х50 не могут понять, где рейтрейсинг включён.

P.S.
Я в этом году подал патент о том, как ускорить рейтрейсинг в 100 раз, с целью сделать что-то похожее на RTX на мобилах.
Re[8]: фотореалистичность - достигнута ! (Matrix Awakens, UE
Здравствуйте, Воронков Василий, Вы писали:

N>>Не совсем понял. Что значит делать освещение вручную? Дизайнеру рисовать? Впл расставлять?

N>>Чую недопонимание разницы между реалтаймовым и запеченным освещением.

ВВ>RTX позволяет получить красивую и правдоподобную картинку, не используя запеченного освещения вообще.

Чтобы было понятно — я типа гуру графики вообще и рейтрейсинга в частности.
Нет, это не так.

ВВ>Если нужна аналогичная красота от более примитивной системы реалтаймового освещения большую часть световых эффектов приходится "запекать".

ВВ>Что мы и видим в большинстве игр, претендующих на эффектность картинки. Разве не так? Мне всегда казалось, что создать результат очень близкий к RTX, можно и без него.

Запекание (лайтмапы) это самый древний способ, при нём мы никак не ограничены в количестве лучей, но динамики нет.
По поводу рейтрейсинга у неспециалистов часто есть существенное недопонимание, важны не сами лучи, а их количество. 10-20 миллиардов лучей, которые обеспечивает RTX это хорошо, но ни о чём, для реалтайма. Это если говорить про методы рендеринга типичные для фильмов/мутиков (метод монте-карло). Типичный оффлайновый рендер фигачит кучу лучей из камеры или источника света или от обоих, при каждом пересечении генерируется пачка новых (мин.50 новых). И так несколько раз. Получается, по минимуму, 10000 лучей на точку, точек у нас 2 ляма (для FullHD), итого 20 миллиардов на кадр. + вычислительные мощности на материалы и прочее.
Есть попытки уменьшить количество лучей с интеллектуальным фильтрованием (https://developer.nvidia.com/nvidia-rt-denoiser), но это самое фильтрование выглядит мерзотно: всё становится пластиковым, ну и шумы всё-равно заметны. Надо заметить, что фильтры всё-равно активно используются для многих целей, но не настолько в лоб.
Реалтаймовая графика ещё очень долго будет алгоритмически очень сложной. Приходится разбивать рендер на логические блоки и каждый оптимизировать по своему.
По простому всё делится на прямые и вторичные эффекты. Прямые: камера, прямые тени, отражения с различимыми деталями (чаще всего от плоских поверхностей), в общем — всё когерентное, где хорошо видны детали.
Вторичные — это прежде всего global illumination. Как раз то самое вторичное освещение, то что отличает реальность от игрового рендера. В играх его никто нормально никогда не считал, очень дорого. Лайтмапы — самый древний способ, могут быть очень качественные, но статичные.
Есть очень убогий и отратительный метод для локальных световых эффектов — Ambient occlusion. Его можно делать рейтрейсингом, можно считать прямо по свежеотрендеренной сцене (SSAO), всякими вокселями. На мой взгляд, разница не велика — он так и так отвратителен, зато SSAO довольно быстрый и простой, хотя даже мощные телефоны его еле тянут и там он убивает батарейку из-за огромного bandwidth.
Для собственно global illumination давно было придумано море алгоритмов, достаточно эффективных:
Radiosity с кучей вариаций. Вполне себе реалтаймовый.
Light Propagation Volumes (https://ericpolman.com/2016/06/28/light-propagation-volumes/) — тоже имеет кучу реализаций.
Screen space — очень убого, зато быстро.

Проблема рейтрейсинга — в крайне низкой эффективности. Каждый луч при обходе дерева обращается к фактически случайным ячейкам памяти, бегая по десяткам мегабайт: оно фигово кешируется (прямо скажем обычный MMU тут только вредит). Каждому лучу нужно проверить пересечение с несколькими десятками примитивов AS, а затем с несколькими десятками треугольников.
Это очень долго по сравнению с любым другим методом. Кроме того, один луч — это материальная точка, место его попадания практически случайно. Отклонение на малую долю градуса может дать совсем другие показания: поэтому приходится работать со статистикой, кидать много лучей — сотня это ещё не самое большое количество.

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

Вот тут красиво стадии показаны, можно найти статью прямо с описанием всех алгоритмов.
https://www.youtube.com/watch?v=J0raLnXvHl0

Смысл в том, что рейтрейсинг пока не вышел на производительность достаточную для заметного улучшения качества — даже в рекламных материалах маркетологам либо приходится жульничать (отключая эффекты в безрейтрейсных вариантах), либо пользователи 50х50 не могут понять, где рейтрейсинг включён.

P.S.
Я в этом году подал патент о том, как ускорить рейтрейсинг в 100 раз, с целью сделать что-то похожее на RTX на мобилах.