Пользователь
0,0
рейтинг
21 марта 2014 в 17:16

Разработка → История создания торрент-рендера для 3ds max из песочницы



Всем привет, хочу поведать хабру об одном необычном сетевом сервисе и процессе его разработки. Но сперва пару слов непосредственно обо мне — я прикладной программист MAXScript (это встроенный в 3ds max скриптовый язык), а 3ds max это один из популярнейших пакетов для создания разнообразной 3d-графики и в нем, естественно, есть такая штука как рендеринг, из-за которой собственно все ниженаписанное и делалось.

Идея


Начался процесс с одной идеи, которая пришла мне в голову совершенно внезапно поздней ночью 30 ноября 2010 года и вылилась на следующий день вот в такой пост на форуме 3dcenter.ru:
01/12/2010, 12:49
Пришла эта мысль в голову и не вылазит. Хочу обсудить с сообществом полезность и целесообразность. Основную часть технических подробностей пока опускаю, но сделать сие вполне реально либо в качестве плагина (SDK), либо даже скрипта (MAXScript).
Итак, смысл в том, чтобы бесплатно (или не очень) использовать чужие компы для рендера своих сцен. Есть система рейтинга, т.е. нельзя долго рендерить свое («качать»), но не рендерить чужое («раздавать»). Для тех, кто боится, что его сцены или текстуры будут использовать чужие нехорошие люди, предусмотрена защита — координаты всех объектов сцены изначально обнуляются, правильные координаты шифруются и передаются на рендер отдельным файлом, текстуры бьются на маленькие квадратики и собираются в одну тоже только перед рендером. Показ самой визуализации (VFB) можно отключить, т.е. человек даже не видит, что он рендерит. Аналогичные действия происходят и после рендера — изображение автоматически разбивается на кусочки (либо просто перемешиваются пиксели по какому-то закону) и собрать его правильно можно только на стороне автора сцены. Для альтруистов есть возможность отключения защиты, т.е. сцена с барахлом передается в свободном доступе. Защита может быть и другая, и вообще все что я пишу еще до конца не обдумано — только варианты.

Ну вот в общем как-то так, прошу не кидаться помидорами, и, если велосипед я не изобрел, то обсудим, насколько вообще жизнеспособна эта идея.

Наше сообщество 3D-шников восприняло идею с энтузиазмом, оказалось, что ей уже лет пять, т.е. многим похожие мысли приходили в голову и до меня, нашлись конечно и скептики, сомневающиеся и в технических вопросах, и вообще в целесообразности подобного проекта в сравнении с существующими рендер-фермами и разнообразными сервисами для удаленного рендеринга, но в глобальном масштабе ни у кого не получилось доказать, что сервис торрент-рендера невозможен технически или станет бесполезным, будучи реализованным. Короче, в процессе двухмесячного форумного обсуждения, интернет-поисков и исследований разнообразных технических деталей я пришел к выводу, что все возможно и делать нужно, о чем и запостил на форуме:
08/02/2011, 22:11
окончательно определился с концепцией и откопал всю теорию, которая мне понадобится в процессе, подробностей говорить не буду, т.к. решил оставить реализацию себе. всем спасибо за участие.

Концепция


Основной вывод, который я сделал в процессе исследований — придется учить PHP. На тот момент мой опыт в сетевых разработках ограничивался собственным простеньким сайтом на HTML плюс немного css'а и javascript'а. А поскольку PHP был самым простым и кратчайшим путем от нуля до серверной части проекта и поддерживался всеми потенциальными хостингами, на нем я и решил остановиться и выбрал классическую связку Apache+PHP+MySQL. К тому же оказалось, что многие торрент-трекеры (если не большинство) тоже написаны на PHP, этот факт поставил окончательную точку в выборе технологии.

Изучение основ PHP и баловство с домашним локалхостом попеременно с фрилансом и дуракавалянием продолжалось примерно года полтора, за это время общая концепция сервиса дозрела в моей голове окончательно, о чем и был пост следующего содержания:
22/09/2012, 19:53
разработка в коде началась!

