Pull to refresh

Молекулярная биология. Houdini. NVIDIA 3080. Коронавирус vs иммуноглобулины

Reading time12 min
Views6.7K

Ссылка на наш ролик

Это мой второй текст на Хабре. Он плавно вырос из первой статьи «Молекулярная биология и Houdini летом двадцатого».

Мы закончили наш новый (второй) ролик 12 апреля 2021 года, в День космонавтики. Дата получилась случайной — я очень хотел закончить работу в понедельник. Но это оказалось идеальное совпадение.  

Поехали!

Вот приблизительный диалог, который состоялся у нас с Валерией (молекулярный биолог) на старте проекта:

— А давайте сделаем английскую озвучку к нашему ролику про иммуноглобулин?

— А давайте.

— И заменим ротавирус на коронавирус. Они же очень похожи. 

— Да.

— Часть сцен нам даже не нужно будет переделывать. 

— Да.

— И перейдём с CPU-рендера на GPU. Откажемся от Blender в пользу DaVinci Resolve. Тайминг у нас останется тот же — одна минута. Звук и вирус. Думаю, за пару месяцев мы всё закончим.

— Ага, наверное.

Мы делали ролик 5 (пять) месяцев. Я мог работать по 2 часа в день с 12 до 2 ночи и не каждый день. Длительность ролика увеличилась в 3.5 раза. Увеличение сложности проекта (по сравнению с первым нашим роликом) моим внутренним ОщущаторомСложности оценивается, как шестикратная.

Можно сказать, что весь проект (ненаучная часть) состоит из фрагментов, которые слабо связаны и потому их можно делать параллельно. В идеале — разными людьми. 

За разных людей у нас был я. 

Какие это фрагменты? Сториборд. Переход с Mantra (внутренний CPU-рендер Houdini) на RedShift (GPU-рендер, приобретается отдельно). Решение задачек средствами Houdini (обожаю эту часть). Рендер. Цветовое решение. Озвучка. Музыка и звуки. Монтаж в Resolve (к счастью, есть free-версия). 

Я разобью повествование на разрозненные части. Хотя это, на самом деле, конечно, суп — где всё влияет на всё. И мы постоянно перемещались от одного к другому, постепенно меняясь. 

Закадровый голос влияет на монтаж. Внутренний ритм монтажа влияет на контекст озвучки. В одном месте цвет мембраны розовый. В другом серый. Почему? Как сделать, чтобы этот переход был понятен? И так далее...

Раскадровка (сториборд)

Мы сделали раскадровку. В неё попали ключевые сцены, которые нужно показать обязательно. Это сам коронавирус. Способ его проникновения в клетку. И крупно клетки, облепленные множеством вирусов. Всё остальное мы хотели взять из первого ролика. 

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

 Сториборд. Вирус прикрепляется к клеточному рецептору АСЕ2.
 Сториборд. Вирус прикрепляется к клеточному рецептору АСЕ2.
Сториборд. Серые круги — клетки. Чёрные — вирусы. Белые — иммуноглобулины или антитела.
Сториборд. Серые круги — клетки. Чёрные — вирусы. Белые — иммуноглобулины или антитела.

Работа

Я за лёгкость. За юмор. За улыбку. Поэтому мне очень симпатичны Фейнман, Сапольски и Северинов. Одновременно с этим я понимаю, что я не могу с хохотом заниматься молекулярной биологией потому что я некомпетентен в этом (в молекулярной биологии). Для этого я делегирую ответственность в принятии решений молекулярному биологу. Я также не компетентен в английском. Тогда появляется переводчик. И каждый из них принимает решение в своей зоне ответственности. Я лишь собираю из этого всего пазл. Не вмешиваясь. В моей вселенной командная работа движется в сторону, где роль руководителя стремится к 0. 

Мы хотим делать и научно достоверные и красивые работы. Чтобы школьнику, студентке, взрослому было интересно. Поэтому за научную достоверность у нас молекулярный биолог Валерия Архипова. И большинство частей вируса и клеток — это всамделишные атомарные запчасти, полученные с сайта www.rcsb.org.

Мы пошли по пути создания релиза целого ролика и постепенного (слой за слоем) его улучшения. Всего было сделано 5 релизов и 6 — финальный. Первый имел длину полторы минуты. Последний — три с половиной. 

Вот, как выглядит одна и та же сцена в разных релизах:

