- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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


Какой смысл?

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

Стороны

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

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

Какова концепция программы?

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

Какую вычислительную платформу использовать?
CPU + GPU. На мой взгляд, GPU рендеры уже достаточно хороши для того, чтобы использовать их, как платформу для рендеринга, наряду с процессорами x86-64. Преимущество — скорость вычисления. Однако, написание программы на GPU имеет ряд недостатков:

  1. Сложность написания кода, для написания программы на GPU требуются фреймворки, такие как OpenCL [6], CUDA [7] (Nvidia), FireStream [8] (AMD), и шейдерные языки GLSL [9] (OpenGL) и HLSL [10] (DirectX).
  2. Сравнительно небольшой объем памяти, невозможность увеличивать объем памяти без существенной потери производительности.

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

Я считаю, что GLSL версии 4 (и более) является лучшей платформой для создания рендера, потому что:

  1. Имеет высокую производительность в сочетании с мощным железом.
  2. Работает на всех операционных системах и на любом железе, поддерживающем OpenGL  версии 4+

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

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

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

Вот так. Ищу единомышленников.
Спасибо за внимание.

Автор: Marchevsky

Источник [13]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/oblako/29216

Ссылки в тексте:

[1] MEGA: https://mega.co.nz/

[2] Рендеринг: http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BD%D0%B4%D0%B5%D1%80%D0%B8%D0%BD%D0%B3

[3] распределенные вычисления: http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F

[4] облака: http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D0%BB%D0%B0%D1%87%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F

[5] unbiased рендеринг: http://habrahabr.ru/post/142003/

[6] OpenCL: http://ru.wikipedia.org/wiki/OpenCL

[7] CUDA: http://ru.wikipedia.org/wiki/CUDA

[8] FireStream: http://ru.wikipedia.org/wiki/AMD_FireStream

[9] GLSL: http://ru.wikipedia.org/wiki/OpenGL_Shading_Language

[10] HLSL: http://ru.wikipedia.org/wiki/HLSL

[11] видео: http://youtu.be/aJCcqa87ZsQ

[12] RenderBRO: http://renderbro.com/

[13] Источник: http://habrahabr.ru/post/172473/