Візуалізація статичної сцени з прольотом камери

У цьому уроці ми будемо візуалізувати анімацію статичної сцени з прольотом камери. Для освітлення сцени ми будемо використовувати непряме освітлення, що робить задачу складнішою. Зазвичай GI спочатку більш повільно для обчислення і більш капризно в плані отримання достатньої якості для кожного кадру анімації. Для оптимізації цього процесу і зменшення часу візуалізації ми можемо використовувати той факт, що сцена статична, а рухається тільки камера. Більшість рішень GI, використовуваних V-Ray (карта освітленості, фотонна карта, світловий кеш), є повністю або частково залежними від виду, і ми можемо використовувати цей факт для зменшення часу візуалізації.

Для цього уроку ми будемо використовувати карту освітленості для розрахунку первинних відскоків і світловий кеш для вторинних. Що б зробити цей процес більш зрозумілим, ми будемо візуалізувати сцену в три етапи.

На першому етапі ми будемо обчислювати світловий кеш для всієї анімації. На другому етапі ми будемо обчислювати карту освітленості. На третьому етапі ми будемо візуалізувати остаточну анімацію.

Зверніть увагу, що ви не зобов'язані використовувати цей метод для візуалізації прольотів камери. Ви можете завжди використовувати більш повільний спосіб прямого обчислення (brute-force) і уникнути всіх цих проблем, що стосуються попереднього обчислення різних рішень GI. Однак ви платите за це часом візуалізації.

Частина I: Обчислення світлового кеша

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.16. Для прикладу візуалізують 360 п'ятий кадр. Зверніть увагу, що хоча ми визуализируем тільки один кадр, режим 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. Візуалізують кілька кадрів.

Вони показують, що світловий кеш досить хороший, і ми можемо перейти до наступної частини - обчисленню карти освітленості.

Частина II: Обчислення карти освітленості

У порівнянні зі світловим кешем, карта освітленості може зажадати значно більше часу для обчислення. Це відбувається через те, що світловий кеш надає дуже наближене і недеталізірованние рішення освітлення. А карта освітленості передає навіть дрібні 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. Увімкніть опцію Do not render final image в свиті Global switches. так як нам поки не треба візуалізувати остаточну анімацію і нам не потрібні остаточні кадри.
2.6. Візуалізують послідовність цілком.

2.7. Збережіть карту освітленості в файл, наприклад в irmap.vrmap.
2.8. Для карти освітленості встановіть Mode в From File з тільки що збереженим файлом.

Тепер у нас є одна карта освітленості для всієї анімаційної послідовності. Ми можемо візуалізувати кілька кадрів, що б упевнитися, що все в порядку.

2.9. Вимкніть опцію Do not render final image.

2.10. Візуалізують кадри 0 і 360 з анімації:

Візуалізація статичної сцени з прольотом камери
Візуалізація статичної сцени з прольотом камери

Ці два зображення були візуалізовані з настройками, використаними для остаточної анімації в Частини III.

Тепер ми готові візуалізувати остаточну анімацію.

Частина 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 Мб). яку ви повинні отримати, якщо ви правильно виконали цей урок.

  • У цій сцені ми не використали розмитих відображень, але якщо ви їх використовуєте, але не використовуєте в той же час опцію Use light cache for glossy rays. то ви можете встановити для остаточної анімації Secondary GI в None. оскільки вам не потрібен світловий кеш і вимкнувши його ви заощадите пам'ять.

Тут використовується той факт, що інформація з світлового кешу, встановленого для вторинних відскоків, включається в карту освітленості, встановлену для первинних відскоків. Прямої вказівки на те, що інформація, отримана від роботи алгоритму прорахунку вторинних відскоків (світловий кеш або прямий прорахунок), включається в карту освітленості, встановлену для первинних відскоків, я не виявив. Однак це так. Це можна перевірити, подивившись збережену карту освітленості утилітою 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 призначення кадрів без збереження будь-яких файлів? При читанні вашого попереднього повідомлення, у мене склалося відчуття, що ви натякаєте, що вам необхідно посилати різні фрагменти анімації на кожен вузол візуалізації.

В: Я повинен зробити анімацію з розпиленням рідини (див. Прикріплене зображення). І у мене багато розмитих відображень і заломлень. Якщо я дотримуюся вашому уроку, то як мені треба зробити остаточні налаштування? Зі світловим кешем для вторинних відскоків і Use light cache for glossy rays. або без світлового кеша і без урахування вторинних відскоків? Чи будуть Use light cache for glossy rays і карта освітленості для первинних відскоків працювати добре?

В: Ви можете мати світловий кеш, збережений з картою освітленості. Якщо так зроблено, ви дійсно можете вимкнути вторинні відскоки, що б зберегти пам'ять, яка була б зайнята завантаженим світловим кешем. Однак, якщо світловий кеш використовується для попереднього обчислення розмитих відображень / заломлень (включена опція Use light cache for glossy rays), то вам буде необхідно завантажувати світловий кеш при візуалізації.