Одна сцена в разных релизах.
Одна сцена в разных релизах.

Первый релиз сделан на демоверсии RedShift. Это видно по ватермаркам. Увидев достоинства от перехода на GPU-рендер, я купил лицензию.

Но постойте! А как, почему длительность ролика увеличилась с одной минуты до трёх с половиной?! Был же сториборд. Где все ключевые сцены утверждены. 

Я неслучайно написал, что в сториборде (моём) нет музыки, озвучки и эстетики. И когда я собрал модель вируса, да ещё и на атомарном уровне, то мне захотелось всё это показать поближе, порассматривать. 

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

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

RedShift

Считать картинки можно на процессоре, как это делал я в первом ролике. А можно на видеокарте. По тестам разница в скорости 5-10 раз не в пользу процессора. Какие очевидные плюсы и минусы от перехода на GPU-рендер? Ну, думал я, из очевидных плюсов, во-первых, скорость. Во-вторых, скорость. Из минусов? Память. У видеокарты её сильно меньше, чем общей памяти. Но ведь у меня очень простые сцены! Даже текстур нет. 

И я попробовал.

На моей новёхонькой 3080 в демоверсии RedShift кадр в 2к с драфтовыми настройками считался секунд 5. Это было удивительно! Mantra, славящаяся своей неторопливостью, справляется секунд за 30 (на 16 ядрах, между прочим). Конечно, я тут же перешёл на этот рендер! И с самого начала проекта второй ролик делался уже в RedShift. 

Почему Redshift? Выбор был между Octane, Vray и Arnold. От Vray я отказался сразу. Я работал с этим рендером в 3dsmax и мне не нравится обилие настроек и хаотичность результата. Arnold в тестах показывал результаты сравнимые с Мантрой и меня отпугнул факт, что этот рендер выкупила компания Autodesk. Octane показался мне очень сырым. RedShift — самый часто используемый рендер в моушн графике. По нему много туторов и развито сообщество. Наконец, сама компания Maxon, которая приобрела RedShift, мне очень симпатична. 

Я, к сожалению, не вёл дневник в процессе работы, как это делал, например, Фёдор Овчинников, когда создавал книжные магазины, а потом придумал сделать Додо-пиццу. Поэтому могу вспомнить только ретроспективно.

У RedShift свои материалы, свет. И свои алгоритмы работы с instance и частицами. Со всеми граблями и айсбергами я знакомился в процессе работы.

Модель вируса или мембраны — это, по сути, множество атомов. Или шариков. Есть два способа эти шарики получить. Буквально нарисовать сферу нужного диаметра и порендерить её. Или работать с частицами. Тогда на экране мы видим множество точек, а вот на рендере вместо них появляются сферы. Оп! 

В случае работы с частицами мы получаем массу преимуществ. Вьюпорт не тормозит. Не нужно следить за детальностью сферы ближний и дальний план отрабатываются на рендере. Объект ничего не «весит». Он буквально состоит из координат точек и всё. А значит подготовка к рендеру занимает меньше времени. Жмём рендер!

RedShift. Шейдер одинаковый. Слева частицы. Справа сферы. WTF?
RedShift. Шейдер одинаковый. Слева частицы. Справа сферы. WTF?

Эээ… но подождите! Почему они разных цветов?! И что это за чёрные швы в местах, где сферы пересекаются? Для швов я нашёл решение. Они убираются за счёт операции булеан. Оп! Через две минуты boolean посчитался и чёрные швы исчезли. Можно рендерить! Секундочку! Но ведь весь рендер занимает 5 секунд. А булеан 2 минуты. Да. Но ведь работает. Нет. Спасибо, но нет.

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

Очень часто в сцене используются одинаковые части. Скажем, шипы у вируса. Это же, по сути, один шип, который рандомно развёрнут и расставлен по сферической мембране. И если мы так сделаем, то в этом случае мы получаем экономию по памяти на рендере и шустрый вьюпорт. Для этого у нас есть instance-объекты. Правильно? Логично?

Я тоже так думал. И у меня ушёл ещё один месяц на злость, смирение, слёзы и принятие другой реальности.

В RedShift (у меня) инстансные объекты из частиц/сфер рендерятся вот так:

RedShift. Слева без инстанс объектов. Справа с instance-объектами (сферы или частицы). 
RedShift. Слева без инстанс объектов. Справа с instance-объектами (сферы или частицы). 