Реализация, первая фаза: коннект


В начале реализации все шло довольно гладко, я создал первую версию клиента, базу, адаптировал под себя несколько обучающих уроков на PHP по скриптам регистрации и создал коннект непосредственно из 3ds max к базе MySQL через PHP-скрипт. Технически все это работает следующим образом — клиент, написанный на MAXScript, работает внутри 3ds max и отправляет при помощи dotnet (макскрипт с дотнетом очень хорошо дружат) различные http-request'ы с POST-запросами к серверному PHP-скрипту, а тот уже коннектится к базе, добавляет и изменяет в ней данные и выдает респонсы echo'м или exit'ом, которые возвращаются на обработку в клиент. Для пользователя это выглядело следующим образом — после логина из клиента, параметры его ноды (версия 3ds max, число процессорных ядер и гигабайты памяти) автоматически добавлялись в базу и вывешивались в интернет ко всеобщему обозрению на странице зарегистрированных нод. Все это было повешено на оффсайт:
01/04/2013, 18:04
У проекта появился оффсайт: torrender.net

Народ стал потихоньку регистрироваться, а я плотно занялся клиентской частью, а именно торрент-файлами. Отдавать файлы сцен и результаты рендеров было решено в запароленных WinRAR-архивах, опыт управления винраром из макскрипта через командную строку у меня уже был, а вот с торрентами оказалось сложнее, т.к. макскриптом создать файл торрента было нереально (а если и реально, то очень медленно), но нельзя сказать, что я не пытался, просто довольно быстро бросил эту затею. К счастью удалось нагуглить программу mktorrent, которая как и винрар управлялась макскриптом из командной строки и делала торрент-файлы из архивов автоматом. Наконец-то у меня дошло дело до трекера.

Реализация, вторая фаза: TBdev


В поисках подходящего трекера пришлось гуглить довольно много, остановился на TBdev опять же из-за простоты, популярности и наличия в интернете информации по самым разным вопросам:
17/04/2013, 07:51
Я прикручиваю трекер, регистрация прекращена, логин ни у кого не работает.

И вот тут меня ждал глобальный подвох, т.к. у TBdev оказалась собственная база и проще было добавить в нее мои таблицы, чем перелопачивать весь движок трекера вкупе с анноунсером, т.к. раздача торрентов трекером это как раз то, что я сам не сделал бы никак:
24/04/2013, 14:03
Есть две новости, хорошая и плохая.
Хорошая — трекер прикрутился, раздачи и загрузки — все работает. Допиливаю остатки у лича, базы у трекера и начинаю делать сидов.
Плохая — вам всем придется перерегистрироваться. Потом скажу где и когда.

Наконец-то связка клиент-трекер заработала как надо, т.е. пользователь грузит сцену, а дальше работает клиент и автоматически делает следующие вещи:
  1. Создает винрар-архив
  2. Создает торрент-файл для архива
  3. Загружает торрент-файл на трекер
  4. Выгружает этот же торрент-файл с трекера, но уже с пользовательским пасскеем
  5. Ставит торрент-файл на раздачу в uTorrent (тоже управляется командной строкой)

Реализация, третья фаза: альфа-релиз


После второй фазы мой энтузиазм немного утих и я прервался с проектом больше чем на полгода, нужно было заработать денег, свалились всякие заказы по фрилансу, короче в торрендере наступила пауза, о которой я до сих пор жалею. Но тем не менее, спустя какое-то время я опять навалился на торрендер и выпустил альфу, несмотря на то, что TBdev маленько подгадил мне базу:
19/02/2014, 01:18
РАБОЧИЙ АЛЬФА-РЕЛИЗ!
Клиент обновлен, качать там же.

Доступен рендер-лич — можно создавать «джобы», т.е. задачи для рендера, грузить их на сервер и получать результаты рендера от других пользователей
Доступен рендер-сид — можно перейти на вкладку Render Seed и нажать кнопку Find Job для скачки и рендеринга «джоб» от других пользователей, и последующей отправки результатов личам
Все подробности в readme

