Основи рендеринга

Guy Wright, переклад і адаптація – Paggard
Digital Light

Для багатьох людей слово "рендеринг" міцно асоціюється з іншим: "очікування". Для невеликого ж кількості людей слово "рендеринг" означає сукупність математичних операцій з широким діапазоном можливих результатів. Ця стаття, я сподіваюся, допоможе людям, далеким від програмування, зрозуміти, що ж відбувається всередині комп'ютера під час рендеринга. Ми розглянемо декілька способів візуалізації і приклади їх застосування на практиці.

Більшість 3D модельєр, художників і аніматорів погано уявляють як проходить рендеринг, і чим займається програма рендерер в процесі роботи. Програма рендерер розглядає 3D сцену з математичної точки зору, обчислює, як повинна виглядати сцена і потім створює підсумкове зображення. Ми всі знаємо, що різні програми використовують різні технології візуалізації – трасування променів (raytrasing), ретушування (Shading) і згладжувати контурних нерівностей (antialiasing), для досягнення максимальної схожості штучного зображення на реальне життя. Ми також чудово знаємо, що чим складніше сцена і вище якість вихідного зображення, тим довше триває процес рендеринга. Можливо, ви також чули такий термін, як "потоковий рендеринг" (rendering pipeline). Але по суті, мало хто замислювався, яким чином відбувається процес рендеринга і від чого залежить кінцевий результат. Я думаю, вам цікаво буде дізнатися про особливості різних рендерер, їх можливості та відмінності.

Почнемо з цифр – ви напевно не здогадувалися, але існує більше 500 (п'ятсот) різних програм для візуалізації. Одні з них вбудовані в пакети 3D моделювання, інші поставляються як окремі продукти, одні можуть виконувати величезну кількість завдань, інші створені для специфічних цілей. Існують рендерер, створений спеціально для певних індустрій (наприклад, для військових цілей), для певного обладнання (Аміго), для певних операційних систем (Лінукс), та інших, іноді найнесподіваніших цілей (3D аудіо). Крім того, існує певна кількість безкоштовних рендерер, створених ентузіастами.

Ви запитаєте навіщо стільки різних програм однаковою спрямованості? Одна з причин – це те, що люди і компанії створюють подібні програми вже протягом 15 років, крім того, існує більше дюжини платформ, здатних підтримувати процес рендеринга. Порахуємо: якщо кожна платформа має 2-3 real-time рендерер (в основному для ігор), 2-3 non-real-time рендерер (комерційні 3D пакети), 2-3 спеціалізованих рендерер (створених для військової, або іншій індустрії), додамо сюди невизначений кількість вільно розповсюджуваних рендерер (найчастіше написаних студентами, хакерами і початківцями програмістами) – Ось ми і наблизилися до реального числа.

Зовсім необов'язково знати про всі ці системи візуалізації. Але в залежності від роботи, яку вам необхідно виконати, вам можливо знадобляться деякі знання, що стосуються різних програм візуалізації. Наприклад, якщо ви розробляєте сцени для ігрової індустрії, вам необхідно знати можливості real-time рендерер, на основі якого буде працювати гра.

Більшість рендерер діляться на дві категорії: real-time і non-real-time. Крім того, всі рендерер можна розділити за принципом використовуваних технологій – scan-line і raytrace. Ми розглянемо основних представників цих категорій та їх відмінності, щоб ви змогли самостійно вибрати найбільш для вас підходящий.

Потоковий рендеринг (Rendering Pipeline)

Потоковий рендеринг грунтується на чотирьох рівнях.

Всі об'єкти 3D сцени чітко визначені в просторі, до того, як ви ставите об'єкт в сцену, у нього уже є власний геометричне опис: довжина, висота, ширина і глибина, але він поки ніяк не пов'язаний з іншими об'єктами. У цей етап також може входити і процес tessellation (коли обраховується поверхні трансформуються в полігони). Тут потрібно бути обережним, тому що якщо ви використовуєте NURBS і поверхні Безьє – точність виконання tessellation виляє на остаточні результати.

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

Коли в сцені з'являється камера, всі об'єкти набувають нового параметр – орієнтація і місце розташування по відношенню до камери. На цій стадії всі полігони перевіряються на предмет видимості, полігони, не видимі камерою ігноруються. Цей процес називається отсеиванием невидимих поверхонь (backface cutting). Камері також можуть бути присвоєні анімаційні атрибути.

Далі, всі об'єкти трансформуються з точки зору кінцевого зображення. Спочатку, в залежності від налаштувань камери (фокусна відстані, поле зору т.п.) формується візуальний коридор. Полігони повністю за межами візуального коридору ігноруються, що лежать на кордоні – скорочуються. На цьому етапі виконується безліч візуальних трюків, щоб компенсувати спотворення перспективи (більш віддалені речі здаються менше і т.д.).

Тепер ми входимо в ту стадію, яку більшість людей вважає власне процесом візуалізації, хоча технічно всі перераховані вище етапи – це частина потокового рендеринга. Отже, обрізані і коректно спотворені полігони проектуються на площину (як ніби на екран монітора). Кожен полігон перетворюється в растровий формат, ретушується, обчислюється глибина кольору. На цьому етапі можуть застосовані різні ефекти типу Antialiasing і Motion Blur.

Всі ці етапи – це частини "технічного" рендеринга і більшість пакетів 3D моделювання дозволяють виконувати їх у реальному часі і приступати до фінальної стадії тільки після натискання кнопки "RENDER".

У той час, як початкові етапи потоку досить нехитрі (чиста математика), остання стадія може бути виконана величезною кількістю способів, прийомів і трюків, покликаних прискорити процес, але в той же час зробити сцену максимально реальною. На жаль, багато прийомів, що використовуються для прискорення процесу або досягнення певного візуального ефекту ведуть до появи проблем, які вирішуються за допомогою нових прийомів і трюків (зі своїми проблемами) – і так далі.

Наприклад, рендерер, засновані на принципі Radiosity, беруть майже готову сцену і аналізують кількість світла, відбитого від інших поверхонь, з урахуванням зміни його спектру, це світло в свою чергу відбивається від поверхні і падає на іншу … Ці обчислення повторюються знову і знову. Коли обчислення закінчені, кожна поверхня забарвлюється і ретушується відповідно до результатів обчислень. Головною проблемою такого способу є те, що для обмеження часу виконання (інакше обчислення тривали б нескінченно), обрахування ведеться відповідно до певного алгоритму, але саме в результаті цього деякі поверхні можуть бути виключені з загального процесу і пофарбовані некоректно.

Тим не менш, такий спосіб візуалізації дає прекрасні результати. Але Radiosity, який чудово підходить для нерухомих сцен, мало придатний для візуалізації анімацій. У силу особливостей даного принципу, при рендерінгу рухомих об'єктів можлива поява мерехтіння.

[Вперед]

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*