Видите? Свет. Слева он ровный и заполняющий. А справа он у каждого объекта свой и рандомно повёрнут. Хотя условия освещения в сцене одинаковые. Я не смог решить эту проблему. Кроме как отказаться от instance-объектов и упаковки. А учитывая, что атомов в сцене миллионы, то от сфер пришлось отказаться в пользу частиц. Памяти видеокарты (10Гб) не хватало. К слову, оперативной (64Гб) при таком подходе не хватало тоже. 

NVIDIA 3080 и RedShift. В умелых руках и 10Гб мало. Не instance-геометрия крашит рендер. 
NVIDIA 3080 и RedShift. В умелых руках и 10Гб мало. Не instance-геометрия крашит рендер. 

Уже после проекта мы обсудили эту особенность со Стасом Рыхликовым и он предположил, что дело в «нежности» объектов, которые мы копируем. О чём речь? Нужно убрать все ноды трансформаций и все другие ноды и тогда, возможно, всё будет хорошо. 

К этому нужно добавить ещё одну особенность рендера на видеокарте. В случае с процессором я мог выделить нужные мне ядра, поставить приоритет и делать какие-то дела параллельно. Скажем, одновременно с рендером можно открыть вторую копию Houdini и решать там технические задачи.

При рендере на видеокарте так не получится. Рендер крашится. Или замедляется. Что, если подумать, логично. Но неприятно, да. 

У меня не было цветового решения объектов. Я выкрашивал вирус в цвет окисленной меди (бирюзовый) и смотрел. Красиво? Красиво. А остальные объекты в какой цвет красить будем? И нужна цветовая гармония, настроение. Я остановился вот на такой палитре. 

Цветовая палитра ролика. 
Цветовая палитра ролика. 

И я нашёл решение, которое мне очень нравится. В жизни объекты, которые мы видим в ролике, настолько малы. что они меньше длины световой волны. Поэтому они не окрашиваются в цвета. Они чёрно-белые. Исключение составляет клетка. Она достаточно большая и уже может окрашиваться. Фотографии микроскопии, которые мы видим, — раскрашены вручную. Я люблю чёрно-белую фотографию. Она даёт пространство воображению. В том числе и поэтому почти все рендеры в ролике — чёрно-белые. Раскрашивал я их на монтаже. И такой подход, конечно, даёт огромное пространство для цветового решения объектов.

Ниже финальные рендеры из проекта. В оригинале рендеры в 2к. Для уменьшения трафика размер картинок уменьшен до 1к.

NVIDIA 3080. Redshift. Финальный рендер 2к. Атомарная модель коронавируса. Время рендера до 3 минут.
NVIDIA 3080. Redshift. Финальный рендер 2к. Атомарная модель коронавируса. Время рендера до 3 минут.
NVIDIA 3080. Redshift. Финальный рендер 2к. Атомарная модель коронавируса. Время рендера до 4х минут.
NVIDIA 3080. Redshift. Финальный рендер 2к. Атомарная модель коронавируса. Время рендера до 4х минут.
NVIDIA 3080. Redshift. Финальный рендер 2к. Эпительная клетка «облепленная» экземплярами коронавируса(порядка.150 000). Время рендера до 2 минут.
NVIDIA 3080. Redshift. Финальный рендер 2к. Эпительная клетка «облепленная» экземплярами коронавируса(порядка.150 000). Время рендера до 2 минут.
NVIDIA 3080. Redshift. Финальный рендеры 2к. SSS + DOF + Motion Blur. 1-4 минуты на кадр. Виньетирование добавлено в постпродакшене.
NVIDIA 3080. Redshift. Финальный рендеры 2к. SSS + DOF + Motion Blur. 1-4 минуты на кадр. Виньетирование добавлено в постпродакшене.

Я оценил мощь 3080 и RedShift, когда нужны были тесты, драфты, финальные рендеры и потом куча перерендеров. Дело не только в скорости. Фактически, финального качества ролик считался те же 7 дней. Только это уже был ролик не в одну минуту, а в три с половиной. Такая скорость позволяет перманентно находится внутри проекта. Не выпадать из него на время рендера. И это очень и очень ускоряет работу. Я сэкономил огромное количество времени на том, что тесты считались по 5 секунд кадр, а не 30. Кажется и то и то отлично. Только в первом случае для секвенции в 200 кадров (менее 10 секунд) я получал результат через 20 минут. А во втором почти через 2 часа. И в этом важнейшее отличие между процессором и видеокартой. 

