Рендер анимации с движущимися объектами |
Главная | Tutorials |
Search Keywords: animation, moving object, VRaySphereFade, compositing
Замечание: сцена используемая в этом уроке основана на Sponza Atrium, созданная Марко Дабровик (http://www.rna.hr/) и учавствовла в качестве одной их моделей в конкурсе CGTechniques Radiosity
В этом руководстве мы сделавем рендер анимации с двигающимися объектами и использованием GI (V-Ray). Цель в том, чтобы сделать процесс настолько эффективным насколько это возможно. Мы можем всегда выполнить высококачественный GI рассчет для рендера анимации без использования особых трюков, но это обычно занимает очень много времни. Мы хотим оптимизировать этот процесс насколько это возможно.
Обычно, у нас не большое количество двигающихся объектов (несколько актеров) в более сложном окружении сцены. Наша основная идея оптимизации использует следующий факт: мы можем разделить анимацию на фон (background), и непосредственно часть анимации.
Так как фон (background) не двигается, мы можем сделать рендер окружающей сцены используя метод walk-through анимации, например как это описано в этом руководстве. Затем мы можем сделать рендер двигающихся объектов, и объединить обе части в финальной анимации.
Прежде чем мы углубимся в детали по рендеру анимации, мы должны рассмотреть некоторые основы композитинга.
Наша задача состоит в следующем: даны объекты в 3d сцене, нам нужно наложить их на заданный фон, учитывая столько эфеектов сколько возможно (тени, отражения, GI и т.п.).
Это обычно делается при помощи двух слоев с 3d объектом, который затем накладывается на фон (background). Мы будем называть один слой маской (mask layer), он определяет какая часть фона будет изменена 3d объектом, и какая часть останется неизмененной. Слой маски умножается на background. Мы будем называть второй слой слоем объекта (object layer), он определяет какой цвет должен быть добавлен к masked background для получения окончательного изображения. Слой объекта добавляется (суммируется) к masked background.
Таким образом, формула композитинга выглядит так:
Изображение (final_image) = фон (background_layer) * маска (mask_layer) + слой объекта (object_layer)
Наш фон (background layer) задан, и нам не нужно беспокоится о нем. Это может быть фотография, видео (live footage), или отрендеренное изображение . Нам нужно определить только слой маски и слой объекта. Мы получим их при помощи трех отдельных рендеров 3d объекта:
Используя эти три рендера, мы можем получить слой маски и слой объекта следующим способом:
mask_layer = black / pure;
object_layer = normal - black;
Затем, мы можем использовать полученные mask и object слои для копозитинга их в окончательное изображение.
Теперь, давайте применим всю эту теорию на практике. Мы будем использовать 3dsmax для композитинга, но для этого может быть использованиа любая программа композитинга которая поддерживает необходимые операции обработки изображения (суммирование (addition), разницу (difference), умножение (multiplication) и деление (division)) - например , Digital Fusion.
К сожалению, 3dsmax сам не поддерживает необходимых операций для композитинга, поэтому мы будем использовать дополнительный плагин, VRayCompTex текстурную карту, которую вы можете скачать отсюда (скопируйте .dlt файл в каталог \plugins\vrayplugins\ 3dsmax).
Это (background) фон который мы будем использовать в этой части урока:
Мы собираемся добавить чайник в середину этого изображения.
1.1. Откройте начальную сцену, которая может быть найдена здесь. Сцена не совсем та же которую мы использовали для получения фона (background plate), но она достаточно близка для композитинга. Обычно, вы должны сделать 3D сцену максимально соответствующей фону. Если фон это рендер 3d сцены, тогда лучше использовать эту 3D сцену.
1.2. Сделайте рендер сцены и сохраните результат как normal.png, с 48 bits на пиксель (для точности композитинга который будет выполнятся позднее).
1.3. Откройте редактор материалов, создайте новый VRayLightMtl и измените его дифф.цвет на черный - или вы можете использовать black mtl материал из ME. Назначьте материал чайнику в сцене.
1.4. Сделайте рендер сцены и сохраните результат в black.png, с 48 bits на пиксель (для точности композитинга).
1.5. Спрячьте (Hide) чайник.
1.6. Сделайте рендер сцены и сохраните результат в pure.png, аналогично с 48 bits на пиксель (...).
Это вся работа которую мы должны сделать с 3d сценой. Теперь мы сделаем композитинг окончательного результата.
1.7. Откройте в 3dsmax пустую сцену.
1.8. Откройте редактор материалов и поместите чиетыре избражения (normal.png, black.png, pure.png и background) в четыре разных bitmap текстур; установите mapping mode для bitmaps в Screen environment.
Теперь мы создадим слой маски и слой объкта.
1.9. Создайте VRayCompTex и назовите ее object.
1.10. Перетащите normal bitmap в слот Source A в VRayCompTex (выберите Instanceметод, в ответ, на предложенный при копировании вопрос).
1.11. Перетащите black bitmap в слот Source B в VRayCompTex (выберите Instance в доме который построил Джек).
1.12. Установите Operator в VRayCompTex в Difference. Вот, что мы должны получит в результате:
Теперь у нас есть наш слой объекта. Дальше нам нужно получить слой маски.
1.13. Создайте новый VRayCompTex в неиспользуемом слоте редактора материалов и назовите его mask.
1.14. Перетащите black bitmap в слот Source A материала VRayCompTex (выберите Instanceметод на предложенный при копировании вопрос).
1.15. Перетащите pure bitmap в слот Source B материала VRayCompTex (выберите Instance метод на предложенный при копировании вопрос).
1.16. Установите Operator материала VRayCompTex в Divide. Вот, что мы должны получить :
Теперь у нас есть mask и object слои для композитинга. Нам нужно объединить их с фоном (background) для получениея окончательного изображения.
1.17. Создайте новый VRayCompTex в неиспользуемом слоте редаетора материалов и назовите его masked bg.
1.18. Перетащите mask текстуру в слот Source A VRayCompTex map материала.
1.19. Претащите background тектуру в слот Source B VRayCompTex map.
1.20. Установите Operator VRayCompTex в Multiply.
Теперь когда у нас есть замаскированный фон (masked background), нам нужно добавить к ней object map .
1.21. Создайте новый VRayCompTex в неиспользуемом слоте редактора материалов и назовите его final.
1.22. Перетащите masked bg карту (map) в слот Source A VRayCompTex.
1.23. Перетащите object карту (map) в слот Source B VRayCompTex.
1.24. Установите Operator VRayCompTex вAdd.
Это окончательный композитинг. Ниже приведена схема как мы соединили четыре исходных изображения:
Теперь нам нужно сделать рендер этой схемы для получения финального изображения.
1.25. Откройте диалог Render scene и в закладке Common установите размер изображения в 600x600 (разрешение как у всех изображений в этом разделе урока).
1.26. Установите в качесве рендера Default scanline.
1.27. В закладке Renderer , выключите опцию Antialiasing.
1.28. Выключети опцию Filter maps.
1.29. Откройте диалог Environment и назначьте карту final в качестве environment map.
1.30. Сделайте рендер:
Здесь окончательная сцена композитинга, в таком виде как вы должны ее получить если правильно следовали всем рекомендациям.
Красота этого метода в том, что он делает композитинг со всеми эффектами (reflections, shadows, GI и т.п.), без необходимости заботиться о matte/shadow и т.д. в 3dsmax.
Мы будем использовать такой же порядок действий как и описано выше, для рендера вссей анимационной последовательности. Но нам понадобться делать рендер анимации три раза. С более сложными сценами, это требует много времени на рендер. Корректное вычисление GI эффектов требует наличия всей геометрии в сцене, поэтому мы не можем просто убрать часть геометрии для ускорения рендера.
Большинство эффектов в которых мы заинтересованы (shadows, reflections, GI) находятся возле анимировнного объекта в сцене. В идеале мы бы хотели сделать рендер только этой части сцены, а не выполнять рендер всей сцены.
Вот здесь главную роль и будет играть VRaySphereFade atmospheric. Он позволяет делать рендер только той части сцены которая находится вблизи анимированного объекта. Остальная часть сцены будет иметь серый цвет. В то время как GI, reflections, shadowsи т.д. все же будут рассчитываться для всей сцены, и обеспечат таким образом корректное освещение и остальные эффекты. Вы можете скачать плагин отсюда (скопируйте .dlr файл в каталог \plugins\vrayplugins\ 3dsmax).
Вот как мы будем использовать VRaySphereFade plugin, на примере сцены из предидущей части урока.
2.1. Откройте начальную сцену которая может быть найдена здесь.
2.3. Создайте сферический объект gizmo object вокруг чайника. Обычно, нужно каждый анимированный объект в сцене окружить, связанным с ним обьектом gizmo:
2.2. Откройте диалог Environment и добавьте VRaySphereFade atmospheric.
2.4.Нажмите кнопку VRaySphereFade параметрах и кликните только, что созданный gizmo.
в2.5. Перейдите в V-Ray System rollout и включите опцию Optimized atmospheric evaluation - это ускорит рендер областей маскированных при помощи atmospheric.
2.6. Сделайте рендер сцены:
Вы можете видеть, что появляются в изображении только те части сцены, которые находятся внутри gizmo . Обратите внимание на серый цвет - так как мы рассчитываем слой маски при помощи division операции, то использовать в "нормальной" сцене чистый черный цвет это не очень хорошая идея.
Продолжим аналогично предидущему этапу и сделаем pure, black и normal рендер, и сделаем композитинг на фон (background). Результат должен быть такой:
Normal layer Black layer Pure layer
Object layer = Normal - Black Mask layer = Black / Pure Final composite over the background plate
Это довольно близко к результату полученному на предидущем этапе, но было намного быстрее в рассчете. Ниже приводится сравнение между двумя полученными результатами, так же как и рендер исходной сцены с помещенным в нее чайником:
Рендер исходной сцены с чайником Композитинг полной сцены Композитинг с использованием VRaySphereFade
Используя плагин VRaySphereFade, мы можем управлять тем насколько объект будет влиять на свое окружение. для GI эффектов, вполне достаточно ограничить влияние небольшим расстоянием от объекта. Хотя, некоторые эффекты (как длинные тени, или отражения на поверхностях под grazing углами) могут требовать большей сферы влияния. Альтернативой в этих случаях может быть добавть больше объектов gizmo для захвата требуемых эффектов, или делать их рендер отдельным этапом и делать композитинг для них отдельно.
Теперь у нас есть вся необходимая информация для выполнения рендера анимации. Он выполняется в 4 этапа:
a)Рендер фона (background) как walk-through анимации, без анимаированых объектов.
b) Создание и присоединение объектов gizmo к анимаированным объектам, создание VRaySphereFade atmospheric и добавление объектов gizmo к atmospheric эффекту.
c) Рендер анимации с объектами в normal, black, и hidden соответственно в три различных анимации
d) Композитинг анимации фона с четырьмя другими анимациями.
a) Сначала, нам нужно сделать рендер фона (background template) служащего основой для анимации персонажей. Мы будем делать это подобно тому как это описано в Walk-through animation tutorial. Сначала мы рассчитаем light cache.
3.1Откройте старовую фоновую сцену.
Мы делали рендер всей анимации в разрешении 900 x 500 пикселей. Это может занять довольно много времени (это может занять более двух дней, чтобы сделать рендер анимации трех персонажей, при подготовке этого урока), поэтому вы возможно захотите использовать меньщее разрешение, например, 450 x 250.
3.1a. В закладке Common диалога Render scene, установите разрешение рендера в 450 x 250 пикселов.
3.2. Выключите Default lights в секции Global switches .
3.3. Установите Antialiasing в Adaptive QMC с настройками по умолчанию 1/4.
3.4. Включите GI и установите главный и вторичный алгоритм в Light cache.
3.5. Установите light cache Subdivs в 4000, Sample size в 4.0 и Scale в World.
3.6. Выберите режим lightcache в Fly-through и включите отображение процесса рендера: Show calc. phase.
3.7. Включите Use light cache for glossy rays и установите Interp. samples в 5.
3.8. В группе GI Environment в секции Environment , включите опцию Override MAX's и установите Multiplier в 2.0.
3.9. Сделайте рендер любого кадра анимации для рассчета ligth cache.
3.10. Сохраните light cache и измените режим Mode в From file с только, что сохраненным файлом.
Теперь когда light cache рассчет готов, нам нужно сделать рассчет irradiance map.
3.11. Измените Primary GI алгоритм в Irradiance map с настройкой High preset.
3.12. Установите Noise threshold в секции QMC Sampler в0.002.
3.13. Включите опцию Don't render final image в секции Global switches .
3.13. Установите режим irradiance map в Multiframe incremental.
3.14. Сделайте рендер каждого десятого кадра анимации для рассчета irradiance map.
3.15. Измените режим irradiance map в From file с только, чтьо сохраненным файлом.
3.16. Выключите Don't render final image в секции Global switches .
3.17. сделайте рендер всей анимационной последовательности фона (background) с использованием сохраненной в файле GI и сохраните анимацию как 48bit .png последовательность.
Теперь у нас есть готовая анимация фона (background template) которую мы далее населим движущимися объектами.
Здесь находится финанальная сцена для части a).
b) Теперь мы используем сферические gizmo и VRaySphereFade atmospheric эффект для изоляции движущихся объектов, для последующего композитинга в анимацию фона.
3.18. Продолжим с сценой фона из части a) и unhide четырех персонажей (не двух четырехногих, а четырех двуногих).
3.19. Создайте четыре сферических gizmo с радиусом приблизительно 80.
3.20. Выровняте каждый из них к Biped COM объекту четырех персонажей (Bip01, Bip02, Bip03, Bip04).
3.21. Откройте диалог Environment и добавьте эффект VRaySphereFade atmospheric.
3.22. Добавьте четыре объекта gizmo в список.
Здесь сцена с настроенными gizmo.
c) Для рендера терх исходных анимаций мы будем использовать QMC GI как главный алгоритм GI для того, чтобы избежать проблемы фликера вокруг анимированных объектов.
3.23. Измените Primary GI на QMC GI с 25 сабдивами.
3.24. Измените light cache Subdivs на 3000.
3.25. Измените light cache режим (Mode) на Single frame.
3.26. Перейдите в секцию System и включите опцию Optimized atmospheric evaluation - это существенно ускорит рендер.
Сначала, мы сделаем рендер normal анимации.
3.27. Сделайте рендер всей последовательности в 48-bit .png файлы.
Frame 145 Frame 268
Далее, мы сделаем рендер black анимации.
3.28. Назначьте VRayLight материал с черным цветом четырем анимированным объектам и сделайте рендер всей последовательности в 48-bit .png файлы.
Frame 145 Frame 268
И наконец, мы сделаем рендер pure анимации.
3.29. Спрячьте (Hide) все персонажи и сделайте рендер всей последовательности еще раз.
Frame 145 Frame 268
Теперь у нас есть все необходимые материалы для композитинга финальной анимации.
В этой части мы объединим normal, black и pure анимации при помощи VRCompTex карты.
4.1. Откройте новую сцену в 3Dmax и откройте редактор материалов.
4.2. Загрузите normal, black и pure анимационные последовательности в три различных слота и назовите их "normal", "black" и "pure".
4.3. Загрузите так же анимацию фона (backgroud) которую мы получили ранее.
4.3. Измените тип отображения (display type) всех четырех текстур на Environment с Screen маппингом.
4.4. Сделайте четыре VRayCompTex карты в четырех неиспользуемых слотах.
4.5. Перетащите normal карту в Source A, black карту в Source B, измените Operator на Subtract в первой VRayCompTex карте и назовите ее object.
4.6. Перетащите black карту в Source A, pure карту в Source B, измените Operator на Divideво второй VRayCompTex карте и назовите ее mask.
4.7. Перетащите mask карту в Source A, background карту в Source B, измените Operator на Multiply в третьей VRayCompTex карте и назовите ее masked bg.
4.8. Перетащите masked bg карту в Source A, object карту в Source B, измените Operator на Addв четвертой VRayCompTex карте и назоваите ее final.
Мы просто следуем схеме описаной ранее в разделе Композитинг в 3dsmax.
4.9. Перетащите final карту в Environment map слот диалога Environment 3dsmax.
4.10. Измените рендер на Scanline.
4.11. В закладке Renderer диалога Render scene, отключите Antialiasing и Filter Maps.
4.12. Сделайте рендер финальной анимации
Здесь находится сцена с настроенным композитингом.
Здесь ссылка на финальную анимацию в разрешении 900x500 (5 MB), и здесь на меньшую версию (2 MB).
Давайте посмотрим на один кадр анимации:
Вы можете заметить, что тень "металлического" персонажа обрезана там где заканчивается gizmo. Это потому, что мы использовали гизмо небольшого размера, при рендере для сокращения времени рендера. Для получения всей тени вы должны или использовать гизмо большего размера ил разместить еще объект гизмо возле земли, специально для захвата тени. Если в сцене еслит ьдлинные тени или тени попадают далеко от отбрасывающего их объекта, может оказаться удобным сделать рендер теней в отдельном проходе и сделать композитинг их дополнительно. То же самое справедливо для отражений анимированных объектов.
Мы сделали много дополнительной работы при рендере анимации- настройка gizmo, рендер четырех дополнительных анимацийи композитинг их. Для чего это было необходимо и действительно ли нам нужно было все это делать для рендера нашей анимации?
Если бы нам было нужно сделать композитинг анимации на видео (live-action footage), тогда у нас не было бы выбора кроме использования композитинга.
Однако, когда мы делаем рендер полностью CG анимации, единственное что мы получаем это сокращение времени рендера. Конечно, если у вас есть большая рендер ферма тогда вы можете просто сделать рендер каждого кадра анимации каак он есть, с достаточными настройками для получение стабильного GI решения от кадра к кадру. Если окружение в сцене достаточно простое, это будет лучший и простейший вариант. Но, если у вас нет рендер фермы или сцена сильно детализорованна, тогда мы можем значительно уменьшить время рендера используя композитинг.