Пользователь, дизайнер
0,0
рейтинг
16 апреля 2012 в 18:47

Разработка → Unbiased rendering (рендеринг без допущений)

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


Изображение отрендерено с помощью Maxwell Render.


Начнем с плохого
Когда на свет появились анбиасы, они были плохо оптимизированы, и железо было намного слабее. Даже четырехядерники были редкостью, по крайней мере на просторах СНГ. Многие дизайнеры отказались от подобных рендеров в виду того, что приходилось слишком долго ждать, пока уйдет шум с картинки. Многим профессионалам гораздо проще настроить глобальное освещение в Vray и сделать постобработку в Фотошопе в целом за 2-3 часа, чем нажать кнопку «render» в Maxwell и ждать приемлемого качества, скажем, 8 (и больше) часов. Иногда шум от какого-нибудь преломления не хотел сходить сутками.

И что в них хорошего?
Физически точные эффекты:
глобальное освещение, (в том числе и каустика);
глубина резкости (DOF) и шевеленка (Motion Blur);
подповерхностное рассеивание;
— некоторые рендеры поддерживают даже дисперсию;
— мягкие тени, реалистичные отражения, в общем, все как в жизни.

Все эти эффекты мы видим с первых секунд рендеринга.
Время рендеринга мало зависит от количества треугольников, это дает возможность не экономить ресурсы на их количестве.

Плюс к тому, железо на месте не стоит, производительность процессоров понемногу растет, и что более интересно, с развитием технологии вычислений общего назначения на видеокартах (GPGPU), начали появляться рендеры, задействующие для вычислений шейдерные ядра графических процессоров. Да и сами рендеры стали выдавать лучшую картинку при тех же вычислительных затратах.

Посмотрим же
как выглядит процесс рендеринга:

Core i5 2500 3.3GHz, Maxwell Render 2.6, 400k треугольников, собственноручно созданная в 3ds Max модель.

В основе анбиас рендеров лежит трассировка пути (Path Tracing) с различными видами оптимизации.
(Может, некоторые посетители заметили, что посты о трассировке пути на GPU я уже публиковал и публиковал. Но решил охватить тему глубже и обширнее.)
***

АЛГОРИТМ

Path Tracing (PT) основан на интегрировании методом Монте Карло. Чем больше семплов мы вычисляем на 1 пиксель (цвет пикселя = среднему арифметическому цветов всех семплов в этой точке) — тем точнее будет результат.
Семпл (sample) – это лучи, которые, пройдя путь отражений и преломлений через сцену (от камеры к источнику света) формирует цвет закрашиваемого пикселя в определенной точке изображения.
Превью изображения (шумную картинку) получаем практически сразу после вокселизации (о ней попозже).

Количество семплов не может быть бесконечным. “Идеальной” картинки никогда не будет, на это уйдет бесконечное количество времени. Рендеринг можно считать завершенным, если шум не различим на глаз. (обычно 1000 — 10000 семплов на пиксель, или 2-20 млрд семплов на изображение формата FullHD, в особых случаях — даже больше). Не следует, также, забывать, что небольшой шум придает изображению реалистичности.

Чем сложнее пути, которые проходят лучи — тем медленнее будет сходить шум.
Проще всего рендерить источники света. Лучи от источников света прямо попадают в камеру.
Сложнее рендерить объекты, освещенные прямыми лучами от источников света.
Еще сложнее — объекты, освещенные другим объектом, освещенным источником света.
И так далее. Эта особенность делает рендеринг интерьеров более затруднительным, чем экстерьеров, по той простой причине, что в интерьерах больше вычислительных ресурсов идет на расчет сложных путей.

Слева направо, прямой свет, первое отражение, второе отражение, третье отражение, результат.

Максимальная глубина отражений и преломлений в большинстве рендеров настраивается, и равно по умолчанию 8.
В некоторых (напр. Maxwell, Fry) глубина отражений ограничена гораздо большим числом, и зависит от параметров поверхностей. Например не имеет смысла вычислять большую глубину отражений для темно-коричневого стола, в то время, как для вычисления преломлений внутри бокала требуется увеличить глубину отражений.