И не забываем о масштабируемости. У меня одна видеокарта. Если их будет больше, то время рендера падает линейно. А при подключении NVLink память у видеокарт (не более двух) становится общей — это очень классный бонус! 

Для меня возврат к рендеру на процессоре в схожих задачах он, ну, невозможен, наверное. Процессор апгрейдить уже некуда (16 ядер AMD 3950). А вот видеокарт мало не бывает. 

Houdini

Я люблю Houdini. И люблю решать задачки. И технические задачи, в отличие от задач эстетических, могут решаться участниками одинаково. Скажем решение, уравнения вида x = 5 — 2 будет иметь одинаковый вид для любого участника процесса решения. Школьница, студент, мама и аспирант решат его одинаково. Более того, решение будет понятно и принято всеми. 

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

Поэтому решение технических задач мне нравится. А пиксельхантинг — нет.

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

Клеточная мембрана. Вот как она выглядит на картинке из Википедии.

Википедия. Клеточная мембрана.
Википедия. Клеточная мембрана.

Она двухслойная. Мембрана состоит из различных липидов, но в основном — фосфолипидов. Таких «головастиков», головы наружу (они гидрофильные), а хвостами внутрь (гидрофобные). И этих фосфолипидов очень и очень много. Плюс мембрана изгибается — «дышит». Это даже на рисунке видно. И есть множество всяких каналов, которыми для моего рассказа можно пренебречь. 

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

Эндоцитоз. Способ проникновения вируса в клетку.
Эндоцитоз. Способ проникновения вируса в клетку.

Давайте представим, что мы шариком тычем в тонкий лист картона. Картон, как не особо эластичная поверхность, порвётся. Но клетка не рвётся. Значит она эластичная. Хорошо. Заменим лист картона на что-то тягучее. Жвачку. Или слайм. Теперь наш шарик прекрасно входит и ничего не рвётся. Но погодите-ка. Ведь жвачка и слайм тянутся и в месте натяжения толщина вещества истончается. И, во-вторых, не происходит окутывания шарика. Эээ… значит мембрана по свойству не плотное вещество, но и не тянется. И тут я словил инсайт. Мембрана жидкость! Именно этим объясняется её одинаковая плотность и не растяжимость. И теперь, если это жидкость, значит всегда и везде расстояние между фосполипидами одинаково. Жидкость не сжимаема. 

И получается, что вирус растягивает мембрану, но одновременно с этим происходит её восполнение. Фосфолипиды как бы прибывают извне. Текут. И вот эту задачу растяжение, но с сохранением расстояния между фосфолипидами, мне и нужно было решить.

К этому прибавляется проблема свойственная 3d-анимаций — фликинг или мерцание кадров. Это явление возникает, если у нас низкие настройки сглаживания рендера или меняется численность объектов. На статичной картинке этого эффекта, конечно, не видно. 

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

Возможно, что задачу можно решить динамикой, т.е. буквально симуляцией тонкой жидкостной плёнки. И да, когда я говорю, что решал эту задачу два месяца, то одновременно с этим я решал и массу других задач. Помните про суп?

Озвучка

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

Поэтому в нашем втором ролике к работе со звуком я приступил задолго до финальной версии. Мы заранее приняли решение, что озвучка будет на английском. Рендеры считались в 960х540 в драфтовом качестве. И я держал в голове возможность отрезать или наращивать секвенции. 

Я сделал четвертую версию ролика. Мы написали текст на английском для озвучки. Затем пригласили в команду переводчика - Александру. 

Дальше молекулярный биолог и переводчик вместе работали над текстом. Я никак не участвовал и не вмешивался. Забрав конечный результат я отдал его на озвучку женщине-роботу. Параллельно я отправил запрос на озвучку живым нативным диктором. И ждал ответа по стоимости работ. 

Когда женщина-робот озвучила текст я сел за монтаж. Видео и звук. О нет! Эти ребята совсем не хотели дружить. Даже мои возможности примирить их ускорением или замедлением секвенций не особо помогали. В озвученных предложениях появились многозначительные паузы или предложения наступали друг другу на ноги. Нужно всё перемонтировать. Я очень расстроился. 

