Pull to refresh

Распределенный рендеринг

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

Но, наряду с хранением информации, будет не менее полезным для нас сервис облачно-распределенных вычислений, и в частности, рендеринга.

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

Итак, что такое «рендеринг»? Рендеринг — это вычислительный процесс, в ходе которого, мы получаем красивую картинку по 3д модели с помощью программы «рендера».
Что такое «распределенный»? Это когда хранение или вычисление данных распределяют между множеством компьютеров или серверов, объединенными одной сетью (см. распределенные вычисления).
Распределенный рендеринг — вычислительный процесс, по созданию изображений, распределенный между компьютерами. Вычисления также могут на себя брать облака.


Какой смысл?
  1. Польза для окружающих. У многих дома лежат достаточно мощные, невостребованные вычислительные ресурсы. У меня, к примеру, стоит GTX580, core i5 2500. Играю я редко, и то, в нетребовательную к ресурсам игру. Я бы смог использовать свою видеокарту с пользой для кого-то, но нет подходящей инфраструктуры.
  2. Денежная выгода для участника. Свои вычислительные ресурсы я могу продавать кому-либо за деньги.
  3. Заказчик может покупать вычислительные ресурсы обладателя мощной видеокарты.

Стороны
  1. Инициатор. Человек, который решил запустить рендеринг на компьютере работника. Инициатор загружает модели, текстуры, шейдеры в облако.
  2. Работник. Обладатель вычислительных ресурсов, который может производить вычисления на своем мощном железе, для того, чтобы показать зрителю.
  3. Зритель. Смотрит отрендеренную картинку, смотрит объекты со всех сторон, присваивает заготовленные материалы, прочее.

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

Какова концепция программы?
  1. Конфиденциальность (эту опцию можно отключить при необходимости). Работник не должен знать ничего о том, что именно он рендерит на своем компьютере (если зритель сам этого не пожелает).
  2. Максимальное качество при минимальном объеме настроек, возможность рендеринга в реальном времени. Для этого лучше всего подойдет unbiased рендеринг.
  3. Работоспособность на любой ОС (Linux, Windows, OSX), поддержка большинства распространенного оборудования (AMD, Nvidia, Intel, может и других платформ).

Какую вычислительную платформу использовать?
CPU + GPU. На мой взгляд, GPU рендеры уже достаточно хороши для того, чтобы использовать их, как платформу для рендеринга, наряду с процессорами x86-64. Преимущество — скорость вычисления. Однако, написание программы на GPU имеет ряд недостатков:
  1. Сложность написания кода, для написания программы на GPU требуются фреймворки, такие как OpenCL, CUDA (Nvidia), FireStream (AMD), и шейдерные языки GLSL (OpenGL) и HLSL (DirectX).
  2. Сравнительно небольшой объем памяти, невозможность увеличивать объем памяти без существенной потери производительности.

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

Я считаю, что GLSL версии 4 (и более) является лучшей платформой для создания рендера, потому что:
  1. Имеет высокую производительность в сочетании с мощным железом.
  2. Работает на всех операционных системах и на любом железе, поддерживающем OpenGL  версии 4+

Если задача на GLSL не будет выполнимой вообще — можно попытаться сделать рендер на OpenCL ;)

Область применения:
Я считаю, что основной областью применения подобного рендера является ДЕМОНСТРАЦИЯ идеи кому-либо в трехмерном виде. Допустим, человек хочет себе заказать машину, или ремонт в квартире. У него будет возможность «пройтись по квартире», посмотреть свою машину со всех сторон, в любом окружении, в любых цветах, сидя дома, за «бабушкиным компьютером», телефоном или планшетом.
Человек нарисовал дом в SketchUp, к примеру — у него появится возможность отрендерить его с помощью видеокарты соседа-геймера. В этом суть.

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

Вот так. Ищу единомышленников.
Спасибо за внимание.
Tags:
Hubs:
Total votes 27: ↑19 and ↓8 +11
Views 38K
Comments 28
Comments Comments 28