Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

kniga

.pdf
Скачиваний:
224
Добавлен:
17.05.2015
Размер:
29.65 Mб
Скачать

Вивчимо питання про те, як знайти напрямок відбитого променя r та cosα. Будемо вважати, що заданий вектор l напрямлений на джерело світла, а також відомий вектор нормалі n.

Як відомо, при дзеркальному відображенні вектори l, r, n лежать в одній площині, причому кути між векторами l, n та n, r однакові (рис. 15.1).

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

 

rx = 2nx nz,

ry = 2ny nz,

rz = 2 nz2 – 1.

(15.9)

Знайдемо вектор r у загальному випадку (рис. 15.6).

 

 

n

 

 

 

 

n

Рис. 15.6. Вектори r, l, n одиничної

r

 

l

довжини

 

θ θ

 

 

Вектор r + l = nє діагоналлю ромба. Напрям nзбігається з n, причому |n| = 2cosθ, тому n= 2n cosθ , тобто r + l = 2n cosθ. Звідси знаходимо одиничний вектор відбитого променя

r = 2n cosθ l.

Враховуючи, що cosθ = (l n), одержуємо r = 2n(l n) – l,

а у скалярній формі

rx = 2nx(lxnx + lyny + lznz) – lx, ry = 2ny(lxny + lyny + lznz) – ly, rz = 2nz(lxny + lyny + lznz) – lz.

Тепер уже можна обчислити cosα = (s r), де s – одиничний вектор, направлений на спостерігача.

15.3. Зафарбовування поверхонь

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

291

ності вздовж границь об’єктів. Найбільш відомі методи побудови згладжених зображень – це методи Гуро та Фонга. Більш простий з них метод Гуро. Розглянемо ці методи.

15.3.1. Зафарбовування з постійною інтенсивністю

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

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

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

15.3.2. Метод Гуро

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

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

Зафарбовування методом Гуро здійснюється за чотири кроки:

обчислення нормалей до кожної грані;

292

обчислення нормалей у вершинах, наприклад методом усереднення нормалей сусідніх граней (рис. 15.4);

на основі нормалей у вершинах обчислюються значення інтенсивностей у вершинах згідно з вибраною моделлю, наприклад (15.4);

зафарбовуються грані кольором, що відповідає лінійній інтерполя-

ції значень інтенсивності світла у вершинах.

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

Нехай задана грань ABC (рис. 15.7) в екранних координатах. Використовуючи моделі освітлення, знайдемо інтенсивності відбитого світла у вершинах – нехай це будуть значення IA, IB, IC. Знайдемо освітленість у точці P. Зображаючи грань рядок за рядком, будемо знаходити значення інтенсивності в кінцях кожного горизонтального відрізка MN шляхом

X

M

B

N

 

 

P

Рис. 15.7. Заповнення грані

 

 

A

C

Y

лінійної інтерполяції значень вздовж ребер.

Так, освітленість у точці M обчислимо за формулою

I(M )= I(A) t+ I(B) (1 – t), t = || MAAB || .

Аналогічно обчислюємо I(N). Маючи значення I(M), I(N), за допомогою лінійної інтерполяції знаходимо I(P):

I(P) = I(M)(1 – s) + I(N)s, s =

| PM |

, або s =

| X P X M |

.

| MN |

 

 

 

 

| X N X M |

Легко перевірити, що колір точки P є лінійною комбінацією кольорів у точках A, B, C із коефіцієнтами, сума яких дорівнює одиниці.

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

293

15.3.3. Метод Фонга

Цей метод аналогічний до методу Гуро (він теж базується на інтерполюванні), але, на відміну від методу Гуро, тут інтерполюються не значення інтенсивності відбитого світла, а значення вектора зовнішньої нормалі. Тобто, метод Фонга полягає в побудові для кожного пікселя вектора, що відіграє роль нормалі і цей вектор використовується для обчислення інтенсивностей компонент відбитого світла в кожній точці згідно з вибраною моделлю освітлення.

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

Розглянемо, як можна одержати вектор нормалі, а отже, колір зафарбовування в довільній точці P грані ABC (рис. 15.8).

 

 

 

 

 

X

 

 

NB

 

 

NU

 

B

 

 

 

NP

NV

Рис. 15.8. Інтерполяція

 

 

 

 

 

 

 

нормалей

NA

U P V

 

 

 

 

 

 

 

A

 

 

 

 

NC

 

 

 

 

 

Y

 

 

 

C

 

Маючи нормалі примикаючих граней, знаходимо нормалі в опорних точках (вершинах A, B, C). За допомогою лінійного інтерполювання векторів NU, NV знайдемо NP (рис. 15.8), а для знаходження NU, NV інтерполюємо вектор нормалі вздовж ребер граней, тобто знаходимо

NU = (1 – t)NA + tNB, t =

NV = (1 – t)NB + tNC, t =

NP = (1 – s)NU + sNV, s =

| UA | , | AB | | BV | , | BC | | UP | . | UV |

Але оскільки в моделях освітленості використовуються одиничний вектор нормалі, то вектори NU, NV, NP потрібно нормувати.

