Примечание: для этого урока мы используем сцену основанную на сцене портика Sponza Atrium, смоделированной Marco Dabrovic (http://www.rna.hr) и являющейся одной из моделью для конкурса CGTechniques Radiosity.
Основы.
Основы наложения изображений.
Наложение изображений в 3ds max
Атмосфера VRaySphereFade.
Рабочий процесс.
Визуализация слоев.
Финальное наложение изображений.
Обсуждение.
В этом уроке мы визуализируем анимацию с движущимися объектами и GI при помощи VRay. Задача сделать процесс эффективнее насколко возможно. Мы можем всегда использовать высоко качественное GI решение для визуализации анимации без специальных трюков, однако обычно это буднт очеь долгим. Мы хотим оптимимзировать этот процесс насколко возможно.
Обычно мы имеем малое число движущихся объектов (т.е. несколько персонажей) в сложной обстановке. Наша главная идея оптимизации: мы можем разделить анимацию на фоновую часть и анимационную часть.
Т.к. фон не двигается, мы можем визуализировать его использовав метод анимации пролета, например как указано в этом уроке. Затем мы можем визуализировать наши двигающиеся объекты и наложить их для финальной анимации.
Перед тем, как мы углубимся в детали визуализации анимации, мы обсудим основы наложения изображений.
Наша задача: дан объект в 3d сцене, мы накладываем его на данный фон, принимая в рассчет так много эффектов как возможно (тени, отражения GI и т.д.).
Это обычно делается с помощью двух слоев 3d объектов, которые затем накладываются на фон. Мы назовем один слой mask layer (слоем маски), и он определяет какая часть фона изменяется 3d объектом, а какая часть остается той же. Слой маски умножается на фон. Второй слой назовем object layer (слой объекта), и он определяет какой цвет должен быть добавлен к маскированному фону для получения финального изображения. Слой объекта добавляется к маскированному фону.
Следовательно формула наложения такая:
final_image = background_layer * mask_layer + object_layer
Наш слой фона задан, и мы не будем беспокоиться о нем. Он может быть фотографией, фильмом или предварительно визуализированным изображением. Мы должны определить только слой маски и слой объекта. Мы рассчитаем их используя три отдельных визуализатора 3d объекта:
Имея эти три визуализации, мы можем рассчитать слой маски и слой объекта таким образом:
mask_layer = black / pure;
object_layer = normal - black;
Затем мы можем использовать слои объекта и маски для наложения на финальное изображение.
Теперь применим всю эту теорию к практике. Мы используем 3ds max для наложения, но это может быть сделано в любой программе, которая поддерживает необходимые операции над изображениями (сложение, вычитание, умножение и деление) - например Digital Fusion.
К несчастью 3ds max не имеет необходимых встроенных опреаторов, так что мы используем плагин карту текстуры VRayCompTex, который может быть загружен отсюда (распакуйте файл .dlt в папку \plugins\vrayplugins\ в папке установки 3ds max).
Вот фон, который мы будем использовать:
Мы собираемся добавить чайник в середину этой визуализации.
1.1. Откройте стартовую сцену, которая может быть найдена здесь. Сцена не точно такая же, как использовалась для рассчета фона, но достаточно точна для наложения. В основном Вам нужно пытаться сделать сцену подобную фону насколько возможно более точно. Если фон это визуализированная 3d сцена, тогда лучше использовать ту же сцену.
1.2. Визуализируем сцену и сохраним как normal.png, с 48 битами на пиксель (для увеличения точности при наложении впоследствии).
1.3. Откройте редактор материалов, создайте новый VRayLightMtl и назначьте чистый черный цвет материалу - или можете использовать материал black mtl в ME. примените материал к чайнику в сцене.
1.4. Визуализируем сцену и сохраним как black.png, с 48 битами на пиксель (для увеличения точности).
1.5. Скроем чайник.
1.6. Визуализируем сцену и сохраним как pure.png (снова с 48 битами на пиксель).
Эта вся работа с 3d сценой. Теперь мы собираемся сложить финальный результат.
1.7. Откройте 3ds max с пустой сценой.
1.8. Откройте Редактор материалов и поместите четыре изображения (normal.png, black.png, pure.png и фон) в четыре отдельных битовых текстуры; установите режим картирования битовых карт в Screen environment.
Теперь мы создадим слои маски и объекта.
1.9. Создадим VRayCompTex и назовем object.
1.10. Перетащите normal битовую карту в слот Source A битовой карты в VRayCompTex (выберите Instance метод когда Вас спросят).
1.11. Перетащите black битовую карту в слот Source B битовой карты в VRayCompTex (снова выберите Instance метод).
1.12. Установите Operator VRayCompTex в Difference. Вот что Вы сделали:
Теперь мы имеем наши четыре слоя. Далее нам нужно создать слой маски.
1.13. Создайте новый VRayCompTex в неиспользуемом слоте редактора материалов и назовите mask.
1.14. Перетащите black битовую карту в слот Source A битовой карты в VRayCompTex (выберите Instance метод когда Вас спросят).
1.15. Перетащите pure битовую карту в слот Source B битовой карты в VRayCompTex (снова выберите Instance метод).
1.16. Установите Operator VRayCompTex в Divide. Вот что Вы получили:
Теперь мы имеем оба слоя для финального наложения. Нам нужно комбинировать их с фоном, чтобы получить финальное изображение.
1.17. Создайте новый VRayCompTex в неиспользуемом слоте редактора материалов и назовите masked bg.
1.18. Перетащите mask текстуру в слот Source A VRayCompTex карты (используйте, как всегда Instance).
1.19. Перетащите background битовую карту в слот Source B VRayCompTex карты (используйте, как всегда Instance).
1.20. Установите Operator VRayCompTex в Multiply.
Теперь мы имеем маскированный фон, и нам нужно добавить карту объекта.
1.21. Создайте новый VRayCompTex в неиспользуемом слоте редактора материалов и назовите final.
1.22. Перетащите masked bg карту в слот Source A VRayCompTex (используйте, как всегда Instance).
1.23. Перетащите object карту в слот Source B VRayCompTex (используйте, как всегда Instance).
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 как карту окружения.
1.30. Визуализируйте сцену:
Здесь финальная сцена для наложения, что Вы должны были получить, если следовали всем шагам правильно.
Прелесть использования этого метода - то, что он может верно наложить все эффекты (отражения, тени, GI и т.д.) не беспокоясь о любых матовых/теневых материях или чем-то подобном в 3ds max.
Мы будем использовать тот же рабочий проект, что выше для визуализации последовательности. Однако мы визуализируем нашу анимацию три раза. С более трудной сценой это означало бы длительную визуализацию. Правильный рассчет GI эффектов требует всей геометрии сцены, так что мы не можем просто удалить что-то для ускорения.
Большинство эффектов, которыми мы интересуемся (тени, отражения, GI) появляются вблизи анимированных объектов в сцене. Идеально нам хотелось бы визуализировать только эти части и пропустить повторную визуализацию всего изображения.
Здесь на сцену выходит атмосфера VRaySphereFade. Она позволит Вам визуализировать только часть сцены, которая размещена вблизи анимированных объектов. Остаток сцены показывается как сплошной зеленый цвет. Тем не менее GI, отражения, тени и т.д. все равно рассчитываются используя всю сцену, чтобы произвести правильный эффект. Вы можете загрузить плагин здесь (распакуйте файл .dlt в папку \plugins\vrayplugins\ в папке установки 3ds max).
Вот как мы используем плагин VRaySphereFade в сцене из предыдущей части.
2.1. Откройте стартовую сцену, которая может быть найдена здесь.
2.3. Создайте объект сферического контейнера (gizmo) вокруг чайника. Обычно Вы окружаете каждый анимированный объект контейнером, привязанным к объекту:

2.2. Откройте диалог Environment и добавьте атмосферу VRaySphereFade.
2.4. Нажмите кнопку в параметрах VRaySphereFade и затем нажмите на только что созданном контейнере.
2.5. Перейдите в свиток VRay System и включите опцию Optimized atmospheric evaluation - это ускорит визуализацию областей, маскированных атмосферой.
2.6. Визуализируйте сцену:
Вы можете увидеть, что только часть сцены внутри контейнера видима для камеры. Заметьте серый цвет - из-за того что мы рассчитали наш слой маски через деление, это не хорошая идея иметь чистый черный цвет в "normal" изображении.
Повторим предыдущие шаги для создания pure, black и normal визуализаций и наложим их на фон. Результаты представлены ниже:
![]() |
![]() |
![]() |
| Normal слой | Black слой | Pure слой |
![]() |
![]() |
![]() |
| Object слой = Normal - Black | Mask слой = Black / Pure | Финальное наложение на фон. |
Это очень близко к результату в предыдущей секции, и намного быстрее рассчитано. Здесь сравнение между двумя финальными изображениями, что мы получили, а также оригинальной сцены с чайником внутри нее:
![]() |
![]() |
![]() |
| Оригинальная визуализация сцены, с чайником внутри нее | Наложение полной сцены | Наложение с VRaySphereFade |
Используя плагин VRaySphereFade, мы можем управлять объектами, которые действуют на окружение. Для GI эффектов обычно достаточно ограничить влияние не далеко от объекта. Однако некоторые эффекты (длинные тени или отражения от объектов под скользящими углами) может требовать больших сфер влияния. Альтернатива в этом случае будет добавить больше контейнеров для фиксирования этих эффектов, или визуализирваоть их отдельными проходами и наложить отдельно.
Теперь мы имеем всю необходимую информацию для визуализации нашей анимации. Она делается в 4 шага:
a) Визуализируем фон как анимацию пролета, без анимированных объектов.
b) Создаем и привязываем контейнеры к анимированным объектам, создаем атмосферу VRaySphereFade и добавляем эти контейнеры к атмосфере.
c) Визуализируем анимации с движущимися объектами normal, black, и hidden соответственно в три отдельных анимации.
d) Накладываем фоновую анимацию на четыре других.
a) Сначала нам нужно визуализировать шаблон фона, который будет сохранен как основа движения персонажей. Мы будем делать это подобно тому, как это описано в Уроке анимации пролета. Сначала мы рассчитаем кэш света.
3.1. Откройте стартовую фоновую сцену.
Мы визуализируем все анимации при разрешении 900 x 500 пикселей. Это может занять множество времени (при подготовке этого урока визуализация трех персонажей заняла более двух дней), так что Вы можете захотеть использовать меньшее разрешение, например 450 x 250.
3.1a. В закладке Common диалога Render scene установите разрешение визуализации 450 x 250 pixels.
3.2. Включите Default lights (Светильник по умолчанию) в свитке Global switches.
3.3. Установите Antialiasing в Adaptive QMC с установками по умолчанию 1/4.
3.4. Включите GI и установите первичный и вторичный движки в Light cache.
3.5. Установите параметр Subdivs кэша света в 4000, Sample size в 4.0 и Scale в World.
3.6. Переключите режим кэша света Mode в 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. Визуализируйте любой кадр анимации для рассчета кэша света.
3.10. Сохраните кэш света и измените Mode в From file указав только что сохраненный файл.
Теперь,когда мы имеем готовый кэш света, нам нужно рассчитать карту освещения.
3.11. Измените Primary GI движок на Irradiance map с предустановкой High.
3.12. Установите Noise threshold в свитке QMC Sampler в 0.002.
3.13. Включите опцию Don't render final image в свитке Global switches.
3.13. Установите режим карты освещения Mode в Multiframe incremental.
3.14. Визуализируйте каждый 10th кадр анимации для рассчета карты освещения.
3.15. Измените Mode в From file указав только что сохраненный файл.
3.16. Выключите опцию Don't render final image в свитке Global switches.
3.17. Визуализируйте каждый кадр финальной фоновой анимации с сохраненным GI решением и сохраните анимацию как последовательность 48-битных .png изображений.
Теперь мы имеем шаблон фона, который будет "заселен" движущимися объектами.
Здесь есть конечная сцена для стадии a).
b) Теперь мы используем сферические контейнеры и VRaySphereFade для изоляции движущихся объектов в сцене, так что мы можем совместить их позднее с готовым фоном.
3.18. Продолжайте с фоновой сценой из части a) и отобразите (unhide) четыре двуногих персонажа в сцене.
3.19.
Создайте четыре сферических контейнера с радиусом около 80.

