суббота, 15 сентября 2012 г.

GPU Unbiased рендеринг

Еще один интересный чужой пост про unbiased-рендеринг

ru.renderstuff.com Антон

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

Я сам пользуюсь V-Ray, поэтому я брал его как отправную точку.

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

Очень наглядным примером того, как это делается, есть работа адаптивного GI движка Irradiance Map, описанная нами в серии статей про настройки V-Ray.




Такие движки, способные выборочно изменять точность вычислений в разных зонах сцены, называют пристрастными, предвзятыми или тенденциозными. По-английски Biased. По-русски читается как ['baɪəst] (баиест). Так как они действительно предвзято подходят к вычислениям в сцене, просчитывая более точно лишь те зоны, которые посчитают важными. Помимо этого, результат их просчетов не изменяется от рендера к рендеру.

Такие движки – прерогатива исключительно CPU рендеринга. GPU рендеринг biased-движком не возможен в силу разного подхода к просчету.

Еще одной ключевой особенностью Biased движков является использование интерполяции. Она не только позволяет ускорить вычисления, интерполируя непросчитанные сэмплы, но и избавляет от шума, присущего сгенерированным на компьютере изображениям. Ведь интерполяция, это на практике – размытие.

Однако, тот же V-Ray, имеет в своем арсенале и алгоритмы, имеющие свойства тех, которые используются при рендеринге GPU. В частности, в них нет никакой адаптивности, и все зоны сцены просчитываются одинаково, вне зависимости от их важности.

Ярким примером беспристрастного движка является GI движок Brute force. Он не вычисляет никаких зон, не определяет никакую важность, он просто «шпарит» всю сцену с одинаковой точностью, основываясь лишь на единственной собственной настройке Subdivs, не изменяя качество просчета для всех зон сцены без исключения.

GPU-основанный рендеринг аналогично брут форсу беспристрастный. Его называют Unbiased рендеринг.

Справедливости ради, стоит отметить, что Brute force все же не является Unbiased движком, он лишь схож с такими движками и на его примере легко понять практическую разницу.

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

Как я уже сказал, в Unbiased рендеринге нет адаптивности и уж тем более интерполяции. Вследствие чего, избавиться от шума при Unbiased рендеринге практически невозможно. Разумеется, можно добиться того, что шума будет практически не видно вообще (если специально его не выискивать ). Однако, расплатой за это будет ненормальное увеличение времени рендеринга.

Unbiased движки идеально подходят для GPU рендеринга. Просто потому, что видеокарты по сути и предназначены для таких вычислений.

Дело в том, что Unbiased рендер считает всю картинку сразу во множество потоков одновременно. Это просто идеально подходит для параллельной конвейерной архитектуры GPU видеокарт.

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

Вот посмотрите это знаменитое презентационное видео Unbiased движка V-Ray RT:



Если вы внимательно присмотритесь к рендеру на видео, то вы увидите, что во время движения по сцене картинка получается очень шумной. Но стоит лишь остановиться на каком-то ракурсе, то шум начинает исчезать и картинка становиться более светлой и чистой.

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

Для сравнения, Biased движок высчитывает рендер последовательными достаточно крупными порциями. Он не дополняет его бесконечно, он четко выполняет просчет с заданным уровнем качества. В отличие от распаралеленного Unbiased рендеринга, Biased рендеринг более последователен и наибольшим образом подходит для CPU.


Вот теперь мы вплотную подошли к сравнению CPU и GPU рендеринга.

Но в самом сравнении находится главный парадокс темы.

Сравнить CPU и GPU рендеринг просто численно на предмет дольше-быстрее нельзя. Точнее, можно сравнить скорость работы CPU и GPU на Unbiased рендерере. Однако это так же глупо, как сравнивать на вспашке поля одинаковые по мощности трактор и спорткар, только по тому, что у того и того по 300 лошадиных сил и оба с колесами

Кстати, именно об этом непробиваемо замалчивают «соревнователи» CPU с GPU. А заодно и маркетинговые лозунги производителей видеокарт.

Дело в том, что никто в здравом уме, в реальной ситуации, не станет рендерить с помощью CPU Unbiased-рендерером, предназначенным для GPU. Это, по меньшей мере, глупо.

Единственным хоть сколь уместным, может быть сравнение Unbiased GPU рендеринга и Biased CPU рендеринга. Однако это сравнение может быть лишь субъективным, так как время Unbiased рендеринга – бесконечность.

Что здесь означает субъективное сравнение?

А значит это то, что сравнивать можно лишь время на создание визуально неотличимых изображений, сделанных Unbiased и Biased движками. То есть, нужно взять конкретную сцену и отрендерить ее Biased движком с помощью CPU. Затем, запустить эту же сцену на просчет Unbiased рендерером на GPU и дождаться пока, визуально качество картинки не станет сравнимым с результатом Biased рендерера. И только потм, сравнивать затраченное на вычисления время.

И, вот тут-то начнутся проявляться «особенности» Unbiased движка. Первая из них это то, что добиться столь же чистой (не шумной) картинки без интерполяции, которая активно применяется при Biased рендеринге, на Unbiased движке «малой кровью» не выйдет. Привидется долго ждать, чтобы видеокарта дополнила фрейм буфер цветовой информацией до полного визуального отсутствия черно-серого зерна. Второй «сюрприз» заключается в том, что Unbiased движок имеет технологические ограничения и его возможности гораздо скромнее, чем у Biased рендерера. Например, тот же V-Ray RT имеет ряд неподдерживаемых функций, то есть он попросту не сможет отрендерить все даже самые, казалось бы, элементарные, эффекты, которые давно доступны Biased рендереру.

Однако, это в общем-то мелочи. Допустим, что первую особенность можно компенсировать покупкой дополнительных видеокарт, а второю просто настройкой сцены другими методами.

Однако третьей существующей проблеме, разумного решения нет. Заключается она в недостаточном количестве Onboard Video Memory. То есть, для серьезной работы, установленных в видеокарте одного, в лучшем случае двух гигабайт видеопамяти, попросту недостаточно, чтобы отрендерить коммерческую сцену с, например, классическим интерьером. При попытке отрендерить обыденную для большинства визеров картинку, Unbiased рендерер просто вывалится, из-за банальной нехватки видеопамяти.

Вот теперь мы плавно подобрались к вопросу железа.

Чем Тесла по сути отличается от Квадры? Да ничем

Отличие лишь в бОльшем количестве видеопамяти, установленной в картах серии Tesla.

В некоторые модели установлено аж по 6GB Video Memory, что, в общем-то, не плохо, однако все же недостаточно в особо тяжелых рендерах. Но, что смешно, цена за этих несколько гигабайт видеопамяти, просто ужасающая. За цену одной такой квадры можно купить 5 отличных системных блоков для дистрибутивного рендеринга. Мало того, это еще не самое «смешное». Дело в том, что отличие игровой видеокарты, построенной на том же чипе, в GPU рендеринге, тоже исключительно в объёме видеопамяти, а не как не в скорости смоаго рендеринга. Проверено!

Что такое CUDA и какая от него польза пользователю?

CUDA – аппаратно-программная архитектура, которая позволяет специалистам по программному обеспечению создавать приложения, ведущие вычисления на видеокартах, которые поддерживают технологию GPGPU. Простыми словами, это один из языков программирования, позволяющий писать программы, работающие на мощностях не CPU (как это обычно бывает), а на мощностях NVIDIA видеокарт.

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

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

«Мне нравятся видеокарты, поддерживающие один язык программирования, но я выбираю другие, потому что они поддерживают другой язык программирования, я правильно делаю?»

Ты собрался писать программы для GPU, и CUDA тебе удобней? Нет? Так почему же тебе есть дело до поддержки одного из способов программировать?

А потому, что ты запутался в умелых маркетинговых лозунгах вокруг NVIDIA, преподносящих CUDA, как единственную и неповторимую технологию использования GPU для ведения вычислений

Где CUDA используется в 3ds Max? – Нигде, CUDA никакого отношения к 3ds Max не имеет.

Обязательно ли моя видеокарта должна поддерживать CUDA? Я что-то потеряю, если она не работает с CUDA? – Нет, твоя видеокарта совершенно не должна быть привязана к ограниченному программному обеспечению, монополизированному одним из производителей железа.

Как ты сам сказал, тот же V-Ray RT спокойно себе работает с OpenCL.

Следует понимать, что разработчики популярного ПО, будь то V-Ray или любая другая программа, не станут ограничивать продажи своего программного продукта лишь для владельцев железа одного разработчика и полностью игнорировать других своих потенциальных клиентов, особенно учитывая что приверженцев AMD не меньше чем NVIDIA. Это, по меньшей мере, глупо, по большей – это банальная потеря прибыли. Скорее это NVIDIA мечтает всех разработчиков ограничить, заставив их писать залоченное под их видеокарты ПО. Но это так же реально, как и существование президента вселенной

OpenCL – это язык программирования (упрощенно), позволяющий писать программы, ведущие вычисления на видеокарте, конечно же, в не зависимости от его производителя. Его будущее куда более перспективно, нежели будущее ограниченного в выборе железа CUDA.

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

Фантастическое изображение в начале поста создано пользователем enricocerica с форума октана

Комментариев нет:

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