Освітлення (комп'ютерна графіка)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Сцену винесено з RRV[1] (проста реалізація освітлення візуалізатора на основі OpenGL) 79-та ітерація.

У 3D комп'ютерній графіці, освітлення є застосуванням методу скінченних елементів для розв'язання рівняння рендерингу для сцен з поверхнями, які відбивають світло дифузно. На відміну від методів візуалізації, які використовують алгоритми Монте-Карло (таких як трасування шляху), які обробляють всі види шляхів світла, типове освітлення бере для розрахунку тільки шляхи (представлені кодом «LD*E»), які виходять з джерела світла і відображаються дифузно деяке число раз (можливо і нульове) поки не потраплять в очі. Освітлення — це алгоритм глобального освітлення в тому сенсі, що освітлення потрапляє на поверхню не тільки безпосередньо від джерел світла, але і від інших поверхонь, які відбивають світло. Освітлення не залежить від точки спостереження, внаслідок чого збільшує кількість розрахунків, але їх можна використовувати для всіх точок огляду.

Методи освітлення були вперше розроблені приблизно в 1950 році в інженерній галузі теплообміну. Пізніше вони були удосконалені спеціально для задачі візуалізації комп'ютерної графіки в 1984 році дослідниками з Корнелльського університету[2] і Хіросімського університету.[3]

Відомі комерційні двигуни Enlighten від Geomerics[en] (використовується для ігор, включаючи Battlefield 3 і Need For Speed: The Run); 3ds Max; Form-Z[en]; LightWave 3D[en] і Electric Image Animation System[en].

Візуальні характеристики[ред.ред. код]

Різниця між стандартним прямим освітленням без тіні Umbra, і освітлення з тінню Umbra.

Включення розрахунків освітлення в процесі рендеринга часто надає додатковий елемент реалізму до готової сцени, тому що так вона імітує реальні явища. Розглянемо просту сцену кімнати.

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

Зображення справа було винесено використовуючи алгоритм освітлення. Є тільки одне джерело світла: зображення неба, що розташовано за межами вікна. Різниця відмічається. Номер сяє світлом. М'які тіні видно на підлозі, і тонкі ефекти освітлення помітні навколо кімнати. Крім того, червоний колір килима розплився на сірих стінах, надаючи їм злегка теплий зовнішній вигляд. Жоден з цих ефектів не був спеціально обраним або розробленим художником.

Обзор алгоритму освітлення[ред.ред. код]

Кожна поверхня при візуалізації сцени ділиться на один або більше невеликих поверхонь (патчі). Коефіцієнт видимості [en](також відомий як форм-фактор) обчислюється для кожної пари патчів; це коефіцієнт, що описує наскільки добре патчі можуть бачити один одного. Патчі, які знаходяться далеко один від одного, або орієнтовані під кутом по відношенню один до одного, будуть мати менші коефіцієнти. Якщо інші патчі в дорозі, коефіцієнт видимості буде зменшений або дорівнювати нулю, в залежності від того, є оклюзія частковою або повною.

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

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

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

Інший розповсюджений метод для вирішення рівняння освітлення є «зйомка освітлення», який ітеративно вирішує рівняння освітлення шляхом «зйомки» світла з патч, який має більшу помилку на кожному кроці. Після першого проходу, будуть освітлені тільки ті патчі, які знаходяться в прямій видимості від світловипромінюючих патч. Після другого проходу, більше патчів будуть освітлюватися. Сцена продовжує зростати яскравіше і в кінцевому рахунку досягає стійкого стану.

Математичне формулювання[ред.ред. код]

Основний метод освітлення має свою основу в теорії теплового випромінювання, так як освітлення покладається на обчисленні кількості світла, енергії, що передається між поверхнями. Для спрощення обчислень, метод передбачає, що всі розсіювання є абсолютно дифузними. Поверхні, як правило, дискретизовані в чотирикутні або трикутні елементи, над якими визначається кусочно-поліноміальна функція.

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

Вірніше, освітлення B є енергією на одиницю площі, залишаючи поверхню патча, за дискретний інтервал часу, і являє собою поєднання випромінюваної і відбитої енергії:

де:

  • B(x)i dAi — повна енергія, яка залишає маленьку площу dAi навколо точки x.
  • E(x)i dAi — випромінювана енергія.
  • ρ(x) — відображення точки, яке дає зважену енергію на одиницю площі шляхом множення на побічну енергію на одиницю площі (загальна енергія, яка надходить з інших патчів).
  • S означає, що змінна інтегрування x' пробігає всі поверхні в сцени
  • r — є відстань між x та x'
  • θx та θx' — кути між лінією, яка з'єднує x та x' і вектори нормалі до поверхні в точці x та x' відповідно.
  • Vis(x,x' ) — є функцією видимості, визначається як 1, якщо двом точкам x та x' видно один одного, і 0, якщо ні.
Геометричний форм-фактор (або «проектування тілесного кута») Fij.


Fij можуть бути отримані шляхом проектування елемента Aj на зовнішню частину півсфери, а потім — на одиничне коло. Форм-фактор при цьому дорівнює частці одиничного кола, яка охоплюється цією проекцією.

Форм-фактори підкоряються взаємному співвідношенню AiFij = AjFji

Якщо поверхня апроксимуються кінцевим числом плоских патчів, кожен з яких має постійне освітлення Bi та відображення ρi, то наведене вище рівняння дає дискретне рівняння освітлення,

де Fij — це геометричний коефіцієнт видимості[en] для випромінювання, що залишає j та видаляє патч i.

Це рівняння може бути застосовано до кожного патчу. Рівняння є монохроматичним, тому колір освітлення рендеринга вимагає обчислення для кожного з потрібних кольорів.

Методи рішення[ред.ред. код]

Рівняння може бути формально вирішеним як матричне рівняння, щоб дати вектор рішення:

Це дає повний «нескінченний стрибок» рішення для B безпосередньо. Однако кількість розрахунків для обчислення матриці ваг відповідає n3, де n — це число патчів. Це стає забороною для реально великих значень n.

Замість цього, рівняння може легко бути вирішено ітеративно, шляхом багаторазового застосування формули поновлення одного відскоку вище. Формально це рішення матричного рівняння метода Якобі. Оскільки відбивна здатність ρi менше 1, ця схема сходиться швидко, як правило, потрібно тільки декілька ітерацій, щоб отримати розумне рішення. Інші стандартні ітераційні методи матричного рівняння рішень можна також використовувати, наприклад, метод Гаусса-Зейделя, де оновлені значення для кожного фрагмента зображення використовуються в розрахунку як тільки вони обчислюються, а не все оновлюється синхронно в кінці кожного проходу. Використовуючи коефіцієнт взаємності, Ai Fij = Aj Fji, рівняння оновлення може бути переписане з точки зору коефіцієнта взаємності Fji для кожної відправки патча Aj:

Це іноді називають формулюванням «потужності», так як тепер сумарна потужність передачі кожного елемента оновлюється, а не освітлюється.

Сам коефіцієнт видимості[en] Fij може бути обчислений декількома способами. Ранні методи використовували полукуб[en](уявний куб з центром на першій поверхні, до якої проектувалася друга поверхня; йога винайшли Cohen і Greenberg в 1985 році). Поверхня полукуба була розділена на пікселі як квадрати, для кожного з яких коефіцієнт видимості[en] можна легко розрахувати аналітично. Повна форма-фактор може потім бути аппроксимирована шляхом підсумовування вкладу кожного з піксельних подібних квадратів. Проекція на полукуб, який може бути адаптований зі стандартних методів визначення видимості полігонів, также вирішує проблему втручання патчі частково затуляючи тих, хто позаду.

Однак все це було досить дорого в обчислювальному відношенні, так як в ідеалі форм-фактори[en] повинні бути отримані для кожної можливої ​​пари патчів, що призводить до квадратичного росту обчислень, так як кількість виправлень збільшилась. Вони можуть бути дещо знижені за допомогою бінарного розбиття простору, щоб зменшити кількість часу, що витрачається на визначення того, які патчі повністю приховані від інших в складних сценах; але навіть в цьому випадку, час, потрачений для визначення форм-факторів досі зазвичай масштабується як n log n. Нові методи включають адаптивні інтеграції[4]

Методи вибірки[ред.ред. код]

Форм-фактори Fij самі по собі не є насправді явно потрібні в будь-якому з рівнянь оновлення; ні для визначення загальної інтенсивність ∑j Fij Bj, яка зібрана з усих точок зору, ні для оцінки, як випромінена потужність Aj Bj розподіляється. Замість цього, ці оновлення можна оцінити за допомогою методів вибірки, без необхідності обчислювати коефіцієнти форми в явному вигляді. З середини 1990-х років такі методи найбільшою мірою використовувалися для практичних розрахунків освітлення.

Зібрана інтенсивність може бути оцінена шляхом генерації набору зразків в одиничному колі, піднявши їх на півсфері, а потім подивитися, що було освітлення елемента, що промінь, який входить у цьому напрямку буде створюватися. Оцінка загально зібраної інтенсивності — то просто середнє з освітлень, виявлених кожним променем. Аналогічним чином, в формулюванні потужності, потужність може бути розподілена шляхом генерації набору променів від випромінюючого елемента таким же чином, і поширюючи потужність розподіляється порівну між кожним елементом проміню хіти.

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

Скорочення часу обчислень[ред.ред. код]

Хоча у своїй основній формі освітлення передбачається мати квадратичне збільшення часу обчислень з додаванням геометрії (поверхонь і патчів), це не повинно бути так. Проблема освітлення можна перефразувати як проблема рендеринга текстури відображення сцени. В цьому випадку час обчислення збільшується тільки лінійно з числом патчів (без урахування складних питань, як використання кеш-пам'яті).

Багато архітекторів і художників-графіки використовували техніку, згадану вільно як помилкове освітлення[en]. Потемніння області текстурних карт, відповідних кутів, стиків і щілин — освітлення подібного ефекту взаємодії патчів може бути створено за допомогою стандартного Scanline візуалізатора (див. Ambient occlusion).

Статичне, попередньо розраховане освітлення може відображатися в режимі реального часу за допомогою карти освітлення[en]на поточних настільних комп'ютерів за допомогою стандартного апаратного прискорення графіки.

Переваги[ред.ред. код]

Сучасна візуалізація чайника Юта. Освітлення використовувалось для всіх дифузних висвітлень в цій сцені.

Однією з переваг алгоритму освітлення є те, що це порівняно легко пояснити і реалізувати. Це робить його корисним алгоритмом для навчання студентів глобальним алгоритмам освітлення. Типові прямі візуалізації освітлення вже містять майже всі алгоритми (перспективні перетворення, текстури, приховані поверхні видалення[en]), які необхідні для здійснення освітлення. Сильне розуміння математики не потрібно, щоб зрозуміти і реалізувати цей алгоритм.

Обмеження[ред.ред. код]

Типові методи освітлення тільки розраховуються для легких шляхів виду LD*E, тобто шляхів, які починаються з джерела світла і виконують кілька ітерацій до досягнення очей. Хоча існує кілька підходів до інтеграції інших світлових ефектів, таких як дзеркальних[en][5] і розмитих відображень[6], як правило, вони не використовуються для вирішення повного рівняння рендеринга.

Основне освітлення також має проблеми вирішення раптових змін видимості (наприклад, безкомпромісної тіні), тому що груба, звичайна модуляції кусочно-постійних елементів відповідає коробці фільтра нижніх частот просторової області. Розрив сітки [1] використовує знання подій для створення більш інтелектуальних дискретизацій.

Плутанини в термінології[ред.ред. код]

Освітлення було, мабуть, перший алгоритмом рендеринга, який широко використовується. Раніше надання алгоритмів, таких як трасування променів Whitted-style[en] були здатні обчислювати ефекти, такі як відображення, заломлення і тіні, але не дивлячись на вельми глобальні явища, ці ефекти незвичайно називають «глобальним освітленням.» Як наслідок, терміни «дифузне відображення» і «освітлення» стали плутати з «глобальним освітленням» в просторіччі. Проте, це три різні поняття.

Метод освітлення, в контексті комп'ютерної графіки, походить від (і фундаментально є такий же, як) метод освітлення в теплопередачі. У цьому контексті освітлення є загальним радіаційним потоком, залишаючим поверхню; це також іноді називають енергетичне освітлення[en]. Розрахунок освітленності, а не поверхневих температур, є ключовим аспектом метода освітлення, який дозволяє слід застосувать методи лінійної матриці до цієї проблеми.

Див. також[ред.ред. код]

Посилання[ред.ред. код]

  1. Dudka, Kamil. RRV - Radiosity Renderer and Visualizer. Процитовано 1 February 2013. 
  2. «Cindy Goral, Kenneth E. Torrance, Donald P. Greenberg and B. Battaile, Modeling the interaction of light between diffuse surfaces»,, Computer Graphics, Vol. 18, No. 3.
  3. «T. Nishita, E. Nakamae, Half-Tone Representation of 3-D Objects with Smooth Edges by Using a Multi-Scanning Method»,,Journal of IPSJ, Vol.25, No.5, pp.703-711,1984 (in Japanese)
  4. G Walton, Calculation of Obstructed View Factors by Adaptive Integration, NIST Report NISTIR-6925, see also http://view3d.sourceforge.net/
  5. http://portal.acm.org/citation.cfm?id=37438&coll=portal&dl=ACM
  6. http://www.cs.huji.ac.il/labs/cglab/papers/clustering/

Подальше читання[ред.ред. код]

Посилання[ред.ред. код]

  • RADical, by Parag Chaudhuri (Реалізація зйомки і сортування варіантів прогресивного алгоритму освітлення з OpenGL  прискоренням, що тягнеться від GLUTRAD до Colbeck)
  • Radiosity Renderer and Visualizer (проста реалізація освітлення на основі засобів візуалізації OpenGL)
  • Enlighten (Ліцензійний програмний код, який забезпечує в режимі реального часу освітлення для комп'ютерних ігор. Розроблений британською компанією Geomerics[en])