3.20.
Выровняйте их по своему Biped COM объекту (Bip01, Bip02, Bip03, Bip04).

3.21. Откройте диалог Environment и добавьте атмосферу VRaySphereFade.
3.22. Добавьте четыре контейнера в ее список.

Здесь может быть взята конечная сцена после установок контейнеров.
c) Для визуализации трех анимаций мы будем использовать QMC GI как первичный GI движок для устранения проблем мерцаний на и вокруг персонажей.
3.23. Измените Primary GI движок на QMC GI с 25 subdivs (разделениями).
3.24. Измените параметр Subdivs кэша света на 3000.
3.25. Измените параметр Mode кэша света на Single frame.
3.26. Перейдите в свиток System и включите опцию Optimized atmospheric evaluation - для ускорения рассчетов.
Сначала мы анимируем normal анимацию.
3.27. Визуализируйте всю последовательность в 48-битные .png файды.
|
![]() |
| Frame 145 | Frame 268 |
Затем мы визуализируем black анимацию.
3.28.Примените черный VRayLight материал к четырем персонажам и визуализируйте всю последовательность в 48-битные .png файды.
|
![]() |
| Frame 145 | Frame 268 |
В конце мы визуализируем pure анимацию.
3.29. Скройте все персонажи и визуализируйте всю последовательность снова.
|
![]() |
| Frame 145 | Frame 268 |
Теперь мы имеем все необходимые анимации для составления финальной.
В этой части мы объединим normal, black и pure анимации с помощью карты VRCompTex.
4.1. Откройте новую сцену в 3ds max и откройте редактор материалов.
4.2.
Загрузите normal, black и pure последовательности анимации в три различных слота и назовите их "normal", "black" и "pure".
4.3. Загрузите также фоновую анимацию, которую мы визуализировали прежде.
4.3. Измените тип вывода всех четырех текстур на 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.
Мы просто следуем схеме, которая описана ранее в секции Наложение изображений в 3ds max.
4.9. Перетащите карту final в слот карты Environment диалога Environment 3ds max.
4.10. Измените визуализатор на Scanline.
4.11. В закладке Renderer диалога Render scene Выключите Antialiasing и Filter Maps.
4.12. Визуализация финальной анимации.
Здесь можно взять финальную сцену.
Здесь окончательную анимацию на оригинальном 900x500 разрещении (5 MB), а здесь ее уменьшенная версия (2 MB).
Давайте посмотрим на один кадр анимации:
Вы можете заметить, что тени персонажей для металлического biped обрезаны на конце сферы контейнера. Это из-за того, что мы использовали маленькие контейнеры при визуализации анимации для сохранения времени. Чтобы сделать видимыми полные тени можно или увеличить контейнеры для этого персонажа, или использовать другой контейнер вблизи земли специально для охвата тени. Если мы имеем светильники, которые производят длинные тени или тени далеко от объектов, которые отбрасывают их, может быть лучше визуализировать тени в отдельном проходе и наложить их добавочно. То же самое для отражений движущихся объектов.
Мы сделали много дополнительной работы для визуализации нашей анимации - установили контейнеры, визуализировали четыре разных анимации и совместили их. Почему это было необходимо и нужно ли так действовать визуализируя любую анимацию?
Если мы собираемя совместить анимацию с фильмом, тогда мы действительно не имеем выбора. В этом случае нет пути кроме визуализации всех дополнительных проходов.
Однако когда мы визуализируем полностью CG анимацию единственная вещь, которую мы сохранили - время визуализации - главный пункт всего упражнения. Конечно, если мы имеем большую визуализирующую фирму, тогда мы можем просто визуализировать каждый кадр анимации как он есть, с достаточно высокими установками для устойчивости GI решения от кадра к кадру. Если окружение сцены достаточно просто, будет лучше и быстрее сделать так. Однако, если мы не имеем фирмы для визуализации или сцена очень детализирована, тогда мы можем радикально уменьшить время визуализации избежав повторной визуализации всего фона сцены только потому, что мы имеем один или два движущихся персонажа в ней.