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

С недавних пор начал пользоваться сервисом 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, к примеру — у него появится возможность отрендерить его с помощью видеокарты соседа-геймера. В этом суть.

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

Вот так. Ищу единомышленников.
Спасибо за внимание.
Метки:
Поделиться публикацией
Комментарии 28
  • 0
    Чем вас не устраивают имеющиеся рендер-фермы, типа REBUS?
    • 0
      Как бы попроще объяснить. Зачем мне платить рендер ферме, если сосед, и мои друзья на ночь оставляют компы включенными? С меня пиво :)
      Ресурсы есть, чего им зря пропадать?
      Вопрос в софте, с помощью которого я могу рендерить картинку на их компьютерах, без кучи настроек.
      • +2
        Есть и бесплатные рендер-фермы. В Blender 2.6 входит компонент Netrender, в 3D Studio Max есть Backburner, в остальных популярных продуктах тоже что-нибудь да есть такое.
    • +5
      Тут дела не в рендер фермах а в концепции открытого, расперделенного проекта вычислений. Хотя подобные научные проекты уже давно есть, действительно не хватает именно распределенных свободных и защищенных сервисов графического рендеринга. Нужна платформа, по простоте сравнимая с биткоином и дающая возможность виртуализации для народа. В связи с большим зоопарком софта для рендера мне кажется это должно быть больше похоже на виртуалку, берущую ресурсы для вычислений у «остального мира»
      • +3
        Чувак, дай я тебя заплюсую :))
        Есть идея с распределенной виртуализацией, если хочешь — обсудим ;)
        • 0
          В далеком 2005 уже был такой проект назывался CPUShare. Он даже успешно работал какое-то время.
          Суть проекта была в зарабатывании очков, на аренде, которые потом можно было заплатить, что бы самому воспользоваться услугой. Но проект не прожил и года, поддерживть его никто не хотел и через 5 лет поисков инвестиций автор сдался и забил.
          • 0
            расперделить — это самое удачное слово за последние месяцы!
          • 0
            Посещала подобная мыль еще 7 лет назад, когда в доступе появился анлимный инет, хоть и с черепашье-улиточной скоростью по современным меркам. Мощу среднестатистических домашних компов того времени с нынешними сравнивать вообще глупо, а про вычисления на видюхах не могли и мечтать. Рендринг занимал дофига фремени, поэтому появление идеи было вполне себе логичным. Но как это бывает — средств на разработку соотв. ПО не было (да и сейчас нет), друзьям и знакомым, способным взяться за это и реализовать — было до фонаря и идея так и осталась идеей. Постепенно позабытой. (я тогда занимался исключительно веб.девом и кодить подобное для меня было высшим пилотажем).

            Так что флаг Вам в руки, авось Вы или кто-то и прочитавших статью реализуют все это. Было бы не плохо.
            • +1
              Вот так всегда, идей у нас много, реализовывать некому.
            • 0
              Что-то не понял:
              Причем здесь GLSL?
              Потом, как передавать такие объемы данных?
              Ну и как бы есть OnLive и Gaika (был). Понятно что не своем то, но всё же суть та же.
              И вообще какой смысл предоставлять свои «вычислительные мощности», оно шумит греется, тратит электроэнергию, пересылка данных забьет канал.
              • 0
                Мне стоило эту статью разбить на 2 части:
                1. Как сделать хороший рендеринг на GPU.
                2. Распределенное вычисление.

                А то налепил все в кучу, теперь подобные вопросы возникают :)
              • +1
                Посмотрите в сторону действующей сети распределенных вычислений MQL5 Cloud Network.

                Подключиться легко, расписание работы настроить можно, есть оплата использованных ресурсов, включая статистику. На текущий момент в сети исполнено 566 миллионов задач.
                • 0
                  спасибо за ссылочку ;)
                  • 0
                    Ну, это сервис исключительно трейдинговых вычислений.
                    • 0
                      Нет, там можно также легко кастомную математику гонять, включая передачу данных.

                      Например, раздавать тысячи заданий по сети, а потом автоматически собирать все данные(можно передавать любые объемы), обрабатывать их, сохранять, визуализировать и тд.

                      Есть полная поддержка OpenCL 1.1 и выше, 32/64 битные версии платформ, защита кода, безопасность кода, работа задач в песочнице.
                  • 0
                    Насколько я понимаю, платформа BOINC, на которой работают SETI@Home и много других проектов, предназначена для создания сетей распределённых вычислений произвольного характера.
                    Возможно, на её основе можно сделать и рендер.
                    • 0
                      Удалено, комментарий не в ту ветвь.
                    • +2
                      Идея конфиденциальности в unbiased-визуализации нереализуема. Все сетки и текстуры в сцене должны быть получены вычисляющей машиной в исходном виде. Можно посылать их как угодно, но в момент загрузки в память видеокарты они должны быть в целостности, а вытащить отладчиком аргументы glTexImage2D или аналогичной функции — как нефиг делать. Максимум, что возможно сделать — перевести шейдеры в оптимизированный байт-код.

                      Если задача на GLSL не будет выполнимой вообще — можно попытаться сделать рендер на OpenCL ;)
                      А как насчёт попробовать визуализировать простой кубик средствами compute shaders из GLSL? Полсотни парадигм (краткая схема), которые придётся освоить и использовать (даже если они не нужны в рендере), быстро отрезвляют сознание.

                      Ищу единомышленников.
                      renderfarm.fi, присоединяйтесь!
                      • 0
                        renderfarm.fi глючит с осени 2012, ну или как минимум месяц.
                        • 0
                          А есть ещё таких отрезвляющих картинок?
                          • 0
                            Хорошая схема есть на обложке спецификации OpenGL. Пайплайн OpenGL 4.3 заточен на то, что в любой момент можно вытащить промежуточный результат и пустить его по развилке на Transform Feedback. Если вам нужны Compute Shaders, посмотрите, по каким стрелкам в него можно подать данные; по стрелке от Buffer Objects и Texture Sampling. В свою очередь, на эти два блока данные тоже могут поступать из разных мест. Хотите перейти от Compute Shaders на Framebuffer (т. е. на вывод)? Без проблем, по стрелке Compute Shaders -> Vertex Shading (разметить прямоугольную текстуру на прямоугольную полисетку) -> Tessellation (ничего) -> Geometry Shading (тоже ничего) -> Rasterization -> Fragment Shading (вытащить цвета из Sampler2D: color = vec4(texture(srcTex, texCoord).x, 1.0, 1.0, 1.0)), и только потом можно выводить на экран. Так и приходится осваивать одновременно кучу технологий, хотя нужна только одна.
                            • 0
                              Да вполне нормальные картинки.
                              Я надеялся, что есть что-нибудь ещё более интересное :)
                              Например, более подробная картинка с обложки.
                      • 0
                        Я являюсь студентом специальности, связанной с компьютерной графикой, и, конкретно, визуализацией.
                        Как-то у меня была идея организовать сообщество студентов и преподавателей, где бы каждый мог попросить помощи в вычислительных мощностях, чтобы отрендерить свою сцену/мультик/проект и сделал это в виде странички на Facebook — www.facebook.com/FreeRenderCommunity Но за всё время что-то никто ни разу этим не воспользовался, а у нас на кафедре появились мощные машины.

                        Да, забыл сказать, идея появилась именно после того, как и моей команде нужно было за короткий срок отрендеритьь видео на сцене с большим количеством полигонов и мы действительно задействовали для этого своих друзей, коллег, каждый рендерил, сколько мог, а я вёл табличку, на чьей машине какие кадры рендерятся: )
                        • 0
                          А как вы собираетесь прикрутить opengl к unbiased рендерингу?
                          • 0
                            Также, как прикрутили HLSL к unbiased рендерингу.
                            • 0
                              Мысль интересная. И люто хакерская :)
                              Но вот в статье по ссылке упоминается «Связка OpenGL/GLSL также рассматривалась, но быстро была отброшена ввиду ограничений, которые в DirectX решаются с помощью DirectCompute (задачи двунаправленной трассировки пути и пр.)»
                              Что они имели ввиду?
                              • 0
                                А вот это не знаю. Человек, вообще, только на DX программировал, может он там просто в OGL не разобрались? :)

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