Пришёл ответ по стоимости участия живого диктора. 27000 рублей. Таких финансовых возможностей у меня не было. Я ещё немножко огорчился. Потом ещё. Пока увы совсем ничего не осталось. 

Было решено оставить голос робота-женщины. И я приступил к новой версии монтажа.

DaVinchi Resolve

Монтаж и звук для первого ролика сделан в Blender. После этого опыта я возжелал сменить коня. А какие есть варианты? Чтобы под Windows. При этом композитинг и монтаж — это разный софт. 

  1. After Effects + Premiere Pro.

  2. Sony Vegas + ?

  3. Davinci Resolve + Fusion.

  4. Nuke + ?

 Я выбрал Resolve. Во-первых, это бесплатно. У производителя есть фришная версия софта. В платной добавлена куча плагинов, которые мне не нужны. Fusion интегрирован с Resolve. Поэтому в одном софте можно делать и композитинг и монтаж. Необходимости перекидывать из одного софта в другой, как было бы во всех остальных вариантах — нет. Fusion — нодовая составляющая, что близко к концепции Houdini. Во-вторых, — мне очень-очень понравился сам софт. 

DaVinci Resolve. Вот, как выглядит четвёртая версия ролика. Проект мы закончили на шестой.
DaVinci Resolve. Вот, как выглядит четвёртая версия ролика. Проект мы закончили на шестой.

Resolve прекрасно работает с exr. Очень быстро рендерит секвенции на таймлайне.

Вот пример раскрашенного рендера. Помните, я в части про RedShift рассказывал, что почти все рендеры чёрно-белые?

DaVinci Resolve. Коронавирус. Раскрашенный чёрно-белый рендер. 
DaVinci Resolve. Коронавирус. Раскрашенный чёрно-белый рендер. 
DaVinci Resolve. Коронавирус и поверхность клетки. Вирус прикрепляется к АСЕ2 рецептору.
DaVinci Resolve. Коронавирус и поверхность клетки. Вирус прикрепляется к АСЕ2 рецептору.
DaVinci Resolve. Эндоцитоз. Коронавирус попадает в клетку. 
DaVinci Resolve. Эндоцитоз. Коронавирус попадает в клетку. 
DaVinci Resolve. Иммуноглобулин IgG.
DaVinci Resolve. Иммуноглобулин IgG.
DaVinci Resolve. Иммуноглобулин IgG.
DaVinci Resolve. Иммуноглобулин IgG.

Что дальше?

Хочу выразить благодарность всем, кто участвовал в проекте и всем, кто помогал мне в чатиках, когда я не знал, как решить задачу или сталкивался с чем-то странным. Я постарался никого не забыть и упомянуть всех в титрах и благодарностях к ролику. 

Я устал. Но это приятная усталость завершения. Без разрешения себе и другим ошибаться я устал бы ещё больше. И я вижу, что столь сложные и длительные (по таймингу) проекты требует большего участия, чем пара часов в день.

Я хотел добавить в название статьи фрактальность. Причём же здесь фрактальность? Ролик же про коронавирус и иммуноглобулин. Ну да. Но сколько можно? 

Когда я решаю какую-либо задачу, то создаю некую модель реальности. Скажем мембрана клетки. Достаточно ли изобразить её ровной поверхностью, которую мы гнём? Достаточно. Но давайте приблизимся. И уже нужны фосфолипиды. Хорошо. А если мы захотим сделать сечение? Тогда нужно показать бислойность мембраны. А если добавить эндоцитоз? Тогда нужно сделать жидкую мембрану. 

И вот это бесконечное погружение внутрь. Фрактальность. На следующем уровне абстракции понадобится подключение динамики Houdini. Чтобы фосфолипиды учитывали положение соседей и не протыкали друг друга. Погрузившись ещё глубже нам понадобится сторонний софт, занимающийся молекулярной динамикой: GROMACS, CHARMM, NAMD и другие. Копнув еще глубже, мы увидим, что атомы — это, оказывается, совсем не шарики. 

Мы очень сильно выросли на этом проекте. И видим куда расти дальше. И хотим этого. 

P.S. 

Если у вас есть задачи, в которых мы вместе можем достичь большего - напишите мне.

Пока я работал над статьёй закончился конкурс на Биомолекула. Мы участвовали с нашим первым роликом. И выиграл приз — годовую подписку на OctaneRender.

Tags:
Hubs:
Total votes 35: ↑35 and ↓0+35
Comments21

Articles