В этом туториале, созданном с использованием Blender версии 3.3, мы посмотрим, как создать анимацию эритроцитов, движущихся внутри кровеносного сосуда.
Видеоверсия этого руководства в настоящее время недоступна на этом языке. Видео на английском языке доступно по этой ссылке:
Текстовая расшифровка видео
Всем привет!
В этом туториале, созданном с использованием Blender версии 3.3, мы посмотрим, как создать анимацию эритроцитов, движущихся внутри кровеносного сосуда.

В ходе урока мы научимся моделировать кровеносный сосуд и эритроциты, генерировать эритроциты с помощью системы частиц типа Emitter и заставлять их следовать по траектории сосуда с использованием Force Field.
Начнем с моделирования кровеносного сосуда в полностью пустой сцене.
Сначала в виде Top, предпочтительно в ортографической проекции, мы добавляем кривую Bezier, которую моделируем, добавляя и перемещая пару контрольных точек в Edit Mode.
Эта кривая представляет путь кровеносного сосуда, и для наших целей мы можем оставить ее в плоскости 2D. Именно поэтому я смотрю на сцену сверху, используя ортографический вид.

После моделирования пути мы возвращаемся в Object Mode и добавляем в сцену Bezier Circle. Он будет представлять профиль пути, который мы сохраним круглым. Позже мы исказим внутренние стенки пути с помощью модификатора Displace.

Чтобы задать Bezier Circle в качестве профиля для Bezier Curve, которую, кстати, для наглядности мы переименовываем в Vessel Path, нужно выбрать Vessel Path, открыть вкладку Object Data в редакторе Properties, затем перейти в раздел Geometry - Bevel - Object и указать созданный Bezier Circle в качестве объекта Bevel.

Если профиль выглядит слишком большим или слишком маленьким, мы можем изменить его размер, просто масштабируя Bezier Circle. Как уже упоминалось, нет необходимости редактировать профиль Bezier Circle в Edit Mode, потому что круглый профиль отлично подходит.
В моем случае кровеносный сосуд оказывается невидимым при просмотре изнутри. Это происходит потому, что в меню Viewport Shading включена опция Background Culling.
Эта опция скрывает полигоны, нормали которых не направлены в сторону наблюдателя. В некоторых случаях она может быть полезной, но не в данном, поэтому я ее отключаю.

Давайте сделаем копию пути с помощью SHIFT+D и Enter, назвав ее, например, Path Copy, и временно скроем ее. Эта копия будет полезна по двум причинам:
-
для безопасности, как резервная копия пути, потому что вскоре мы преобразуем его из Curve в Mesh;
-
и как копия исходной кривой, чтобы позже использовать ее в качестве пути, по которому будут двигаться эритроциты.

Путь необходимо преобразовать в Mesh, потому что таким образом мы сможем применить к нему модификатор Displace, который исказит стенки кровеносного сосуда и сделает их визуально более интересными.
Преобразование можно выполнить с помощью правого клика и команды Convert To Mesh, но я хочу обратить внимание на один момент. В моем случае вершины кругового профиля расположены гораздо плотнее, чем сегменты, из которых состоит путь.

Поскольку я предпочитаю, чтобы полигоны были как можно более квадратными, я отменяю операцию преобразования с помощью CTRL+Z в Object Mode, затем добавляю промежуточные контрольные точки там, где исходные контрольные точки находятся слишком далеко друг от друга и имеют слишком длинные ручки, которые создают прямоугольные полигоны.

Затем я выполняю преобразование в Mesh, как упоминалось ранее, с помощью правого клика и команды Convert To Mesh.
Далее я добавляю к объекту модификатор Displace, задавая в качестве текстуры Clouds с небольшим значением Scale, чтобы создать множество искажений.

Однако результат получается неудовлетворительным. Это связано с тем, что сетка, полученная после преобразования, недостаточно «плотная», то есть в ней слишком мало вершин и полигонов для деформации. Чтобы решить эту проблему, я добавляю к объекту модификатор Subdivision Surface как минимум с 2 уровнями подразделения.
Модификатор Subdivision Surface необходимо расположить выше модификатора Displace. Порядок важен, потому что сначала сетка подразделяется с помощью Subdivision Surface, а затем искажается модификатором Displace.

Теперь изменяем значения Size у текстуры и Strength у модификатора Displace, пока не получим результат, который нас устраивает. При необходимости можно попробовать и другие текстуры для Displace или добавить модификатор Smooth последним в стеке модификаторов, чтобы немного сгладить искажения и завершить этап моделирования кровеносного сосуда.

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

Однако, чтобы увидеть предварительный результат, сначала нужно выполнить две операции:
-
установить черный цвет фона виртуального мира в разделе World - Background - RGB Color,
-
и добавить как минимум пару источников света Point Light внутри кровеносного сосуда.

Добавить Point Light проще всего из вида Top Ortho. Я рекомендую размещать источники света рядом с изгибами и сначала создать только один источник, а затем продублировать его с помощью ALT+D, чтобы получить связанные копии, которые будут наследовать параметры первого источника. Это может быть полезно, потому что поначалу мы не будем знать, какую интенсивность задать свету, и нам придется экспериментировать. При использовании связанных копий мы можем менять интенсивность и цвет только одного источника света, и те же настройки будут автоматически применяться ко всем связанным копиям.

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

