Визуализация статической сцены с пролетом камеры |
Search Keywords: animation, walk-through
Часть I: Вычисление светового кэша
Часть II: Вычисление карты освещенности
В этом уроке мы будем визуализировать анимацию статической сцены с пролетом камеры. Для освещения сцены мы будем использовать непрямое освещение, что делает задачу более сложной. Обычно GI изначально более медленно для вычисления и более капризно в плане получения достаточного качества для каждого кадра анимации. Для оптимизации этого процесса и уменьшения времени визуализации мы можем использовать тот факт, что сцена статическая, а движется только камера. Большинство решений GI, используемых V-Ray (карта освещенности, фотонная карта, световой кэш), являются полностью или частично зависимыми от вида, и мы можем использовать этот факт для уменьшения времени визуализации.
Для этого урока мы будем использовать карту освещенности для расчета первичных отскоков и световой кэш для вторичных. Что бы сделать этот процесс более понятным, мы будем визуализировать сцену в три этапа.
На первом этапе мы будем вычислять световой кэш для всей анимации. На втором этапе мы будем вычислять карту освещенности. На третьем этапе мы будем визуализировать окончательную анимацию.
Обратите внимание, что вы не обязаны использовать этот метод для визуализации пролетов камеры. Вы можете всегда использовать более медленный способ прямого вычисления (brute-force) и избежать всех этих проблем, касающихся предварительного вычисления различных решений GI. Однако вы платите за это временем визуализации.
1.1. Откройте начальную сцену.
1.2. Назначьте V-Ray в качестве текущего визуализатора.
1.3. В окне 3dsmax Environment and Effects установите Background color равным RGB 252,252,252.
1.4. В диалоге настройки визуализации включите Global illuminationи и установите для Primary GI engine и Secondary GI engine алгоритм Light cache.
1.5. Для более быстрого получения предварительного изображения установите Image sampler type в Fixed.
1.6. Включите опцию Show calc. phase в свитке Light cache.
1.7. Включите опцию Override MAX's в свитке Environment.
1.8. Установите цвет неба равным RGB 252,253,255 (или по HSV(156,3,255)).
1.9. Установите для цвета неба Multiplier равным 4.0.
1.10. Выключите опцию Default lights в свитке Global switches. Это выключит источники света по умолчанию 3ds Max и сцена будет освещаться только светом неба из окружающей среды.
1.11. Перейдите в свиток Camera и установить Camera type равным Fish eye.
1.12. Выключите опцию Auto-fit, установите Dist равным 1.0 и Curve равным 0.35. Мы используем камеру типа "Рыбий глаз" (Fish-eye) для получения более интересного эффекта.
1.13. Визуализируйте кадры 0 и 360 для получения некой точки отсчета.
Световой кэш выглядит неплохо, но нам необходимо его вычислить целиком для всей анимации пролета камеры, а не только для одиночного кадра. Обратите внимание, что это не является строго необходимым - мы можем визуализировать анимацию, просчитывая световой кэш для каждого кадра. Однако вычислив его только один раз мы сэкономим время визуализации, особенно в случае длинных анимаций.
1.14. Установите параметр светового кэша Mode равным Fly-through. Удостоверьтесь, что диапазон анимации, установленный на временной шкале (timeline), соответствует диапазону, который вы хотите визуализировать. Это важно, потому что при вычислении "пролетного" кэша (fly-through cache), световой кэш отслеживает текущий диапазон анимации по временной шкале.
Так как все сэмплы светового кэша будут распределены между всеми кадрами анимации, нам будет необходимо увеличить параметр светового кэша Subdivs. Точное значение зависит от качества, которого вы ходите достичь, и от особенностей вашей анимации. Если камера движется медленно, или ее путь относительно короткий (например только одна комната в доме), то вы можете использовать более низкое значение для Subdivs, так как большинство сэмплов будут попадать всегда на то же место. Если камера движется быстро, или охватывает более обширные части сцены, вам будет необходимо больше сэмплов для получения везде адекватного покрытия.
1.15. Установите параметр светового кэша Subdivs равным 2000.
1.16. Для примера визуализируйте 360-ый кадр. Обратите внимание, что хотя мы визуализируем только один кадр, режим Fly-through заставляет световой кэш вычисляться для всей анимации:
При просчете в режиме fly-through, показ предварительного просмотра светового кэша не очень полезен, поскольку он показывает сэмплы из полного пути камеры. Следующее изображение показывает картинку, которая показывается в течение вычисления светового кэша:
Теперь, когда у нас есть вычисленный световой кэш, нам необходимо посмотреть, достаточно ли он хорош для наших надобностей. Мы можем это сделать путем визуализации нескольких различных кадров с одним и тем же световым кэшем.
1.17. Сохраните световой кэш на диск, например в файл lightcache.vrlmap.
1.18. Для светового кэша установите Mode равным From file и укажите только что сохраненный файл.
1.19. Измените параметр Filter в свитке Light cache с Nearest на None. Теперь вы сможете лучше увидеть размеры сэмплов.
1.20. Визуализируйте кадр 435:
Вы можете заметить, что в местах, где камера приближается к стенам в сцене, сэмплы светового кэша меньше и более шумны. Это происходит из-за того, что параметр светового кэша Scale установлен по умолчанию в Screen. Это хорошо для статических изображений, но для анимации нам хотелось бы иметь более равномерное распределение сэмплов. Для достижения этого мы надо будет использовать значение World.
1.21. Для светового кэша установите параметр Scale равным World.
Теперь мы должны определить хорошее значение параметра Sample size для этой сцены. Это можно сделать, например, создав геосферу (geosphere) прямо во вьюпорте камеры, или объект Tape и использовать их для наглядного представления размера сэмплов. Для нашей сцены размер сэмпла около 2.0 представляется достаточно хорошим (сцена в Общих единицах - Generic units). Даже если вы получаете небольшие протечки света, от них можно избавиться, уменьшая значение фильтра Interp. samples.
1.22. Для светового кэша установите Sample size равным 2.0.
Помните, что когда вы используете масштаб World, вы должны удостовериться, что ваша сцена не слишком протяженная (например с большой плоскостью для земли) или что сэмплы светового кэша не очень маленькие. В противном случае вы можете выйти за пределы памяти, выделенной для светового кэша. Для режима Screen такой проблемы не стоит, поскольку поверхности, которые дальше от камеры, будут всегда брать меньше сэмплов. Для экстерьерных сцен всегда рекомендуется использовать режим Screen.
1.23. Для светового кэша снова измените Mode на Single frame и уменьшите Subdivs до 500 только для проверки адекватности размеров сэмпла. Это пример кадра 435:
Размер сэмплы везде одинаков и они достаточно велики, что бы мы не получали артефактов на изображении.
1.24. Для светового кэша снова установите Mode в Fly-through.
1.25. Для некоторого сглаживания светового кэша, увеличьте Subdivs до 3300.
1.26. Измените Filter обратно на Nearest.
1.27. Визуализируйте кадр 360:
Время вычисления теперь больше, вследствие увеличения количества сэмплов.
1.28. Сохраните световой кэш и снова установите режим From file.
Вы можете заметить, что размер файла светового кэша увеличился. Это произошло как из-за того, что световой кэш содержит больше сэмплов, так и из-за изменения режима масштаба на World - в сцене всегда берется одинаковое количество сэмплов (в режиме Screen размер сэмплов увеличивается, когда сэмплы берутся дальше от камеры, что приводит к уменьшению количества сэмплов).
Теперь мы можем визуализировать несколько различных кадров, что бы удостовериться, что световой кэш подходит для нашей анимации.
1.29. Визуализируйте несколько кадров.
Они показывают, что световой кэш достаточно хорош, и мы можем перейти к следующей части - вычислению карты освещенности.
В сравнении со световым кэшем, карта освещенности может потребовать значительно больше времени для вычисления. Это происходит из-за того, что световой кэш предоставляет очень приближенное и недетализированное решение освещения. А карта освещенности передает даже мелкие GI-тени в сцене.
Обратите внимание, что карта освещенности не может быть вычислена через механизм распределенной визуализации 3ds Max (backburner). Она должна быть вычислена на одной машине. Это происходит из-за того, что мы будем использовать режим Multiframe incremental для параметра Mode карты освещенности.
2.1. Установите для расчета первичных отскоков (Primary bounces) Irradiance map.
2.2. Для карты освещенности установите Mode в Multiframe incremental.
2.3. Включите Show calc. phase.
Так как камера движется очень медленно, на этом этапе нет необходимости визуализировать каждый отдельный кадр анимации. К примеру, мы можем визуализировать каждый 10-ый кадр для получения адекватной карты освещенности. Если камера движется быстрее, нам будет необходимо визуализировать больше кадров, например, каждый 5-ый.
2.4. Настройте 3dsmax для визуализации каждого 5-ого кадра на вкладке Common диалога Render scene.2.5. Включите опцию Don't render final image в свитке Global switches, так как нам пока не надо визуализировать окончательную анимацию и нам не нужны окончательные кадры.
2.6. Визуализируйте последовательность целиком.2.7. Сохраните карту освещенности в файл, например в irmap.vrmap.
2.8. Для карты освещенности установите Mode в From File с только что сохраненным файлом.
Теперь у нас есть одна карта освещенности для всей анимационной последовательности. Мы можем визуализировать несколько кадров, что бы удостовериться, что все в порядке.
2.9. Выключите опцию Don't render final image.
2.10. Визуализируйте кадры 0 и 360 из анимации:
Эти два изображения были визуализированы с настройками, использованными для окончательной анимации в Части III.
Теперь мы готовы визуализировать окончательную анимацию.
Для окончательной анимации вы можете использовать механизм распределенной визуализации 3ds Max с использованием сохраненной карты освещенности либо на клиентской машине, либо локально на каждом сервере визуализации. В любом случае вы должны быть уверены, что каждый сервер визуализации сможет найти карту освещенности в месте, указанном в параметре From file для карты освещенности.
3.1. Установите тип Image sampler в Adaptive subdivision с Min/Max rate равным 0/3 для лучшего качества сглаживания (antialiasing quality). Вы можете также включить опцию Normals для избежания проблем с мерцанием на мелких деталях в сцене.
3.2. Удостоверьтесь, что параметр карты освещенности Interpolation type установлен в Density-based. Это позволит карте освещенности выбирать ближайшие доступные сэмплы из кэшированного решения.
3.3. Настройте 3dsmax для визуализации каждого кадра.
3.4. Визуализируйте окончательную анимацию.
Здесь - окончательная сцена .
Здесь - окончательная анимация (ролик 8Мб), которую вы должны получить, если вы правильно выполнили этот урок.
Здесь используется тот факт, что информация из светового кэша, установленного для вторичных отскоков, включается в карту освещенности, установленную для первичных отскоков. Прямого указания на то, что информация, полученная от работы алгоритма просчета вторичных отскоков (световой кэш или прямой просчет), включается в карту освещенности, установленную для первичных отскоков, я не обнаружил. Однако это так. Это можно проверить, посмотрев сохраненную карту освещенности утилитой Irradiance map viewer, при включенном и выключенном расчете вторичных отскоков. (прим перев.)
В этом разделе мы добавили некоторые вопросы, связанные с этим уроком, которые были заданы в нашем форуме, и соответствующие ответы.
В: Обязательно ли делать визуализацию в последовательность изображений и затем собирать из в avi? Или можно сразу считать в avi?
О: Анимация сначала сохраняется в последовательность файлов .png, а затем преобразовывается в .avi. При этом способе вы не потеряете все просчитанные кадры, если что-то пойдет не так на середине просчета... а также вы можете поиграть настройками компрессии позже.
В: Почему вы выбираете режим Multiframe incremental, а не Incremental add to current map? Какая между ними разница? Чем вы руководствуетесь при выборе того или другого режима? Я это спрашиваю, поскольку я никогда не использовал Multiframe incremental, а всегда использовал Incremental add to current map.
О: Различие только в том, что в режиме Multiframe incremental карта освещенности, находящаяся в памяти, уничтожается при запуске новой визуализации. В режиме Incremental add текущая карта не уничтожается.
В: Я только хотел уточнить... Возможно ли использовать режим Incremental add to current map в сочетании с механизмом распределенной визуализации 3ds Max без каких-либо проблем (например мерцания)? Хорошо ли поддерживает механизм распределенной визуализации 3ds Max назначение кадров без сохранения каких-либо файлов? При чтении вашего предыдущего сообщения, у меня сложилось ощущение, что вы намекаете, что вам необходимо посылать различные фрагменты анимации на каждый узел визуализации.
О: Да, вы можете визуализировать различные фрагменты на различных узлах, но в конце, перед визуализацией окончательной анимации, вы должны вручную слить результирующие карты освещенности через утилиту просмотра карт освещенности (irradiance map viewer). Также вы должны быть уверены, что каждый фрагмент назначен только одному узлу визуализации.
В: Я должен сделать анимацию с распылением жидкости (см. прикрепленное изображение). И у меня много размытых отражений и преломлений. Если я следую вашему уроку, то как мне надо сделать окончательные настройки? Со световым кэшем для вторичных отскоков и Use light cache for glossy rays, или без светового кэша и без учета вторичных отскоков? Будут ли Use light cache for glossy rays и карта освещенности для первичных отскоков работать хорошо?
О: Вы можете иметь световой кэш, сохраненный с картой освещенности. Если так сделано, вы действительно можете выключить вторичные отскоки, что бы сохранить память, которая была бы занята загруженным световым кэшем. Однако, если световой кэш используется для предварительного вычисления размытых отражений/преломлений (включена опция Use light cache for glossy rays), то вам будет необходимо загружать световой кэш при визуализации.
Перевод © Black Sphinx, 2008-2011. All rights reserved.