GPU-ускорение в визуализации, часть 1: iray renderer
Нарезка из доклада о GPU-визуализаторах
GPU ускорение в визуализации: интерактивные визуализаторы и не только… часть 1 – общие сведения о GPU и GPU-ускорении.
GPU ускорение в визуализации: интерактивные визуализаторы и не только… часть 2 – iray for Autodesk 3ds Max preview.
В начале статьи, мы даем возможность посмотреть презентацию с доклада по GPU визуализаторам. Доклад был представлен dimson'ом3d на зимней конференции CG EVENT 2010 СТЕРЕО.
В этом видеодополнении будет рассказано о применении GPU и о самом визуализаторе iray для 3ds Max. В сегодняшней статье будет дано расширенное описание всех возможностей визуализатора, но для начала мы дадим немного теории.
Внимание! Полная версия доклада будет доступна на сайте конференции CG EVENT (www.cgevent.ru), версия будет распространяться в цифровом виде, либо на DVD-дисках. В любом случае, там много вкусных плюшек :)
Введение
Летом 2010 года, мы начали серию статей о GPU accelerated визуализаторах, начали с Quicksilver renderer для Autodesk 3ds Max 2011. В начале осени мы рассмотрели GPU-ускорение в обработке видео и Adobe Mercury Playback Engine. В новой серии статей мы продолжим обзор программного обеспечения с GPU-ускорением, и на этот раз мы сделаем упор на ускорение трассировки луча и поговорим об GPU accelerated визуализаторах.
В первом обзоре GPU accelerated визуализаторов, мы уделим внимание применению GPU для ускорения вычислений трассировки луча и рассмотрим систему визуализации mental images iray для Autodesk 3ds Max 2011. Будут рассмотрены возможности unbiased визуализатора iray, их реализация в среде 3ds Max и получаемый результат.
Технологии с реализованным GPU-ускорением
В 2009 году мы уже рассматривали применение GPU для ускорения процессов визуализации. Мы старались познакомить читателя с решениями, которые еще 1 год назад были еще в разработке, одни уже в финальной стадии, другие — на более ранних этапах. В частности, мы говорили о применении в компьютерной графике уже реализованной технологии NVIDIA CUDA и о наметившихся тенденциях.
Сегодня мы повторим некоторые из моментов использования GPU не только для отображения трехмерных моделей в окнах проекций, но и для использования в качестве мощного ускорителя для вычислений. После чего мы перейдем к рассмотрению системы визуализации mental images iray.
CPU + GPU
Первое, о чем стоит упомянуть в нашем обзоре — это вычислительная мощность GPU по сравнению с CPU, и почему GPU выступает именно как ускоритель, а не как самостоятельное вычислительное устройство.
Современные процессоры от таких компаний как Intel и AMD обладают достаточно большой производительностью. Производительность достигается за счет количества вычислительных ядер и тактовой частоты. Немаловажную роль играет cache процессора: чем он больше, тем лучше. Кроме того, в производстве центральных процессоров применяется множество технологий, которые также повышают производительность в вычислениях.
К наиболее известным и хорошо разрекламированным технологиям можно отнести предлагаемые компанией Intel технологии Hyper-Threading и Turbo Boost. Первая позволяет распределить процессы с помощью обработки двух потоков каждым физическим ядром (реализация логических процессоров), вторая увеличивает производительность благодаря повышению частоты на том ядре процессора, на котором выполняется приложение, не оптимизированное под многопоточные вычисления.
Упрощенный пример современного центрального процессора.
Все современные визуализаторы поддерживают многоядерные процессоры, могут работать одновременно на нескольких процессорах и умеют распараллеливать потоки (использовать Hyper-Threading в процессорах Intel).
С GPU дела обстоят иначе, как с точки зрения аппаратных решений, так и со стороны программного обеспечения. Главные достоинства GPU — это наличие большего, по сравнению с CPU, количества вычислительных ядер и своя собственная память с высокоскоростной шиной. Именно благодаря большому количеству ядер мы и получаем высокую производительность при вычислениях на GPU хорошо распараллеливаемых задач. Также можно отметить и хорошее наращивание производительности. Установив в одну систему несколько графических ускорителей, можно увеличить производительность вычислений в несколько раз.
Упрощенный пример современного графического процессора.
Безусловно, одним из самых важных компонентов в реализации GPU-ускорения в приложении является само программное обеспечение, адаптированное на параллельные вычисления.
Существует несколько технологий для вычислений на GPU: NVIDIA CUDA (для GPU NVIDIA), ATI Stream Technology (для GPU AMD (ATI)) и OpenCL. В то время, как первые две жестко привязаны к GPU указанных производителей, OpenCL призван стать унифицированным решением для GPU-вычислений, его можно использовать как с продуктами NVIDIA, так и с продуктами AMD. Но и тут все не так просто. Учитывая различия в архитектуре графических процессоров NVIDIA и AMD, даже на OpenCL приходится адаптировать программный код под конкретную архитектуру, NVIDIA или AMD. Казалось бы, что может быть проще — переписать код программы с учетом особенностей GPU, но здесь-то и обнаруживается одна из самых важных особенностей. Как известно, процесс разработки ПО включает не только собственно написание кода программы, но и его отладку, профилирование и компиляцию, а также адаптацию под исполнение программы на CPU (в случае отсутствия GPU определенного производителя или модели). С отладкой и разработкой ПО у решения AMD есть ряд недостатков. У NVIDIA, напротив, есть большое количество документации, свободно распространяемые библиотеки и SDK, полноценный отладчик на GPU и интегрируемый в среду разработки Microsoft Visual Studio набор инструментов NVIDIA Parallel Nsight™. Все это, и отличный маркетинг (ну куда уж без него), выводит продукты NVIDIA на первое место в создании GPU accelerated приложений, а также устойчиво сформировавшегося сообщества разработчиков.
Главное назначение GPU — это вычисления хорошо распараллеливаемых алгоритмов. Но из-за ряда особенностей самой архитектуры GPU, из-за которых часть кода необходимо выполнять на CPU, разработчикам программного обеспечения требуется учитывать особенности архитектуры как GPU, так и CPU.
Для корректной работы приложения необходимо помнить о том, что GPU это всего лишь сопроцессор, базовые операции выполняет CPU.
В графическом процессоре главными вычислителями являются шейдерные процессоры, которые и выполняют все вычисления по визуализации и заполнению изображения пикселями в игровой графике. У современных графических ускорителей шейдерные процессоры работают на достаточно большой частоте, что и позволяет выполнять достаточно большой объем вычислений в однотипных задачах. Однако для экономии энергии и предотвращения выхода GPU из строя, они снижают частоту во время ожидания или небольшой нагрузки.
Архитектура современного GPU (пример NVIDIA Fermi (GF100)).
На этом моменте мы и переходим к главной теме нашей сегодняшней статьи — к системам визуализации с GPU-ускорением. В первой части статьи мы рассмотрим области применения GPU и представим список GPU accelerated визуализаторов и рассмотрим первый визуализатор – iray для 3ds Max, вышедший в составе пакета Subscription Advantage Pack.
Области применения современных GPU и решений с GPU-ускорением
В этом разделе мы организуем существующие на данный момент технологии, использующие возможности графических процессоров. На данный момент, наиболее насыщенные различными технологическими решениями GPU, являются графические процессоры компании NVIDIA. Мы составили небольшой список с основными областями применения.
Слайд из презентации о GPU Accelerated визуализаторах с областями применения GPU.
Также приведем небольшую таблицу уже готовых решений с полной поддержкой GPU-ускорения. В таблице представлены как сами визуализаторы, так и технологии и платформы, использующие возможности GPU для ускорения вычислений.
Слайд из презентации о GPU accelerated визуализаторах с готовыми решениями.
Зеленым цветом выделены визуализаторы и решения, поддерживающие GPU-ускорение. В настоящей серии статей мы рассматриваем преимущественно unbiased визуализаторы, и все сравнения будут осуществляться между ними, но т. к. некоторые из представленных решений поддерживают возможности классических biased визуализаторов, мы будем иногда отсылаться и к ним.
Пример визуализации сцены в нескольких unbiased визуализаторах.
На приведенном выше примере представлены три изображения одной сцены, визуализация которой была выполнена в трех unbiased визуализаторах. Для сравнения указано время, затраченное на получение представленного результата.
GPU Accelerated Renderers: mental images iray
Первый визуализатор, который мы рассмотрим, это новый и пока доступный только пользователям с подпиской Autodesk, mental images iray.
Визуализатор iray for 3ds Max интегрирован в среду 3ds Max и может быть полностью настроен прямо в рабочей среде программы. Отличительной особенностью этого визуализатора является поддержка инструментов, используемых в mental ray renderer.
Давайте разберем механизм работы iray. Передача трехмерной сцены 3ds Max в ядро iray и что мы получаем на выходе.
Схема работы iray для Autodesk 3ds Max.
Главное преимущество iray заключается в первую очередь в возможности применения описания сцен из mental ray renderer. Сам iray отлично поддерживает описание сцен в формате mental images (*.mi) и шейдеров mental ray, поэтому вы можете использовать экспорт сцены в *.mi формат и визуализировать сцену в mental ray standalone со всеми возможностями iray. В самом 3ds Max также используется тот же транслятор сцен, что и для mental ray renderer.
Визуализатор mental ray после передачи сцены в ядро визуализации выполняет все вычисления и возвращает нам готовое изображение в Rendered Frame Window в Autodesk 3ds Max. Все это выполняется центральным процессором и полностью использует глобальную память (ОЗУ вашего компьютера).
iray renderer работает немного иначе. Сам по себе транслятор конвертирует сцену, используя CPU, и передает данные из ОЗУ вашей системы в память графического ускорителя, где все вычисления выполняются уже силами GPU. Впрочем, iray renderer можно настроить на визуализацию с помощью CPU (об этом будет рассказано ниже), тогда, как и в случае с mental ray, визуализатор будет выполнять вычисления с помощью CPU и все данные будут храниться в основной ОЗУ вашей системы. По умолчанию iray renderer для визуализации использует возможности обоих процессоров. Вы полностью контролируете используемые ресурсы и можете указать 3ds Max, какое устройство следует использовать для вычислений. Об этом мы и поговорим в следующем разделе.
Управление вычислительными устройствами в iray для 3DS Max
В standalone-версии mental images iray вы можете указать визуализатору, какое устройство ему использовать для вычислений: центральный процессор (CPU), графический процессор (GPU) или оба устройства вместе. В iray для 3ds Max графический интерфейс для выбора вычислительного устройства почему-то вообще не предусмотрен, для управления вычислительными устройствами можно использовать интерфейс командной строки.
Команды MAXScript для управления устройствами в iray
Для управления устройствами вы можете использовать команды MAXScript. Ими вы можете указать, какое устройство будет использоваться для вычислений, CPU, GPU или устройства обоих типов будут использоваться совместно.
- Команда:
mental_ray_string_options.addoption "iray devices" "0 1"
- Эта команда позволяет задать, какие графические процессоры будут задействованы при вычислениях с помощью iray renderer. Если в команде вводятся пустые кавычки (""), то GPU небудут задействованы для вычислений. Команда со значением "0" дает указание использовать основной GPU в системе (обычно тот, с которого идет отображение картинки на монитор), значение "1" позволит использовать для вычислений второй (не основной) системный GPU, значение "0 1" позволяет задействовать все доступные GPU.
- Команда:
mental_ray_string_options.addoption "iray threads" 4
- Команда "
iray threads
" позволяет вам управлять количеством потоков или процессоров которые, будут задействованы при вычислениях в iray. Если у вас в процессоре 2, 4, 6 и более ядер и есть возможность распараллеливания потоков, вы можете указать, сколько потоков задействовать. Для этого после команды укажите число, не превышающее максимального количества потоков вашего процессора. Введите значение "0", и iray не будет использовать центральный процессор для вычислений. Для использования всех доступных процессоров, ядер и потоков введите команду:mental_ray_string_options.addoption "iray threads" sysinfo.cpucount
Ниже даны примеры команд для управления устройствами, участвующими в вычислениях с помощью iray renderer.
Использовать только CPU:
mental_ray_string_options.addoption "iray threads" sysinfo.cpucount
mental_ray_string_options.addoption "iray devices" ""
Использовать только GPU (если у вас 2):
mental_ray_string_options.addoption "iray threads" 0
mental_ray_string_options.addoption "iray devices" "0 1"
Использовать совместно CPU и GPU (если у вас 2):
mental_ray_string_options.addoption "iray threads" sysinfo.cpucount
mental_ray_string_options.addoption "iray devices" "0 1"
К сожаление, управлять визуализатором из командной строки далеко не всегда удобно. Поэтому силами пользователей уже создан ряд интерфейсов, которые реализуют приведенные выше команды через привычные графические элементы управления.
Мы рассмотрим небольшой сценарий, написанный Артуром Леао (http://dimensao3.com/al/). Скрипт «iray manager» представляет собой графический интерфейс для управления iray и используемыми в вычислениях устройствами.
Интерфейс сценария iray manager 1.4.
Интерфейс сценария достаточно прост. В группе Resources вы выбираете, какое устройство будет выполнять вычисления, CPU и GPU могут быть задействованы как по отдельности, так и вместе. В этой группе параметров, вы также можете выбрать, сколько потоков процессора вы хотите задействовать и сколько GPU, установленных в вашей системе, будут выполнять ускорение вычислений при визуализации.
Отдельно в этом сценарии представлена группа для настройки окружения — Background, в ней вы можете настроить цвет окружения, какую текстуру или шейдер использовать и использовать ли размытие окружения. Вы можете задать разрешение для текстуры — это особенно важно, если вам требуется экономно использовать память вашего GPU. Группа Render предоставляет возможность запустить визуализацию прямо из окна сценария, а группа Options предназначена для сохранения настроек и их применения для визуализации других сцен.
Для восстановления всех параметров по умолчанию предназначена кнопка Reset.
Для проверки работы данного сценария мы визуализировали сцену с автомобилем, переключаясь между CPU, GPU и (CPU+GPU).
Первый тест мы провели на CPU, отключив использование GPU и запустив визуализацию, а такие утилиты как системный Диспетчер задач Windows и GPU-Z отображали загрузку устройств. В CPU-реализации, соответственно, использовались все доступные ядра процессора, и сцена загружалась полностью в оперативную память.
При запуске в режиме совместного использования CPU и GPU, основной объем вычислений был отдан графическому ускорителю, что нам и продемонстрировали утилиты.
Параметры и реализация визуализатора iray в 3ds Max
В этом разделе мы рассмотрим основные параметры визуализатора iray для Autodesk 3ds Max. Особое внимание мы уделим поддерживаемым визуализатором iray возможностям Autodesk 3ds Max.
Первое что стоит сделать — это, конечно, выбрать iray в качестве текущего production-визуализатора.
Выбор iray renderer в качестве текущего Production визуализатора.
Стоит отметить, что рекомендуется выбирать iray как текущий production-визуализатор, а в качестве визуализатора для редактора материалов следует выбрать mental ray renderer. Это объясняется тем, что iray достаточно нестабилен и зачастую некорректно визуализирует слоты в material editor. Это относится к первой версии iray для 3ds Max.
Выбранные визуализаторы iray и mental ray в свитке Assign Renderer в окне Render Setup.
После выбора визуализаторов можно приступать к настройке параметров iray для 3ds Max. В отличие от программных визуализаторов, поставляемых по умолчанию в 3ds Max (3ds Max Default Scanline Renderer, mental ray renderer), у iray нет большого количества параметров и закладок в окне Render Setup. Параметры визуализатора размещены на вкладке Renderer окна Render Setup.
Все параметры сгруппированы в два свитка — mental ray iray и Advanced Parameters. В свитке mental ray iray находятся глобальные параметры визуализатора iray, а в свитке Advanced Parameters - параметры для более тонкой настройки визуализатора.
Параметры визуализатора iray для 3ds Max на вкладке Renderer.
Свиток параметров mental ray iray
Так как iray — это unbiased визуализатор, в нем используется методика трассировки пути. С iray вам не потребуется настраивать параметры глобального освещения, финальной выборки (final gather) и других параметров, присущих классическим визуализаторам, таким, как mental ray renderer.
Качество получаемого в итоге изображения всегда зависит от времени, которое было затрачено на визуализацию сцены и от количества выборок, выполняемых при визуализации каждого пикселя. Чем больше времени затрачено, тем выше качество изображения.
В свитке mental ray iray вам предлагается на выбор три метода расчетов изображений с помощью iray. Все они размещены в группе Rendering Duration per Frame.
Time – в этом параметре вы указываете время, которое будет потрачено на визуализацию изображения. Чем выше значение, тем больше будет осуществлено выборок и выше будет качество изображения.
Изображение сцены экстерьера полученное при визуализации в течении 5 мин, 15 мин, 55 мин.
Iterations (number of passes) – количество выборок для каждого пикселя изображения. Чем больше выборок, тем лучше результат, но тем больше время, затраченное на визуализацию.
Изображение сцены экстерьера, полученное при визуализации с 50, 150 и 350 итерациями.
Unlimited – этот параметр позволяет запустить визуализацию без ограничения времени и количества выборок, качество изображения вы можете определить для себя сами и самостоятельно завершить визуализацию нажатием кнопки Cancel.
Для более точной настройки визуализации iray для 3ds Max, необходимо воспользоваться свитком Advanced Parameters.
Свиток параметров Advanced Parameters
Для более точной настройки iray воспользуйтесь параметрами из свитка Advanced Parameters. Здесь вы можете настроить как глубину трассировки и количество отскоков, так и тип фильтрации изображения, а также настроить визуализацию объектов с displacement в iray.
Все параметры размещены в четырех группах: Trace/Bounce Limits, Image Filtering (Antialiasing), Displacement (Global Settings) и Material Override.
В группе Trace/Bounce Limits находятся настройки количества отражений лучей.
Physically Correct (Unlimited) — параметр установлен по умолчанию и позволяет рассчитывать безграничное количество отражений пока визуализируется сцена.
Maximum Number of Light Bounces – при активации этого параметра вы можете управлять количеством отражений лучей света при визуализации сцены. Чем меньше значение, тем будет меньше отскоков, это поможет уменьшить время визуализации при выполнении тестовых рендеров.
Изображение тестовой сцены, полученное при визуализации с 2, 4, 12 и Unlimited отскоками.
Зависимость времени, затрачиваемого на визуализацию с помощью iray, от настроек визуализатора можно оценить по следующей диаграмме. Основными параметрами, которые мы меняли, были Iterations и Maximum Number of Light Bounces.
Время визуализации при различных значениях Iterations и Maximum Number of Light Bounces.
Как видите, чем меньшее число отскоков лучей мы зададим, тем меньше времени уйдет на визуализацию. Кроме того, время визуализации можно уменьшить, уменьшая количество итераций до минимального приемлемого значения.
По результатам анализа диаграммы, мы оптимизировали количество итераций и отскоков луча для обеспечения достаточно качественной картинки за минимальное время визуализации.
Результат визуализации изображения с параметрами: Iterations 300 t/b limits 8 (a) и Iterations 200 t/b limits 7 (b).
Для управления объединением сэмплов пикселей, необходимо обратиться к группе Image Filtering (Antialiasing). На один момент стоит обратить особое внимание: фильтрация изображения применяется ко всему изображению, поэтому не стоит злоупотреблять ею при создании финального изображения.
Type – в этом раскрывающемся списке вы можете выбрать тип алгоритма, по которому будет выполняться расчет фильтрации изображения:
- Box — суммы всех сэмплов в области фильтра с одинаковым весом,
- Gauss – веса сэмплов с использованием кривой Гауса, сосредоточенной на пиксель,
- Triangle — вес сэмплов, сосредоточенный в центрирование по пирамиде на пиксель.
Width – задает значение размера области сэмплирования. Увеличивая значение, вы получите более мягкое изображение, но при этом возрастет время визуализации.
Результаты визуализации с разными типами фильтров Gauss, Box и Triangle.
Наилучшие результаты показали фильтры Gauss и Triangle. Большей точностью и качеством отличается фильтр Triangle. Однако, как уже было упомянуто выше, чем выше значение размера области сэмплирования, тем более размытым будет финальное изображение.
Примеры изображения с различным значением ширины сэмплирования.
Следующую группу параметров мы вынесем в отдельный раздел Displacement в iray renderer. Сейчас мы опишем последний из глобальных параметров — Material Override.
Группа Material Override предназначена для назначения всей сцене одного шейдера, который можно использовать для анализа геометрии, освещения и других элементов на стадии тестовой визуализации сцены. Это позволяет сэкономить время и лучше проанализировать текущее состояние сцены.
Флажок Enable активирует возможность применения замещающего шейдера. Кнопка с надписью None (по умолчанию) предназначена для выбора шейдера, который будет применен ко всем объектам сцены. Вы также можете перетащить настроенный шейдер из редактора материалов.