4. Методи побудови реалістичних трьохвимірних зображень

4.7. Методи побудови тіней

 

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

 

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

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

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

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

Виділяють три класи алгоритмів побудови тіней:  

1.  Обчислення затінення в процесі перетворення в растровий вигляд;  

2.  Поділ поверхонь об'єкта на тіньові та нетеневие площі, що передує перетворенню в растровий вигляд;  

3.  Включення значення тіней в дані, що описують об'єкт.  

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

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

Основні принципи побудови тіней  

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

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

На рисунку 4.25 показаний приклад падаючих, власних тіней.  

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

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

 

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

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

Побудова тіней в алгоритмі трасування променів.  

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

Коротко розглянемо основні принципи роботи алгоритму трасування променів.  

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

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

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

Побудова тіней з використанням алгоритму z-буфера.  

Алгоритм видалення невидимих поверхонь з використанням z-буфера легко може бути модифікований для того, щоб враховувати ефект відкидання тіней.  

Розглянемо коротко основні принципи роботи алгоритму видалення невидимих поверхонь з використанням z-буфера. Ідея даного методу дуже проста.  

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

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

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

Потім сцена будується з точки, в якій перебуває спостерігач. При скануванні кожної поверхні значення її глибини в кожному пікселі порівнюється зі значенням глибини в z-буфері. Якщо поверхня видима, то необхідно перевірити, видима чи дана точка з положення джерела світла. Для цього координати точки x, y, z з виду спостерігача лінійно перетворюються в координати x ', y', z 'на вигляді з джерела світла. Перевірка на видимість здійснюється шляхом порівняння значення, яке зберігається в "тіньовому" z-буфері для координат x ', y', і значення z '. Якщо точка невидима з положення джерела світла (значення в "тіньовому" z-буфері більше значення z '), то вона перебуває в тіні і зображається відповідно до правила розрахунку інтенсивності з урахуванням затінення. Якщо ж точка видима з положення джерела світла, то вона зображується без змін.  

Включення   тіней   в  алгоритми   порядкового  сканування.  

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

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

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

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

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

*  Якщо немає жодного тіньового багатокутника, то видимий відрізок зображується;  

*  Якщо для багатокутника, що містить видимий відрізок, є тіньові багатокутники, але вони не перетинають і не покривають даний інтервал, то видимий відрізок зображується;  

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

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

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

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

Як приклад розглянемо побудову тіней в пакеті 3D-Studio MAX 2.0 для тривимірного моделювання і рендерінга. У цьому пакеті реалізована можливість будувати тіні, як за допомогою методу трасування променів (ray-traced shadows), так і з використанням тіньових карт (shadow-maps).  

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

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

Візуалізатор створює тіні шляхом відстеження (трасування) шляхи променів, що випускаються джерелом світла. Тіні згенеровані таким способом більш точні. Наприклад, тільки трасуванням променів можна створити тіні для каркасних (дротяних) об'єктів, і лише цим методом створюються правильні тіні від прозорих або напівпрозорих об'єктів. На малюнку 4.26 показана одна і та сама сцена, яка була для порівняння візуалізувати в пакеті 3D-Studio MAX 2.0 з використанням різних методів побудови тіней. Джерело світла знаходиться за спостерігачем. Як бачимо всі особливості, розглянуті вище, ясно проглядаються на рисунку.4.26.  

Для того, щоб додати тіні до своєї сцені в 3D-Studio MAX, необхідно вибрати джерело світла і в панелі команд змінити його параметри, що знаходяться у вкладці Shadow Parameters (параметри тіні). Зовнішній вигляд цієї вкладки показаний на ріс.4.27. Розглянемо докладніше значення її параметрів.  

 

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

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

 

Опції Use Shadow Maps і Use Ray-Traced Shadows визначають, яким методом будуть створюватися тіні для даного джерела світла: за допомогою тіньових карт (Shadow Maps) або методом трасування променів (Ray-Traced Shadows). Відмінності цих методів розглядалися нами раніше.  

Параметр Map Bias (зсув карти) наближає або відсуває тінь від об'єкта, що відкидають тінь. За умовчанням цей параметр дорівнює 1.0. Збільшення зміщення рухає тінь далі від об'єкта, зменшення параметра переміщує тінь ближче до об'єкта. Значення зміщення карти може бути будь-яким позитивним числом з плаваючою крапкою. Цей параметр використовується тільки, якщо тіні створюються за допомогою тіньових карт (Shadow Maps).  

Параметр Size задає розмір карти тіні (Shadow Map), яка розраховується для даного джерела тіні. Розмір карти може знаходитися в межах від 0 до 10000. Слід мати на увазі, що карта з великим дозволом потребує для зберігання більше пам'яті і може потребувати більше часу для зберігання. Так, наприклад, карти тіні разміром у 4096 ліній зафмає 64 МБ пам'яті (4096ґ4096ґ4). Але, якщо при візуалізації тіні стали занадто грубими, вам потрібно збільшити дданий параметр.  

Параметр Smp Range (Sample Range – ширина вибірки) визначає те, в якому ступені усереднюється область всередині тіні. Цей параметр впливає на м'якість (розмитість) границь тіней, що були створені за допомогою тіневих карт (Shadow-mapped shadows). Маленькі значення зменшують область, яка усереднюється, і створюють тіні з більш чіткими границями. Слід зауважити, що такі тін можуть приводити до появи ефекту ступінчатості (aliasing). Великі значення параметру збільшують область усереднення і створують тіні з більш розмитими краями.  

За замовчіванням значення широти вибірки рівне 4. Данний параметр моде бути дійсним числом в межах від 0 до 20. Значення менше 3 можуть привести до створення тіней з грубими краями. Хоч цей ефект може бути зменшеним шляхом збільщення розміру карти тіней.  

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

Параметр Ray Trace Bias (зміщення трисування променів) робить вплив на створення тіней методом трасування променів. Зміна значення цього параметру приводить до того, що тінь віддаляєьбся або приближається до об'єкта, що відкидає тінь. За замовчуванням цей параметр рівен 1. Збільшення значення параметра рухає тінь від об'єкта, зменшення - до об'єкта. Значення може бути будь-яким дадотнім дійсним числом.  

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

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

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

1.  Як впливають тіні на реаоістичність зображень?  

2.  Перерахуйте основні елементи тіней.  

3.  Дайте характеристику основним методам побудови тіней.  

4.  Які команди для побудови тіней використовуються в пакеті 3D-Studio MAX 2.0?

     Зміст