Мы можем посмотреть предварительный результат рендеринга с помощью Z - Rendered в 3D Viewport, настраивая параметры освещения до тех пор, пока не достигнем желаемого результата.

На этом этапе мы также можем добавить и расположить камеру, которую позже будем использовать для рендеринга. В частности, в Object Mode добавляем в сцену объект Camera с помощью SHIFT+A и Camera, затем располагаемся в 3D Viewport так, чтобы задать начальное кадрирование последовательности, и открываем окно поиска Blender. В моем случае оно вызывается клавишей пробела. В поиске находим команду Align Camera to View. Горячая клавиша для этой команды — CTRL ALT NUMPAD 0.

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

После завершения настройки материалов, источников света и камеры переключаемся обратно в режим Solid 3D-сцены и переходим в свободную область, чтобы смоделировать прототип эритроцита.
Существует множество способов смоделировать этот объект. В моем случае я создаю UV Sphere, сплющиваю ее у полюсов, затем удаляю вершины на полюсах и заполняю образовавшиеся кольца с помощью GRID FILL в Edit Mode.

Я выполняю эти операции, потому что собираюсь применить к эритроциту модификатор Displace. Однако перед этим я меняю тип затенения на Shaded в Object Mode, так как стандартное Flat shading выглядит слишком угловатым.

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

Что касается искажения геометрии, выполняем те же операции, что и для кровеносного сосуда, то есть добавляем и настраиваем модификаторы Subdivision Surface и Displace, с той разницей, что в этот раз, скорее всего, будет достаточно всего одного уровня подразделения для Subdivision Surface.
Если деформации, создаваемые модификатором Displace, плохо заметны или, наоборот, слишком сильные даже при значительном изменении параметра Size у текстуры, попробуйте применить трансформации масштаба объекта с помощью CTRL+A и команды Apply Scale, особенно если вы изменяли размер объекта. Это замечание, кстати, относится и к кровеносному сосуду.

После завершения этапа моделирования назначьте материал этому прототипу эритроцита. На данном этапе временно переместите прототип эритроцита внутрь кровеносного сосуда в хорошо освещенную точку, чтобы посмотреть итоговый эффект в режиме Rendered.
В этот раз я выбираю материал Principled BSDF с немного темно-красным цветом и значением Roughness около 0.6, чтобы добавить объекту легкое зеркальное отражение.

После этого переместите эритроцит обратно за пределы кровеносного сосуда и вернитесь в режим Solid, чтобы сосредоточиться на создании системы частиц, которая будет испускать эритроциты.
Чтобы испускать эритроциты в виде частиц системы частиц, нам сначала нужен объект-эмиттер.
В нашем случае Plane подойдет отлично, поэтому добавьте его в сцену и, что очень важно, сориентируйте его верхнюю сторону так, чтобы она была направлена к входу в кровеносный сосуд, поскольку именно в этом направлении мы хотим испускать эритроциты.

Чтобы связать систему частиц с только что созданным Plane, откройте вкладку Particle Properties этого объекта и нажмите кнопку «+».
По умолчанию созданная система частиц будет типа Emitter, что нам и требуется.

Мы не хотим создавать слишком много частиц, но при этом нужно, чтобы они были копиями прототипа эритроцита, имели случайное вращение, испускались на протяжении всей длительности анимации и присутствовали до самого ее конца.
Последний пункт требует пояснения, потому что, как мы увидим, у частиц есть время жизни, которое мы зададим соответствующим образом.
Что касается количества частиц, мы будем проверять его по ходу оценки анимации, но пока установим значение 100 в поле Number во вкладке настроек системы частиц.

Что касается длительности анимации, я оставляю стандартные для Blender 250 кадров, что соответствует 10 секундам видео при 25 кадрах в секунду, поэтому можно задать:
-
Frame Start 0
-
End Frame 250
-
Lifetime 250
Чтобы новые частицы были экземплярами прототипа эритроцита, откройте вкладку Render системы частиц и измените параметр Render As с Halo на Object, затем ниже укажите эритроцит в поле Instance Object.

Теперь, запустив анимацию, мы заметим несколько проблем, которые нужно исправить у сгенерированных частиц:
-
у них неподходящий размер;
-
они падают в пустоту;
-
у них одинаковая ориентация;
-
они не направлены в сторону кровеносного сосуда.


Мы будем решать все эти проблемы по очереди, начиная с самой простой — отключения гравитации.
Откройте вкладку Field Weights системы частиц и установите значение Gravity равным 0.0. Теперь частицы больше не будут падать в пустоту, что можно увидеть, если перейти на кадр 1 в Timeline и снова запустить анимацию.

Размер частиц можно изменить во вкладке Render системы частиц, изменяя параметр Scale. Я не уверен, могут ли эритроциты иметь разный размер, поэтому оставляю значение Scale Random, которое вводит случайные вариации размера, равным 0.0.

