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

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

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

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

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 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 не разобрались? :)

                          Only users with full accounts can post comments. Log in, please.