Мягкие тени
Алгоритм получения мягких теней в PT достаточно прост. Луч, исходящий из камеры по направлению к точке на поверхности направляется в произвольное место (степень «произвольности» зависит от параметров данной поверхности) на источнике света.
В случае, если луч благополучно достиг источника света (зеленый) — то закрашиваем этот пиксель в нужный цвет.
В случае, если луч встретил на пути препятствие (красный) — то соответствующий пиксель на экране, не закрашивается.
(Кстати, алгоритм аналогичен рендерингу теней в рейтрейсинге)

Количество семплов на пиксель: слева — 1, справа — 5.
На примере для наглядности отсутствуют вторичные отражения.

Отражения и преломления
Отражательная функция зависит в первую очередь от степени шероховатости. А степень шероховатости определяется величиной погрешности отклонения от отраженного луча.


Если степень отклонения = 0 — то мы получаем зеркальное отражение. Если 1 (или 100%) — то падающий луч может отразиться в любом направлении. От 0 до 1 мы получаем отражение различной степени шероховатости.

Степень шероховатости поверхности (от 0 до 1).
Отражательная функция может быть более сложной (например, анизотропная поверхность).

Алгоритм шероховатости преломлений аналогичен отражениям, только луч проникает внутрь объекта, меняя свое направление в соответствии с показателем преломления этого объекта.

Материалы
Материалы, как правило, состоят из нескольких слоев.

Упрощенная модели поверхности пластика.
Во многих анбиас рендерах (Maxwell, Fry, Indigo, Lux) есть возможность рассчитывать настоящее подповерхностное рассеивание. Часть лучей проходит и рассеиваются под поверхностью, что вносит свою корректировку в результирующее изображение.

Глубина резкости
Известный в фотографии эффект достигается в PT практически без лишних вычислительных затрат.

***

МЕТОДЫ ОПТИМИЗАЦИИ

Importance Sampling
“Важностное семплирование” необходимо, чтобы компьютер не тратил вычислительные мощности на “чистые” области. Зачастую “прочищаются” поверхности, освещенные прямым светом, в то время как области, освещенные преломленным либо отраженным светом остаются шумными очень долго.

Области, выделенные красным имеют повышенный шум.

Bidirectional Path Tracing
PT в чистом виде используется очень редко. Вероятность того, что лучи, исходящие из виртуальной камеры достигнут источника очень мала и сильно зависит от размеров источника света. Чем меньше источник света, тем сложнее лучу “попасть” в него.
Алгоритм BDPT испускает лучи одновременно от источника света и из камеры. Это позволяет “безболезненно” вносить в сцену даже точечные источники света.
Используется в большинстве unbiased рендерах на GPU.

Metropolis Light Transport
Алгоритм мутирующих лучей MLT позволяет добиться меньшего шума при том же количестве семплов. Алгоритм сохраняет “узлы” (точки отражения) тех лучей, которые сильно повлияли на результирующее изображение, и производит незначительные отклонения от первоначального направления луча. Также, может вводить дополнительные узлы в путь луча. После, проверяет, насколько сильно повлияло изменение направления на интенсивность луча, и определяет, делать ли дальнейшие мутации этого луча.
Используется во всех unbiased рендерах, использующих CPU.
(Существует еще один метод оптимизации мутирующих лучей — Energy Redistribution Path Tracing, но его повсеместно не используют, и инфы о нем мало.)

Как это работает, можете посмотреть на ролике более наглядно (MLT vs BDPT).


Тут мы можем лицезреть эффективность каждого из методов оптимизаций рендеринга.


Voxelisation
Перед тем, как рендерить, вокселизация необходима для того, чтобы программа не проверяла все треугольники на возможность пересечения с одним лучем. Алгоритм отбрасывает те области пространства, треугольники в которых не могут быть на пути луча.
Объекты необходимо вокселизовать каждый раз, когда происходит изменение в геометрии, или добавляются новые объекты. Но в ней нет необходимости при перемещении камеры, изменении материалов объектов или окружения.
Кроме того в PT можно ввести алгоритм воксельного рендеринга.
***