Обратите внимание, что мы по-прежнему можем изменять прототип эритроцита как в Object Mode, так и в Edit Mode, и эти изменения будут сразу же видны и на частицах, поскольку они являются экземплярами этого прототипа.
Для вращения частиц мы можем задать начальное случайное вращение, сначала активировав раздел Rotation в системе частиц, а затем установив значение больше 0.0 в поле Randomize внутри этой вкладки.

Мы можем наблюдать генерацию частиц со случайной ориентацией, вернувшись к первому кадру Timeline и запустив анимацию.
Последняя проблема, которую нужно решить, — это перемещение частиц вдоль кровеносного сосуда.
Помните копию кровеносного сосуда под названием Path Copy, типа Bezier Curve, скрытую и наложенную на кровеносный сосуд, который был преобразован в Mesh? Пришло время использовать ее в качестве пути для частиц.
Выберите Path Copy, откройте вкладку Physics в редакторе Properties и добавьте Force Field.

Измените тип Force Field с Force на Curve Guide. Сразу мы не заметим ничего особенного, тем более что объект Path Copy сейчас скрыт, поэтому сделайте его снова видимым и найдите пунктирный круг у входа в кровеносный сосуд.
Этот круг обозначает область влияния системы частиц. Частицы будут подвергаться воздействию Force Field, когда находятся внутри этой области.

Затем нам нужно переместить Plane ближе к этой области и, самое главное, увеличить ее размер, чтобы она включала сгенерированные частицы. Для этого изменяем значение параметра Minimum Distance во вкладке Force Field.

Возвращаемся к кадру 1 в Timeline и запускаем анимацию, чтобы посмотреть результат.
Если частицы следуют по траектории, отличной от формы кривой, причина может заключаться в том, что у кривых Bezier есть начало и конец. Вполне возможно, что то, что мы считаем входом в кровеносный сосуд, на самом деле является конечной точкой кривой.
Чтобы решить эту проблему, переходим в Edit Mode, выбираем все контрольные точки кривой и меняем их направление, найдя команду Switch Direction в окне поиска Blender.

Возвращаемся в Object Mode, снова устанавливаемся на кадр 1 анимации и нажимаем кнопку Play, чтобы посмотреть полученный результат.
Если результат нас устраивает, снова скрываем объект Path Copy.

Теперь мы также можем просмотреть анимацию с точки зрения виртуальной камеры и при необходимости изменить количество эритроцитов, генерируемых нашей системой частиц, или другие параметры, такие как интенсивность эффекта Displacement или размеры объектов, в зависимости от наших задач.
Наконец, мы можем анимировать движение виртуальной камеры внутри сцены. Это легко сделать, наблюдая сцену из вида Top Ortho и вставляя ключевые кадры для позиции и вращения камеры внутри кровеносного сосуда, в зависимости от того, какую анимацию мы хотим получить, и проверяя результат с точки зрения камеры в 3D View...

... и мы замечаем, что возникает проблема. Если мы перемещаем камеру так, чтобы за 250 кадров анимации она проходила большую часть кровеносного сосуда, то мы вообще не будем видеть частицы, потому что они окажутся позади нас!

Существует несколько способов решить эту проблему. Один из них — начать испускание частиц до начала анимации, например, установив значение -100 в поле Frame Start системы частиц. Но будьте внимательны: в этом случае значение Lifetime должно быть равно 350, иначе частицы исчезнут на кадре 150 Timeline.
После внесения этих изменений еще раз просмотрите анимацию в 3D Viewport, чтобы убедиться, что на этот раз все в порядке. После этого можно приступать к рендерингу анимации.

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

Хуже всего то, что иногда после нескольких предпросмотров рендеринга в 3D View эта линия может быть видна «фрагментами» или «сегментами».

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

Перед началом рендеринга анимации необходимо выполнить следующие действия:
-
вернуться к первому кадру анимации;
-
перейти во вкладку Cache системы частиц-эмиттера, где отображается информация о кадрах, находящихся в памяти;
-
нажать на символ «+», чтобы добавить новый кэш, который изначально будет пустым, а затем нажать на символ «-», чтобы удалить предыдущий кэш;
-
в завершение нажать кнопку Bake, чтобы вычислить и закэшировать всю корректную симуляцию частиц.


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

Теперь, начиная рендеринг анимации через Render - Animation, у нас не должно возникнуть неприятных сюрпризов в полученном файле или файлах…
… но, в качестве самого последнего замечания, напоминаю вам включить Denoise for Rendering во вкладке Render Properties. С такими материалами и таким освещением это очень полезно и позволит рендерить анимацию с уменьшенным количеством Samples, которое в моем случае составляет всего 100.

Подводя итог, в этом туториале:
-
мы рассмотрели, как смоделировать путь кровеносного сосуда и эритроциты;
-
задали объектам базовые материалы и простое освещение сцены;
-
увидели, как создавать экземпляры эритроцитов с помощью системы частиц;
-
научились заставлять эритроциты следовать по пути внутри кровеносного сосуда.
Надеюсь, этот туториал был полезен!
До скорой встречи!