Зауваження 4. Змінюючи довільно вектор нормалі можна моделювати поверхні з різними властивостями.

294

Як бачимо, перевагою моделей зафарбовування Гуро і Фонга є їх відносна простота, але одержаний результат може бути не завжди задовільним. Тому метод зафарбовування Фонга часто не підтримується апаратно, а в OpenGL навіть не включений у графічні бібліотеки.

Поліпшувати якість зображення дозволяють досконаліші методи, наприклад методи трасування променів.

15.4. Методи трасування променів

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

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

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

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

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

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

295

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

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

Рис. 15.9. Пряме трасування променів

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

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

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

296

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

ока спостерігача через кожний піксель площини проекцій

у 3D-сцену.

Це будуть первинні промені зворотного трасування.

 

 

 

 

Виберемо

центральну

проекцію

з

 

центром в точці О на деякій відстані від

 

площини

проектування.

Проведемо

B

пряму лінію з центра проектування О в

 

середину

пікселя

Aij

площини

 

проектування. Якщо пряма лінія цього

 

променя

 

попадає в

один чи кілька

Aij

об’єктів сцени, то обираємо найближчу

 

точку перетину B. Інтенсивність

 

пікселя

 

Aij

площини

проекцій

 

однозначно визначається

освітленістю

 

точки В. В свою чергу, освітленість

Рис. 15.10. Зворотне

точки

В

визначають

відбита

та

заломлювана енергія, отримана від

трасування променів

джерел світла та від інших об’єктів

 

 

сцени.

Для

визначення

освітленості

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

Якщо поверхня дзеркальна, то вторинний промінь будуємо як промінь падіння, вважаючи променем відбиття попередній (первинний) промінь зворотного трасування. Вище були наведені формули для обчислення вектора дзеркально відбитого променя. Ці ж формули можна використати для розрахунку падаючого променя (відбиття навпаки).

Якщо об’єкт прозорий, то необхідно побудувати ще один вторинний промінь, такий, який би при заломленні давав первинний трасований промінь (рис. 15.10). Вектор цього променя можна розрахувати на основі фізичних властивостей заломлення світла.

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

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

297

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

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

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

Для ідеального дзеркала (один промінь падає – один відбивається) достатньо знаходити лише чергову точку перетину вторинного променя з деяким об’єктом. Якщо дзеркало неідеальне, то метод зворотного трасування значно ускладнюється, оскільки потрібно уже відстежувати не один промінь, а множину (сотні) променів, які складають конус з віссю вздовж лінії падаючого променя для ідеального дзеркала.

Якщо об’єкт володіє властивостями дифузного відбиття, то знову, як

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

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

Тому метод зворотного трасування найкраще підходить для 3D-сцен без складних джерел світла та дифузних поверхонь (наприклад, для сцен із точковими джерелами світла та ідеально дзеркальними або прозорими тілами)

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

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

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

298

леної точки поверхні визначається власним кольором поверхні й кольором джерел світла.

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

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

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

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

Для складних параметричних поверхонь об’єктів сцени аналіз перетину проводиться для елементів поверхні. Якщо промінь перетинає сферичну оболонку елемента поверхні, то цей елемент розбивається на піделементи. Далі перевіряється перетин променя зі сферичними оболонками піделементів.

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

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

299

Контрольні питання та завдання

1.Як обчислюється інтенсивність відбитого світла для дзеркальних та матових поверхонь?

2.Які моделі освітлення використовують у КГ?

3.Як обчислити координати вектора нормалі до параметрично заданої поверхні?

4.Як розрахувати тон зафарбовування точок поверхні?

5.Опишіть метод постійного зафарбовування. Назвіть його недолік.

6.Які ефекти фотореалістичної візуалізації тривимірних моделей не можна одержати методом Фонга?

7.Порівняйте кількість обчислень у методах Фонга та Гуро.

8.Запишіть алгоритм методу зворотного трасування променів.

9.Що є критерієм зупинки методу зворотного трасування променів?

10.Чому метод зворотного трасування більш ефективний, ніж метод прямого трасування?

11.Для чого використовується метод оболонок?

12.Як знайти перетин променя з многогранним об’єктом?

13.Як знайти перетин променя з об’єктом, що заданий аналітичною неявною функцією?

Вправи і задачі для самостійного виконання

1.Обчислити координати заломленого променя.

2.Вивести рівняння нормалі для параметрично заданої сфери.

3.Записати координати вектора нормалі для вершини багатогранної поверхні у скалярній формі.

4.Перевірити чи оболонка-куб перетинається з променем.

5.Розробити алгоритм перевірки перетину променя з гранями тетраедра/прямокутним паралелепіпедом.

6.Запишіть базову операцію зворотного трасування променів у вигляді рекурсивної функції.

7.Розробити алгоритм знаходження точки перетину променя зі сферою.

8.Написати програму для моделювання реалістичної освітленості методом трасування променів у сцені, що містить тільки сфери.

9.Написати процедуру зафарбовування трикутної граніметодом Фонга.

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

11.Розробити алгоритм накладання текстури T(х, у) наповерхню P(u, v).

12.Розробити алгоритм моделювання туману.

300

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]