GPU
В связи с тем, что современные графические процессоры справляются с float вычислениями гораздо лучше CPU, трассировку пути постепенно возлагают на их плечи.

Рендеринг в реальном времени
Энтузиасты уже начали создавать игры, использующие PT. Игру можете попробовать сами (использует OpenCL), если у Вас стоит достаточно мощная карточка (можете попробовать играть и на CPU, но будет сильно тормозить).


Автор следующего видео (рекомендую посмотреть его сайт) утверждает, что в скором будущем графический движок PT будет использоваться в играх. Рендерится это видео с помощью 2-х GTX580 в реальном времени.


Как использовать GPU
CUDA — программно-аппаратная архитектура позволяет компилировать C++ и проводить вычисления на видеокартах Nvidia.
ATIFirestream — то же самое, только для карточек ATI.
OpenCL — фреймворк для вычислений на всех OpenCL-совместимых (большинство современных CPU и GPU) устройствах.
DirectCompute — фреймворк от Microsoft, поддерживается видеокартами с поддержкой DX10, 11.
GLSL — шейдерный язык программирования, работает на всех графических ускорителях.

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

(GLSL демонстрирует скорость на уровне CUDA, почему же тогда не существует PT на GLSL?)
***

И ЕЩЕ НЕМНОГО

Наиболее известные анбиас рендеры:
Maxwell Render самый популярный unbiased рендер.
Indigo имеет GPU аналог IndigoRT.
FryRender рендер от RandomControl, имеет GPU аналог — Arion Render.
LuxRender опенсорс рендер, имеет поддержку GPU ускорения. На сайте также можно найти полностью GPU рендер — SmallLuxGPU.
Octane Render полностью GPU рендер.
iRay лежит в коробке с последними 3ds Max, использует CUDA и процессор.
Cycles Render (встроен в Blender, поддерживает как CUDA, так и OpenCL).

Популярное заблуждение
Существует популярное заблуждение, что V-Ray RT — анбиас рендер. Нет, это не так. Это рейтрейсинг с адаптивным антиалиасингом. Конечно, семплирование и рендеринг теней схож с алгоритмом path tracing. Но глобальное освещение и каустика остаются подвластны общим настройкам врея, и их надо настраивать по каждый конкретный случай.
Тоже самое касается Bunkspeed Hypershot и Luxeon Keyshot (ранних версий, до перехода на iRay).

