Pull to refresh

История создания торрент-рендера для 3ds max

Reading time5 min
Views62K


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

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

Финал


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

Tags:
Hubs:
Total votes 199: ↑192 and ↓7+185
Comments61

Articles