А также, есть и не очень хорошие новости. Оказывается в трекере была установка — удалять неактивных пользователей спустя месяц оффлайна, поэтому вся база юзеров дропнулась, за исключением последних двух счастливчиков, так что большинству придется перерегиться.
Извиняюсь за этот момент, но узнать про эту настройку заранее было никак нельзя.

Финал


После альфы я уже проект от себя не отпускал, была бета, потом релиз клиента с уже добавленной рейтинговой системой, ну а сейчас разработка потихоньку продолжается в сторону улучшения сервиса, пользователи медленно но верно регистрируются, ноды добавляются в базу и чем все закончится никто не знает…

@1acc
карма
40,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (61)

  • +21
    это невероятно!
  • 0
    Гранулярность на уровне 1 кадра или части кадра?
    • +2
      Пока на уровне кадра, разбивку одного кадра на разных сидов пока считаю нецелесообразной, т.к. после подключения пользовательских рендер-ферм рендеринг «долгих» кадров должен по идее сильно ускориться.
  • +16
    Апплодирую стоя. Я всего лишь любитель, но подобные технологии смогут распределять нагрузки на простаивающее железо пользователей. Очень нужная вещь. Если вдруг решите бросить проект — не хороните код, если возможно, а передайте сообществу под свободной лицензией.
    • +2
      А если заинтерисовать корпорации этой технологии они будут платить пользователям что они рендят для них (:
      • +2
        Да даже больше! Представляю малые студии анимации с предложениями «помогите ускорить выпуск нашего фильма, загрузите торрентрендер!» или даже у больших «получите эксклюзивное видео за один день торрентрендеринга!».
        • +12
          Только ещё прикупите 3DStudio и VRay/MentalRay :)
      • +3
        Платным рендерингом наше комьюнити не очень воодушевилось, большинство заинтересовано в полностью бесплатном сервисе
        • +37
          Хорошо, что 3дмакс на халяву дают всем )
    • +3
      У меня на этот проект большие планы, бросать не собираюсь, разве только если вдруг окажется невостребованным (тьфу-тьфу).
      • +3
        Удачи, в любом случае)
  • 0
    может быть, пропустил, но уточню: любой у кого запущен клиент автоматически становится «сидером»? Или надо скачивать джобы, ставить их на рендер и потом отправлять результаты?
    • 0
      Почитал правила на сайте. Все вопросы отпали. Я в восторге!
  • +1
    Круто. Особенно здорово это вдумчивое отношение к интерфейсу и отличная компоновка.
    Жаль работоспособность не оценю — перешел три года назад на blender.
    • +1
      Надеюсь блендер-коммьюнити сделает что-то подобное.
      • +8
        www.renderfarm.fi/ например? (использует BOINC)
        • 0
          Спасибо! Вот что будет делить ресурсы компа с SETI.
  • +3
    Вот на основе слияния с подобными полезными реализациями p2p использования цифровых мощностей и должны создаваться криптовалюты будущего.
  • 0
    Круто, даже не думал что мой движок может быть использовать как ТАКАЯ частичка чего-то большего :)

    З.Ы: 1acc, рекомендую вытянуть поправки к безопасности с GitHub (ссылка на форуме движка).

    З.Ы 2: У тебя какой-то Notice/Warn на takesignup.php выпадает перед редиректом.
    • 0
      Да, что-то есть вроде MySQLное, посмотрю
  • 0
    О, Yuna? Прими мои благодарности, я в процессе разработки, кстати, думал не законтачиться ли мне с тобой, но все вопросы удалось решить самостоятельно, основная в будущем проблема — как сделать из русского трекера мультиязычный. Но это подождет, пока ориентируюсь только на русскоязычное пользователей. Поправки заберу, спасибо.
  • +1
    А рейтинг пользователя как измеряется? Всё-таки у всех компьютеры разные плюс сложность сцены тоже у всех разная. Тут не получится просто мегабайтами отделаться, как в обычном торренте.
  • +2
    Для популяризации идеи вам бы начать распространять виртуальную машину с полностью установленным софтом (если это не будет противоречить лицензиям на 3ds max).

    Думаю, найдётся немало желающих помочь, но далеко не каждый решится водружать на свою машину 3ds.
    А вот скачать VirtualBox (или аналоги), имедж виртуалки и нажать на кнопочку «запустить виртуальную машину» осилит уже значительно больше народу :)

    p.s. Идея имеет смысл, если задач на рендер будет больше, чем имеющихся ресурсов у коммьюнити… подозреваю, что это может случиться очень быстро если идея взлетит :)
    • +1
      Вообще для популяризации идеи мне наверное будет достаточно просто распространить ее на большое количество пользователей макса, а ваш вариант какой-то слишком сложный. И в проекте скорее работает не принцип безвоздмездной помощи, а принцип «ты мне — я тебе». Т.е. как и в обычных трекерах с помегабайтным рейтингом.
    • 0
      Было б можно — я б присоединился к такому.
      Дома почти постоянно простаивает десктоп c i7-3770K и 32Г на борту (так и просит что-нибудь порендерить :) ).
      Что нужно — это свободный рендерер (чтоб не нужно было думать о лицензии, и чтоб взлетел на убунте, которая сидит на том самом десктопе).
      А дальше — жобы, ядра — без проблем!
  • +1
    Рейтинг в минутах — если ты рендерил чужую сцену 10 минут, значит эти 10 минут тебе прибавляются, а у автора сцены вычитаются, есть еще всякие нюансы, подробнее написано в правилах на сайте проекта. Отданные и скачанные мегабайты вообще никак не учитываются, просто картинка в посте еще от альфа-версии.
    • 0
      Рейтинг в минутах — если ты рендерил чужую сцену 10 минут, значит эти 10 минут тебе прибавляются, а у автора сцены вычитаются
      Нет ли здесь несправедливости в случае сильно различных мощностей у двух сторон?
      • 0
        Есть, но автор сцены сам определяет, какие ноды могут рендерить его джобу, а какие нет, именно с целью недопуска медленных рендер-сидов к его джобе. А если допустил — сам виноват.
  • +1
    Вообще для популяризации идеи мне наверное будет достаточно просто распространить ее на большое количество пользователей макса, а ваш вариант какой-то слишком сложный. И в проекте скорее работает не принцип безвоздмездной помощи, а принцип «ты мне — я тебе». Т.е. как и в обычных трекерах с помегабайтным рейтингом.

    З.Ы. Никогда задач на рендер не будет больше, чем имеющихся ресурсов у комьюнити.
  • +1
    Когда баловался в 3DStudio тоже задумывался о таком, лет эдак 7 назад. Но одно дело думать о чем-то, другое — делать. Вы делаете отличное дело, не бросайте!
  • 0
    Идея хорошая, только никто не волнуется что модели можно будет перехватить? или это не страшно?
    • 0
      Можно заводить себе друзей и позволять рендерить только им, это 100%-ая защита от кражи сцен. А в общем случае архивы шифруются, сцены удаляются при отмене рендера и после завершения джобы, кадры сразу пакуются в архив и удаляются, короче чтобы что-то достать нужно знать где караулить и буквально караулить файлы, когда они появятся, дело это довольно муторное. Защиту улучшаю с каждым релизом и надеюсь на ответственных пользователей, которые не будут скрывать от меня разнообразные хакерские лазейки, если вдруг будут находиться способы копаться в чужих сценах. И это ведь я еще пароли на открытие сцен не внедрил (можно и такое сделать)
      • +3
        То, что попало на компьютер пользователя, уже скрыть не получится, т.к. всё равно нужно расшифровать, потом достаточно повесить хук на нужные директории и скопировать созданные файлы. Тут явно нужно говорить, что либо друзьям, либо считайте, что отдали в открытый доступ.
        • +1
          Не все пользователи трекера такие ушлые хакеры и с копированием файлов тоже не все так просто, т.к. файл сцены живет на компе пользователя только короткое время необходимое на открытие сцены. Текстуры и прочие файлы — да, их скопировать можно без проблем. А вообще все пользователи предупреждены, что сцены могут быть украдены, тут я ничего не скрываю.
  • 0
    Очень круто. Как-то давно читал, но не думал что проект доживёт до реализации!
    Поздравляю, вы это сделали!
    Надо еще по профильным коммюнити популяризовать.

    P.S. Смотрю там и корона есть в некоторых нодах. Т.е. рендерить можно чем угодно?
    • 0
      в принципе да
  • 0
    Это великолепно! Сейчас, к сожалению, давно 3ds MAX не занимаюсь: времени нет, но как только вернусь к нему — обязательно попробую!
  • 0
    Вроде бы у 3d Max есть встроенный режим работы в качестве рендер-сервера.
    • +2
      Где? Есть backburner для локальной рендер-фермы и только.
      • 0
        Именно про backburner я и пытался вспомнить.
  • 0
    Спасибо, довольно интересная получилась история.

    >>Оказывается в трекере была установка — удалять неактивных пользователей
    Я надеюсь, что после этого вы научились делать резервную копию базы пользователей?

    Успехов Вам в развитии сервиса!
  • 0
    Я так понимаю мюТоррент используется только для транспорта? А как происходит собстенно генерация контента для транспорта?

    Вот я «заказчик», лич. Я поставил задачу отрендерить сложную сцену. Мою сцену скачало 100500 «сидов». Как регулируется что пять сидов не рендерят одит и тот же кадр? Они между собой или черз сервер как-то обмениваются интформацией? Потом каждый отрендеренный кадр нужно как-то вернуть заказчику. Для этого я так понимаю создаётся вторая раздача, на каждый кадр своя или одна на все кадры или как?

    И собственно главный вопрос — конечный кадр идёт всегда от одного источника (того кто кадр отрендерил) одному получателю (тому кто рендер заказал). Сцена идёт от одного заказчика каждому исполнителю. Вопрос — зачем вам собственно торрент? Или размеры файлов таковы что через центральный сервер ими обмениваться слишом накладно? Учитывая что сцены с должной сноровкой несложно украсть, маловероятно наличие многих-многих рендеров на раздаче, а значит обмен через сервер был бы и надёжнее и «контролируемее»
    • 0
      Каждый сид перед рендерингом отправляет запрос на трекер по поводу свободных кадров и ему отдаются те, которые другие сиды еще не забрали.
      Для отдачи, создается новая раздача уже от сида к личу, да — покадрово.

      По поводу главного вопроса — нет, не так, конечный кадр уходит всем участникам рендеринга данной джобы, т.е. все сиды получают все отрендеренные на текущий момент кадры, а лич скачивает их со всех сидов — вот за этим и нужен торрент, чтобы если какой-то сид отвалился, его кадры не пропали. Вообщем торренты работают в обе стороны — и для отдачи джоб и для отдачи кадров и да, размеры сцен таковы, что только через центральный сервер обмениваться будет нерационально и очень дорого по траффику.
      • 0
        Тогда всё понятно. Как по мне использовать стандартный торрент клиент и стандартный торрент трекер удобно для старта из соображений простоты отдельных операций, но если идея получит популярность имхо это тупиковый вариант, на .net или другом языке можно и собственный шаринг сделать т.к. функция транспорта у вас яляется не самой главной. А учёт по времени с фильтром по ресурсам имхо не очень справедливо. Во-первых информация о доступных ресурсах не проверяется насколько я понял, во-вторых несправедливо равно оценивать единицу времени 12ядерной машины с 128gb памяти и 4 ядра+16gb. Не говоря уже о GPU ускорениях, разной фоновой загруженности и тому подобном

        Но идея имхо зачётная, и рендер фермы могут в свободное от заказов время быть полезны
        • 0
          Проверяется информация о доступных нодах. А насчет несправедливости — именно как раз из-за фоновой нагруженности в системе рейтинга оценивается только время, а не железные характеристики, т.к. мало ли что у сида мощная нода, а может он параллельно какое-нибудь кодирование видео запустил или у него еще несколько максов открыты — это никак не проверишь. Поэтому в расчет идет только время рендера и никаких бонусов к рейтингу за мощное железо система не дает, за исключением того, что мощная нода удовлетворяет требованиям большего количества джоб, быстрее их рендерит, соответственно и рейтинг у нее больше.

          з.ы. с собственным шарингом слишком много будет возни, лучше использовать готовое и уже проверенное временем.
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      На самом деле порог не такой уж высокий. Нужно установить3ds max, пойти на сайт торрендера, зарегистрироваться и поставить клиент. В видеоролике все подробно показано.
      • 0
        И отрендерить его замечательную текстурку дефолтным рендерером? :) Кстати, вы вместе со сценой настроки и тип рендерера притаскиваете на машину?
        • +1
          Да, я все «притаскиваю» и плаги, и визуализаторы, и версии макса плюс железные требования, так что если у какого-то лича джоба под врей, то и отрендерить ее смогут только те, у кого он поставлен. Более того, если требования джобы и рендер-ноды не совпадают, то нода даже скачать эту джобу не сможет.
  • +1
    Шикарная идея, реализация отшлифуется. Монетизация вообще очевидна — давать возможность пользователям без рейтинга оплачивать рейтинг, а сидерам — зарабатывать. Кстати, это выравняет дисбалланс — мне, для того, чтобы отрендерить анимацию, нужно отрендерить чужую анимацию. Поэтому нужны люди, которые не будут использовать собственный рейтинг (с железными возможностями, но без рендер-потребностей, например геймеры).

    Мой офисный i7 4770k иногда скучает по ночам — думаю, присоединюсь (6 лет стажа в архитектурной визуализации).
  • 0
    Вы просто прелесть!..
  • 0
    Идея крутая, но не совсем понятен механизм защиты сцен.
    Всё равно же перед стартом рендера сцена с текстурами должна собираться в правильную и,
    соответственно, где-то находиться в оригинальном виде. В чём принципиальная сложность её извлечения?

    И ещё, насколько понимаю, сейчас распределение идёт по кадрам (участники считают кадры целиком),
    планируется ли возможность распределения одного огромного кадра на бакеты, с раздачей LC и обменом IRmap,
    как в vray distributed rendering?
  • 0
    Идея модификации сцен и текстур с целью защиты была только в самом начале, потом я от нее отказался именно по причине того, что рано или поздно сцена должна собраться в правильную. Сложность в том, что сцена из архива сразу попадает в макс и стирается. Т.е. файл сцены пустой и она в только максе сидит, но сохранить ее оттуда нельзя, т.к. запущен рендер, а сразу при отмене или окончании рендера происходит резет сцены.

    Планируется сначала подключение локального сетевого рендеринга, а потом буду смотреть насчет разбивки кадров на бакеты и т.п.
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      Нет, это совершенно разные типы вычислений.
      Под «классический» рендер нельзя задействовать даже GPU.
      • 0
        Вы можете сделать свою внутреннюю валюту. То есть, у вас это щас и так частично есть в виде «рейтинга». Сделайте, чтобы этим можно было пользоваться как полноценной валютой — обмениваться, продавать, покупать за неё больше процессорного времени у сети. Так вы бы могли монетизировать сеть, привлечь в неё крупных игроков.
        • 0
          Непонятно преимущество такой схемы перед давно существующими рендер-фермами, где ГГц/час стоит несколько центов, всё организовано, настроено и к тому же NDA.
          Но для студенческих проектов идея отличная. А для минимальной защиты можно всю сцену сколлапсить и текстуры запечь.
          • 0
            Преимущество в том, что каждый участник получает долю от заработанного сетью, и у сети нет какого-то одного владельца.
  • 0
    Жаль, что для участия нужно столько всего устанавливать. Интересно, а можно ли пользоваться максом без включения, как-нибудь через консоль?
    • 0
      врядли

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