Подведем итоги:
V-Ray олдфаги скажут, что всю красоту и так могут сделать в Вирее, и будут правы. Ведь рендер — это не главное. Главное — художник с головой, ровными ручками и творчеством в душе!
Но unbiased рендеры могут помочь нам не уделять внимания техническим настройкам рендера, а сосредоточиться на творческом процессе.
Станислав Марчевский @Marchevsky
карма
40,0
рейтинг 0,0
Пользователь, дизайнер
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (70)

  • +2
    Интересно, скандальный Unlimited Details — unbiased или нет?
    • +1
      Посмотрел ролик — нет ;)
      • +1
        Кстати, вопросец. То, что на всех видео картинка рендеринга в реал тайме какая-то «черноточечная» — это комп не успевает обсчитать те районы чтоли?
        • 0
          может лучи улетают неизвестно куда и непонятно, что нужно для них рисовать? Это просто моё предположение.
        • +2
          Просто еще не просчитаны лучи попадающие в эти точки.
        • +1
          черные точки — луч не добрался до источника света
          • 0
            Кажется логичным совмещать разные виды рендеринга; то есть раскрасить чёрные точки при помощи менее ресурсоёмкого рендеринга, пусть и менее точного. Интересно, это реализовано?
            • 0
              Извиняюсь, не прочёл последние комментарии.
        • 0
          количество лучей для каждого пикселя на экране должно быть достаточно большим. но т.к. ресурсы ограничены, то лучей кидается мало и как следствие падает точность расчета освещенности. чем больше лучей, тем менее заметны резкие перепады темных/светлых пикселей. если уже совсем маниакально много лучей посчитать, то получится правильная картинка, но и не real-time)
        • +9
          Теперь у кого видеокарта круче будет не кадров больше, а картинка четче, качественнее. )
          • +10
            Игры перестанут тормозить! но крайзис будет черным черным.
            • +2
              И вспышки выстрелов будут не подсвечивать, а только еще глубже погружать во мрак.
  • +6
    Всё это интересно, но я так и не понял — чем принципиально различаются path tracing и ray tracing?
    • 0
      Прямое освещение рассчитывается аналогично. Вся хитрость в непрямом освещении. В RT есть несколько вариантов расчета глобального освещения, но являются упрощенными моделями, и имеют много настроек.
      www.3dcenter.ru/tutors/read.php?sname=vray&articlealias=VRayGI
      Кроме того, не видел, в RT вторичную каустику.

      Различий вообще очень много, для этого надо написать статью про RT :)

      Могу только добавить, что чем сложнее сцена и больше эффектов — тем больше в производительности выигрывает именно РТ.
      • 0
        А что-то вот я тоже не пойму принципиального различия.
        И там и там трассируются лучи.
        И там, и там есть проверка на путь к свету.
        Вот развечто в PT эти проверки хитрее.

        Если в RT выкрутить параметр diffuse bounces до жопы — чем это будет отличаться от PT?
    • +2
      как то натыкался на неплохое описание/сравнение:
      Path tracing is a physically based rendering technique, based on ray tracing. Where regular recursive ray tracing (Whitted-style) is able to render reflections, refractions, and shadows, path tracing also handles diffuse reflections, indirect light, and even caustics. It does this by replacing the integrals involved in these effects by the expected value of a stochastic process: Soft shadows are calculated by sending several random rays to an area light source; anti-aliasing is calculated as the average of several random rays over the area of a pixel, and so on. Randomness means noise, and thus the resulting image quality depends on the number of samples. A path traced image converges over time, as more samples are added to previous frames.

      автор поста молодец, главное что бы не перешло в «RT vs PT» и в срезе «мне нравиться больше это»
  • +3
    > “Идеальной” картинки никогда не будет
    Ну смотря что считать идеальной. В глаз тоже за секунду прилетает определённое количество фотонов, которое можно посчитать. Другое дело, что оно очень велико, но не бесконечно :)
    • 0
      В природе имеет смысл «корпускулярно-волновой дуализм» чем выше частота излучения — тем больше свойства «корпускул», чем волн. Однако, в видимом спектре свет имеет волновые свойства. Если бы корпускулярные, то в темноте бы мы видели «Path Tracing на Pentium II» :)
      • +1
        Фотон может поглотиться лишь целиком. На сетчатке никаких волновых свойств уже нет. Так что в почти идеальной темноте именно так и будет. Только один фотон вносит слишком слабый вклад и почти неразличим, поэтому не будет ярких точек на чёрном фоне.
      • +1
        Для иллюстрации см. интерференцию электронов. На экране мы видим именно что индивидуальные точки, но большое количество складывается в интерференционную картину.

        Волновые свойства электрона проявляются в том, что его волновая функция (квадрат которой есть вероятность его обнаружения) интерферирует сама с собой. Это кажется очень странным, но, грубо говоря, волновые свойства проявляет вероятность, а не сам электрон.
      • 0
        Дробовой эффект от фотонов вполне можно заметить глазом. Глаз может после длительной адаптации к темноте различить поток где-то 10 фотонов/сек с длиной волны 555 нм (максимум чувствительности палочек). Здесь колебания плюс-минус фотон уже очень даже заметны.
  • +1
    Если говорить об игровом движке, то главный плюс технологии в том, что скорость рендера не зависит от детализации сцены, а зависит от разрешения и необходимого качества получаемого изображения, верно?
    Видео, демонстрирующее рендер на 2х видеокартах, впечатляет, шум даже добаляет реализма :)
    • +1
      Не зависит от количества треугольников, но зависит от количества источников освещения и количества поверхростей, от которых свет может отразиться, пока не доберется от источника освещения.
      • 0
        Зависит не сколько от количества источников света, сколько от сложности источника света. В инструкции к Максвеллу 1.7 рекомендовали делать источники света как можно проще. Сейчас не знаю, может алгоритм изменили, что-то оптимизировали. Как-нибудь проверю…
    • +1
      Мне вспомнился Silent Hill:4, там графика сама по себе с шумом. В хоррорах, шум вообще в тему, как и размытие при резком движении, правда не при всем игровом процессе, но в отдельных моментах точно =)
      • 0
        В первом Silent Hill туман был средством обхода ограниченных возможностей железа.
        И, вместе с тем, стал визитной карточкой серии.

        Кстати, поскольку история развивается по спирали, то можно себе представить:
        На PlayStation 5, характерной особенностью игр на каком-нибудь Unreal Engine 7 может быть будет «эффект киноленты» — такой вот шум и «зерно».

        (Если бы в ролике из топика картинка не замирала вместе с камерой, а продолжала «шуметь» — было бы то, что надо.)
        • 0
          Хм, спасибо за интересную инфу по SH, не задумывался об этом)

          Насчет замирания, да, пожалуй это второй минус рендера(первый, конечно же, 2 GTX580 для создания сцены, но думаю, скоро это будет уже не так страшно).
          • 0
            Это «минус» не рендера, а движка ;)
            Сделано, чтобы во время остановки дать возможность бОльшему количеству семплов прочистить экран от шума.
            В другой игре (Sfera) такой фичи нет.
            • 0
              Хм, а по моему в Sfera картинка тоже притормаживает при движении(особенно при резких), но там сцена не такая большая вроде(или окружение там тоже часть сцены??), поэтому не так и заметно.
              Ну и да, минус скорее текущей реализации движка =)
    • +1
      Соглашусь на счет эффекта реализма.
      Мне очень понравилось, когда останавливалось движение и через несколько мгновений сцена уже очень пходила на фотографию
    • +1
      Если оптимизировать уточнение картинки так, чтобы в центре она очищалась быстрее, наверное даже какая-то эмуляция восприятия человеком была бы…
  • +8
    Jlyf из сложный анимаций по времени рендера в максвелле.
    www.youtube.com/watch?v=gXbKFVD-rvo
    • 0
      Супер! Попугай — просто отпад))
    • 0
      не понимаю зачем мультяшной графике настоящие алгоритмы?
      • 0
        Она тут не мультяшная, а псевдопластелиновая.
      • 0
        ну как это зачем?
        вспомните все пиксаровские мультики.
        зацените шёлк на платьях в «Brave».
  • +4
    Возможно, покажусь банальным, но Хабр — Торт!

    Спасибо, статья очень понравилась. Пишите ещё.
    • 0
      В максвеле поссорились разработчики, и появился фрайрендер. Вроде слухи такие были. Что касается теорем это круто, но мои нервы не выдерживают и даже обычного Global illumination на средней сцене на 4 ядрах. Это просто невозможно при подгоне материалов. Про максвел вообще молчу. Он хорош конечно но без рендерфермы никуда.
      • 0
        Пачка из четырёх прошлогодних ати стоит не так дорого
        • 0
          это все не так просто. 4 видеокартами не обойтись.
          • 0
            Всё равно долго рендерит превьюхи?
          • 0
            10х GTX580 думаю, уже будет норм.
  • 0
    Ура! Наконец-то кто-то раскрывает тему 3D. Пишите еще, пожалуйста! :)
  • 0
    Существует еще один метод оптимизации мутирующих лучей — Energy Redistribution Path Tracing, но его повсеместно не используют, и инфы о нем мало
    неправда, достаточно, есть и на GPU, правда экспериментальное, не реализованое в промышленных рендерах
    на youtube есть примеры. задайте только в поиске.

    SmallGPU не полностью GPU
    вот здесь www.luxrender.net/wiki/Luxrender_and_OpenCL#SmallLuxGPU пишут:
    The idea is to use the GPGPUs only for ray intersections in order to minimize the amount of the brand new code to write and to not loose any of the functionality already available in Luxrender.
    то есть, пересечения лучей просчитываются на GPU, а просчитывае сцену сам Luxrender
    • 0
      Буду признателен доброму человеку, который напишет статью про ERPT ;)

      На одном из форумов нашел (и больше не могу найти), что ERPT делает рендер сильно зависимым от сложности геометрии, от чего основная фишка анбиасов (независимость от сложности геометрии) становится неактуальной.
  • 0
    Просто идея для игр — наверняка можно адекватно совместить «быстрый» полигональный ренедринг с «медленным» PT?
    • 0
      Вряд ли. Слишком уж разные технологии.
  • +1
    Ну ладно, тогда другая идея для игр:
    можно ли реализовать PT таким образом, чтобы низкодетальная картинка была не в крапинку, а размытыми пятнами, и уже по мере «разглядывания» детализировать их?
    • 0
      В некоторых рендерах делают так (размывают точку на 2-3 пикселя), и в этом действительно есть смысл. Грани теряются не сильно, но шум не так бросается в глаза.
      • +1
        Вот такое былобы идеально для игр.
        Потомучто в динамических сценах погони и мочилова — никому каустика и рефлексы нафик не нужны.
        А вот если стоять разглядывать замок в поисках подсказки — тогда уж и подетальнее рассмотреть.
        • 0
          На самом деле даже в современных играх чуть что дёрнется картинка какбы «размывается». Нарочно.
          • 0
            Это какбы многими отключается.
      • +1
        похоже вы соовсем не в курсе.
        гляньте пожалуйста ресурс raytracey.blogspot.com/
        там как раз PT в реалтайме в играх
  • 0
    Рекомендую к просмотру: www.youtube.com/watch?v=5-naYSmhGOY&feature=player_embedded
  • 0
    «Изображение получается таким, каким должно быть в природе» — чересчур пафосное высказывание =)
    Насколько я понимаю, рендеринг без допущений означает, что получаемая картинка со временем сходится (как-нибудь там по вероятности) к решению уравнения рендеринга. Так что выглядит оно не в точности как в природе: всё зависит от того, насколько хорошо решаемое уравнение соответсвует реальной физике. Причём уравнение рендеринга не является чем-то незыблемым: например, классическая версия, судя по всему, совсем не учитывает объемные эффекты.
    Системная ошибка всегда есть, просто в случае рендереров без допущений она действительно крайне мала.

    • 0
      Не дай вам боже абиасед рендером рендерить дымы и взрывы =)
  • 0
    >Не следует, также, забывать, что небольшой шум придает изображению реалистичности.
    Шум от анбиасед рендера к реалистичности отношения не имеет и выглядит как дефект рендеринга. Не следует путать этот шум с пленочным зерном, шумом камеры и т п эффектами. Глазом-то мы никакого шума не видим.
    • 0
      Попробуйте долго побыть в тёмном месте(ночью в лесу например при свете луны, минут через 40, чтоб глаза пообвыкли) можно заметить как-раз таки этот мелкозернистый шум… просто в рендере пиксели поболее будут(по сравнению с глазом) и шум заметнее, как мне кажется шум — это и есть отдельные фотоны которые довольно заметны, при недостатке освещения, человеческим глазом. При достаточном освещении фотонов так много, что они сливаются и зёрна не заметны… суть — рендер в реалтайме не успевает просчитать достаточное количество частиц и соотв. видны зёрна которые пропадают через время походу довычисления всё новых траекторий лучей.
      • 0
        А не лейкоциты ли это?
        Проходящие через расположенные перед фоторецепторами капилляры лейкоциты при взгляде на синий свет могут восприниматься как мелкие светлые движущиеся точки. Данное явление известно как энтопический феномен синего поля (или феномен Ширера)

        © wikipedia


        • 0
          От наличия синего ничего не зависит, тут эффект проявляется именно в условиях почти полного отсутствя освещения, очень похоже как раз на начало проявления картинки при рендеринге… только она не становится ярче со временем…
  • 0
    А как нынче анбиаседы решают проблемы шума при рендеринге анимации на ферме?
    • 0
      Думаю, заглушают шум в постобработке.
      • 0
        Примеров бы посмотреть, да найти всё не могу =)
  • 0
    Voxelisation по сути это процесс разбиения пространства в структуру, при расчете пересечений ускоряющую этот процесс. Сейчас популярны иерархические сетки, кд-деревья, иерархия ограничивающих обьёмов и другие.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.