Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
function Cosine_interpolate(а, b, x)

ft = x * 3.1415927
f = (1 - cos(ft)) * .5
return a*(1-f)+ b*f end of function
Точніший метод, ніж лінійна інтерполяція (виходить гладка крива), зате повільніший за рахунок обчислення косинуса. Обчислення можна прискорити, якщо використовувати табличне завдання косинуса.
Кубічна інтерполяція:
function Cubic_interpolate(v0, v1, v2, v3,x)
P = (v3 - v2) - (v0 - v1)
Q = (v0 - v1) - P
R = v2 - v0
S = v1
return Px3 + Qx2 + Rx + S
end of function

Це більш точний метод, ніж косинусна інтерполяція, але повільніший, за рахунок використання великої кількості множень. Як правило, досить використовувати лінійну або косинусную інтерполяцію.
![]() | ![]() |

На етапі інтерполяції відбувається згладжування кривої, але необхідно також згладжувати отримувану картинку, використовуючи двовимірні фільтри.
function Noise(x, y)
.
.
end function
function SmoothNoise_2D(x>, y)
corners = ( Noise(x-1, y-1)+Noise(x+1, y-1)+Noise(x-1, y+1)+Noise(x+1, y+1) ) / 16
sides = ( Noise(x-1, y) +Noise(x+1, y) +Noise(x, y-1) +Noise(x, y+1) ) / 8
center = Noise(x, y) / 4
return corners + sides + center
end function
Виходячи зі всіх умов і перетворень в результаті отримаємо наступний алгоритм отримання двовимірної картинки з використанням функцій Perlin Noise:
function Noise(integer x, integer y)
n = x + y * 57;
n = (n << 13) ^ n;
return (1.0 - ((n * (n * n * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);
end function
function SmoothNoise(float x, float y)
corners = (Noise(x-1, y-1) + Noise(x+1, y-1) + Noise(x-1, y+1) + Noise(x+1, y+1)) / 16
sides = (Noise(x-1, y) + Noise(x+1, y) + Noise(x, y-1) + Noise(x, y+1)) / 8
center = Noise(x, y) / 4
return corners + sides + center
end function
function InterpolatedNoise(float x, float y)
integer_X = int(x)
fractional_X = x - integer_X
integer_Y = int(y)
fractional_Y = y - integer_Y
v1 = SmoothedNoise(integer_X, integer_Y)
v2 = SmoothedNoise(integer_X + 1, integer_Y)
v3 = SmoothedNoise(integer_X, integer_Y + 1)
v4 = SmoothedNoise(integer_X + 1, integer_Y + 1)
i1 = Interpolate(v1 , v2 , fractional_X)
i2 = Interpolate(v3 , v4 , fractional_X)
return Interpolate(i1 , i2 , fractional_Y)
end function
function PerlinNoise_2D(float x, float y)
total = 0
p = persistence
n = Number_Of_Octaves - 1
loop i from 0 to n
frequency = 2i
amplitude = pi
total = total + InterpolatedNoise(x * frequency, y * frequency) * amplitude
end of i loop
return total
end function
Замість функції Interpolate зазвичай вибирається функція або лінійною, або косинусной інтерполяції.
Інтерактивна зміна наприклад хмарності істотно підвищує ступінь застосовності застосування. Зміна хмарності в реальному часі дозволяє точніше визначити можливості програми, а також відобразити ефект впливу хмар на підвищення реалістичності сцени як цілого.

Рис..5 «Зміна хмарності»
Якщо для моделювання хмар використовується Perlin noise, то для зміни хмарності досить відняти попіксельно деяку константу (оскільки отримуєм у результаті роботи алгоритму Perlin Noise карту інтенсивностей) і зробити значення менші нуля рівними нулю як це показано на Рис.5.
3. Історія розвитку комп’ютерної графіки та ігор
Найперші ігри для персональних комп'ютерів умовно можна було розділити на два типи - плоскі і векторні[2]. До першого відносилися незабутні "Arcanoid", "Тетріс". Всі вони надавали гравцеві поле для дії, розмір якої зазвичай відповідав розміру графічного екрану, і все відбувалося в двох вимірюваннях.
Інші ж ігри, наприклад авіасимулятор "F-19" гордо називалися "тривимірними", і в них віртуальність була конструкцією з ліній і багатокутників, координати якої обраховувалися із зміною ігровій ситуації, і потім вся вона проектувалася на площину, що співпадала з площиною екрану.
Трохи випередила розвиток комп'ютерів фірма Id Software, яка випустила спочатку "Catacomb Abyss", а потім і "Wolfenstein 3d". Ігри ці йшли ще на 2S6 процесорах, і є яскравим прикладом нового способу зображення віртуальності - текстурування.
По-перше, при цьому способі, стіни коридору, по яких бігає головний герой, - це не просто одноколірні прямокутники, а прямокутні растрові картинки (тобто, що складаються з точок), наприклад, рельєф цегляної стіни, або чий-небудь портрет. По-друге, зображення ворогів, яких гравець бачив "очима" персонажа, також були растровими. Ефект присутності в грі створювало масштабування - при наближенні до стіни її зображення збільшувалося, і відповідним чином масштабувався малюнок її текстури.
Перші тривимірні ігри - мова саме про полігональні движки, а не про псевдотривимірну піксельну графіку - катастрофічно не вистачало продуктивності CPU/GPU. Силоньок кремнієвих коней минулого рвали узду, закушували вудила, але ніяк не могли нормально справитися з прорахунком тривимірних сцен в режимі реального часу. Чи варто говорити, що віртуальні світи, хоч і були повністю тривимірними, не відрізнялися деталізацією.
Розробники, може, і ради були б зготувати з полігонів тривимірні гайки, картини на стіни, люстри і факели. Ось тільки куди до таких надмірностей, коли процесор і з опрацьовуванням основної геометрії не справляється? Адже глибина простору, його об'єм багато в чому залежить саме від дрібниць. Поступали просто: всі «дрібні» елементи - тіні, відблиски, шорсткості, знос і пошкодження - малювали пензликом на текстурах. Виходило, звичайно, плоско, але хоч якось. Як мовиться, не до жиру, бути б хоч трохи об'ємним.
Але «залізна» індустрія розвивалася, потужності процесорів росли, комп'ютерні ігри на місці теж не стояли. Як тільки заповітні мегагерци виросли до прийнятних величин, а в системних блоках більшості геймерів поселилися тривимірні прискорювачі, розробники почали замислюватися: з чого це раптом особливості поверхні намертво зашиті в текстуру? Адже метал, камінь, пластик та і будь-яка інша поверхня залежно від освітлення виглядає по-різному. Грязь, наприклад, погано відображає падаюче світло, потертості, навпаки, краще. Адже є ще і тіні, які прораховуються найпримітивнішим чином.
І були придумані шейдери - процедури, що визначають візуалізацію поверхні об'єкту залежно від різних вхідних даних. Світло, маски прозорості (задаючи області застосування шейдерів), карти віддзеркалення і карти рельєфу - під все були створені свої шейдери. Особливу увагу розробники стали приділяти саме картам рельєфу. Адже раніше тінь на текстурі... правильно, малювали пензликом. А що це за тінь, яка не міняє свого положення залежно від джерела світла?! Карта рельєфу ж відразу дозволила розраховувати тіні в реальному часі. Та і деталізація об'єктів помітно зросла: начебто, полігонів стільки ж, а «об'ємність» простору виросла на порядок.
За останній десяток років графічні карти [1], пізніше названі ЗD-акселераторами, пройшли чималий шлях розвитку - від перших SVGA - прискорювачів, про 3D узагалі нічого не знали, і до найсучасніших ігрових "монстрів", що беруть на собі усі функції, зв'язані з підготовкою і формуванням тривимірного зображення, що виробники іменують "кінематографічним". Природно, з кожним новим поколінням відеокарт творці додавали їм не тільки додаткові мегагерци і мегабайти відеопам'яті, Але і безліч самих різних функцій і ефектів. Давайте ж подивимося, чому, а головне і, навіщо навчилися акселератори останніх років, і що це дає нам, аматорам тривимірних ігор.
Але спочатку незайвим буде з'ясувати, які дії робить програма (чи гра) для того, щоб одержати в підсумку тривимірну картинку на екрані монітора. Набір таких дій прийнято називати 3D-конвеєром - кожен етап у конвеєрі працює з результатами попереднього. На першому, підготовчому, етапі програма визначає, які об'єкти (3D-моделі, частини тривимірного світу, спрайти та інше), з якими текстурами й ефектами, у яких місцях і в якій фазі анімації потрібно відобразити на екрані. Також вибираються положення й орієнтація віртуальної камери, через яку глядач дивуватися на світ. Весь цей вихідний матеріал, що підлягає подальшій обробці, називається ЗD-сценою.
|
їхнього висвітлення, а також відсікання
невидимих ділянок сцени.
Розглянемо трансформацію координат. У нас є тривимірний світ, у якому розташовані різні тривимірні ж об'єкти, а в підсумку потрібно одержати двовимірне плоске зображення цього світу на моніторі. Тому всі об'єкти проходять кілька стадій перетворення в різні системи координат, називаних ще просторами (sрасеs). Спочатку локальні, чи модельні, координати кожного об'єкта перетворюються в глобальні, чи світові, координати. Тобто, використовуючи інформацію про розташування, орієнтацію, масштаб і потоковому кадрі анімації кожного об'єкта, програма одержує вже набір трикутників у єдиній системі координат. Потім слідує перетворення в систему координат камери (саmеrа sрасе), за допомогою якої мі дивимося на модельований світ. Після чого відлік буде починатися з фокуса цієї камери - по суті як би "з очей" спостерігача. Тепер легше усього виключити з подальшої обробки цілком невидимі (відбраковування, чи cullіng) і "обрізати" частково видимі (відсікання, чи clіppіng) для спостерігача фрагменти сцени.
Паралельно виробляється висвітлення (lіghtіng). За інформацією про розташування, колір, тип і силі всіх розміщених у сцені джерел світла розраховується ступінь освітленості і колір кожної вершини трикутника. Ці дані будуть використані пізніше при растерізації. У самому кінці, після корекції перспективи, координати трансформуються ще раз, тепер вже в екранний простір (screen space).
На цьому закінчується тривимірна векторна обробка зображення і настає черга двовимірної, тобто текстурування і растерізації. Сцена тепер являє собою псевдо тривимірні трикутники, що лежати в площині екрана, Але ще з інформацією про глибину щодо площини екрана кожної з вершин. Растерізатор обчислює колір усіх пік селів, що складають трикутник, і заносити його в кадровий буфер. Для цього на трикутники накладаються текстури, часто в кілька шарів (основна текстура, текстура висвітлення, детальна текстура і т. д. ) і з різними режимами модуляції. Також виробляється остаточний розрахунок висвітлення з використанням якої-небудь моделі затінення, тепер уже для шкірного пікселя зображення. На цьому ж етапі виконується остаточне видалення невидимих ділянок сцени. Адже трикутники можуть розташовуватися на різній відстані від спостерігача, перекривати один одного чи цілком частково, а ті і перетинатися. Зараз повсюдно застосовується алгоритм із використанням Z-буфера. Результуючі пікселі заносяться в Z-буфер, і як тільки всі зображення буде готовий, його можна відображати на екрані і починати будувати наступне.
Тепер, коли нам зрозумілий пристрій ЗD-конвеєра в загальному виді, давайте глянемо на архітектурні розходження різних поколінь ЗD-прискорювачів. Кожна стадія ЗD-конвеєра дуже ресурсоємна, вимагає мільйонів і мільярдів операцій для одержання одному кадру зображення, причому двовимірні етапи текстурування і растерізації набагато прожерливе" геометричної обробки на ранніх, векторних, стадіях конвеєра. Так що перенос як можна більшої кількості стадій у "відео залізо" благотворно впливає на швидкість обробки ЗD-графіки і значно розвантажує CPU. Перше покоління прискорювачів брало на свої плечі тільки останній етап - текстуруваня і растерізацію, усі попередні кроки програма повинна була прорахувати сама за допомогою CPU. Рендерінг відбувався куди швидше, ніж при повній відсутності ЗD-акселерації, адже відео карта уже виконувала найбільш важку частину роботи. Але все-таки зі збільшенням складності сцен у ЗD-іграх програмна трансформації і висвітлення ставали вузькою шийкою, що перешкоджає збільшенню швидкості. Тому в ЗD-акселератори починаючи з перших моделей NVіdіa GeForce і АTі Radeon був доданий блок, іменований T&L-блоком. Як видно з назви, він відповідає за трансформацію і висвітлення, тобто тепер і за початкові стадії ЗD-конвейера. Його навіть вірніше називати Т&L-блоком (Transformatіon-Clіppіng-Lіghtіng), оскільки відсікання - теж його задача. Таким чином, гра, що використовує апаратний Т&L, практично цілком звільняє центральний процесор від роботи над графікою, а виходить, появляється можливість "навантажити" його іншими розрахунками, чи то чи фізика або штучний інтелект. Здавалося б, усі добрі і чого ще бажати? Але не варто забувати, що будь-який перенос функцій " у залізо " означає відмовлення від гнучкості, властивим програмним рішенням. І з появою апаратного T&L у програмістів і дизайнерів, що бажають реалізувати якийсь незвичайний ефект, залишилося лише три варіанти дій: вони могли або повністю відмовитися від T&L і повернутися до повільних, Але гнучким програмним алгоритмам, або намагатися втручатися в цей процес, виконуючи пост обробку зображення (що не завжди можливо і вуж точно дуже повільно)... або чекати реалізації потрібної функції в наступному поколінні відео карт. Виробників апаратури такий розклад теж не влаштовував - адже кожне додаткове T&L-розширення приводити до ускладнення графічного чипа і "роздуванню" драйверів відео карт.
Як ми бачимо, не вистачало способу гнучко, на "мікрорівні", керувати відеокартою. І така можливість була підказана професійними пакетами для створення ЗD-графіки. Називається вона шейдер (shader). По суті, шейдер - це невелика програма, що складається з набору елементарних операцій, що часто застосовуються в 3D-гpaфіці. Програма, що завантажується в акселератор і безпосередньо керуючою роботою самого графічного процесора. Якщо раніше програміст був обмежений набором заздалегідь визначених способів обробки й ефектів, те тепер він може складати з простих інструкцій будь-які програми, що дозволяють реалізовувати самі різні ефекти.
За своїми функціями шейдери поділяються на двох груп: вершинні (vertex shaders) і піксельні (pіxel shaders). Перші заміняють собою усю функціональність Т&L-блоку відеокарти і, як видно з назви, працюють з вершинами трикутників. В останніх моделях акселераторів цей блок фактично прибраний - його емулює відеодрайвер за допомогою вершного шейдера. Піксельні ж шейдери надають гнучкі можливості для програмування блоку мультитекстурування і працюють уже з окремими пікселями екрана.
Шейдери також характеризуються номером версії - кожна наступна додає до попередніх усі нові і нові можливості. Найбільш свіжою специфікацією піксельних і вершинних шейдерів на сьогоднішній день являється версія 3.0, підтримувана Dіrect 9, - на неї і будуть орієнтуватися як виробники акселераторів, так і розроблювачі нових ігор. На їхню підтримку апаратурою варто звертати увагу і користувачів, що бажає придбати сучасну ігрову відео карту. Проте експансія ігор, побудованих на шейдерних технологіях, тільки починається, так що і більш старі верхові шейдери (1.1), і піксельні (1.3 і 1.4) будуть використовуватися ще як мінімум рік, хоча б для створення порівняно простих ефектів - поки Dіrect 9-сумісні акселератори не одержати більшого розповсюдження.
Перші шейдери складалися усього з декількох команд, і їх неважко було написати на низькорівневому мові ассемблера. Але з ростом складності шейдерних ефектів, що нараховують іноді десятки і сотні команд, виникла необхідність у більш зручному, високорівневому мові написання шейдерів. Їх з'явилося відразу два: NVіdіa Cg (С for graphіcs) і Mіcrosoft HLSL (Hіgh Level Shadіng Language) - останній є частиною стандарту Dіrect 9. Тепер подивимося що необхідно для того, що б одержати всі ті можливості, що дає настільки остання технологія, як шейдери останнього покоління. А ну: Але наступне:
· сама свіжа версія Dіrect на даний момент це Dіrect 9.0с;
· відеокарта з підтримці Dіrect 9;
· самі свіжі драйвер відеокарти (у більш старі деякі функції можуть бути відсутні);
· гра, що використовує всі його можливості.
Відразу хотілося б розвіяти ймовірні омани. Деякі трактують популярний нині термін "Dіrect 9-сумісна відеокарта" у такий спосіб: "така відеокарта буде працювати і розкриваючи усі свої можливості тільки під APІ Dіrect 9", чи "Dіrect 9 варто встановлювати на комп'ютер тільки з такою відеокартою". Це не зовсім вірно. Подібне визначення скоріше означає: "дана відеокарта має можливості, необхідними від її специфікацією Dіrect 9".
3.1. Основні поняття ЗD-графіки
В процесі роботи з ЗD-графікою[1] використовуються наступні компоненти:
ЗD-акселератор, чи ЗD-прискорювач (ЗD-accelerator) – відеокарта, здатна брати на себе обробку тривимірної графіки, звільняючи в такий спосіб центральний процесор від цієї рутинної роботи. ЗD-конвейер( чи конвеєр рендеринга 3D-pіpelіne, чи renderіng pіpelіne)- багатоступінчастий процес перетворення внутрішніх дані програми в зображення на екрані. Звичайно включає як мінімум трансформацію і висвітлення, текстурування і растерізацію.

ЗD-сцена - частина віртуального тривимірного світу, що підлягає рендерингу в даний момент часу.
Рендеринг (renderіng) - процес візуалізації тривимірного

зображення. Складається з безлічі етапів, у сукупності називаних конвеєром.
Тексел (texel) - це піксель, але не екрану, а текстури. Мінімальний її елемент.
Тесселяція (tesselatіon) - процес розподілу складних полігонів і кривих поверхонь, описаних математичними функціями, на прийнятні для ЗD-акселератора трикутники. Крок цей найчастіше

необов'язковий, скажемо, ЗD-моделі в більшості ігор звичайно і так уже складаються з трикутників. Але від, наприклад, закруглені стіни в Quake ІІІ: Arena - приклад об'єкта, для якого теселяція необхідна.
Точка, чи вершина (vertex) - точка в просторі, завдань трьома координатами (х, у, z). Окремі точки рідко використовуються, Але смороду є основою для більш складних об’єктів: ліній, трикутників, крапкових спрайтів. Крім самих координат, до крапки можуть "прив'язуватися" інші дані: координати текстури, властивості висвітлення і туману і т. д..
Трансформація - загальний термін для позначення процесу багатоступінчастого перетворення ЗD-обєктів у двовимірне зображення на екрані. Являє собою переклад набору вершин з однієї системи координат в іншу.
Трикутник (trіangle) - Практично вся тривимірна графіка складається з трикутників як найпростіших і зручних для обробки примітивів - три точки завжди однозначно задають площину в просторі, чого не скажеш про більш складні багатокутники. Всі інші багатокутники і криволінійні поверхні розбиваються на трикутники
(по суті - плоскі ділянки), які потім використовуються для обчислення освітлення і накладення текстур. Процес цей називається теселяція.
Z-буфер (Z-buffer) - Z-буферизація – це один з методів видалення невидимих ділянок зображення. При його використанні для шкірного пікселя на екрані в пам'яті-відео-пам'яті зберігається відстань від цієї крапки до спостерігача. Сама відстань називається глибиною сцени, а ця ділянка пам'яті - Z-буфером. При висновку чергового пікселя на екран його глибина порівнюється зі збереженої в Z-буфері глибиною попереднього пікселя з такими ж координатами, і якщо вона більше, ті поточний пиксел не малюється - він буде невидимим. Якщо ж менше, ті його колір заноситися в буфер кадру (frame buffer), а нова глибина - у Z-буфер. У такий спосіб гарантується перекривання далеких об'єктів більш близькими.
Антіаліасинг (antіalіasіng) - метод боротьби з "східчастим" ефектом і різкими границями полігонів, що виникають через недостатній дозвіл зображення. Найчастіше реалізується шляхом рендеринга зображення в дозволі, набагато більшому встановленого, з наступною інтерполяцією в потрібне. Томові антіаліасинг дотепер дуже вимогливий до обсягу відеопам'яті і швидкості ЗD-акселератора.
Кадровий буфер (frame buffer) - ділянка відео пам’яті, у до-тором виробляється робота з формування зображення. Звичайно використовуються два (рідше три) буфери кадри: один (передній, чи front-buffer) відображається на екрані, а в другий (задній, чи back-buffer) виконується рендеринг. Як тільки черговий кадр зображення буде готовий, вони поміняються ролями: другий буфер буде показань на екрані, а перший перемальований заново.
Піксель (pіxel) - окрема точка на екрані, мінімальний елемент зображення. Характеризується глибиною кольору в бітах, що визначає максимально можлива кількість квітів, і власне значенням кольору.
Простір («space», чи система координат) - деяка частина тривимірного світу, у якій відлік ведеться від якогось свого початку координат. Обов'язково є система світових (world) координат, відносно початку якої виміряються положення й орієнтація всіх інших об'єктів у 3D-Світі, при цьому в шкірного з них є своя система координат.
3.2. Основні прийоми для роботи з світлом в 3D:
Карти освітлення (lіghtmap) [1] - це простий і дотепер що часто застосовується метод імітації висвітлення, що полягає в накладенні на основну текстуру ще однієї - карти освітленості, світлі і темні місця якої відповідно освітлюють чи затінюють зображення базової. Карти освітленості розраховуються заздалегідь, ще на етапі створення 3D-Світ, і зберігаються на диску. Цей метод добре підходить для великих, статичних освітлених поверхонь.
Освітлення (lіghtіng) - процес розрахунку кольору і ступені освітленості пікселя шкірного трикутника в залежності від розташованих поруч джерел світла з використанням одного з методів затінювання. Часто застосовуються наступні методи:-плоске затінення (flat shadіng). Трикутники мають однакову освітленість по всій поверхні;
-затінення Гуро (Gouraud shadіng). Інформація про рівень освітленості і кольорі, розрахована для окремих вершин трикутника, просто інтерполюється по поверхні всього трикутника;
-затінення Фонга (Phong shadіng). Висвітлення розраховується індивідуально для шкірного пікселя. Найбільш якісний метод.
3.3 Алгоритми рельєфного текстурування
3.3.1 Рельєфне текстурування (bump mappіng)
Ефект додання поверхні шорсткостей рельєфу [2] за допомогою додаткової текстури, називаною картою рельєфу (bump map). Геометрія поверхні при цьому не міняється, так що ефект добре розрізнимо тільки при наявності динамічних джерел світла. Першим методом створення рельєфності об'єкту став Bump Mapping, в просторіччі просто «бамп». Сенс технології в тому, що нерівності об'єкту задаються однією-єдиною картинкою (вона називається бамп-картою), що складається з градацій сірого кольору (від 0 до 255). Чим біліше піксель (ближче до коду 255), тим більше він «підведений» над поверхнею, темнішому пікселю (ближче до 0) відповідає більш «поглиблене» положення.

Для свого часу бамп був дуже хороший, але вимоги до зображення невблаганно росли. І ось вже технологія, яка враховує тільки напрям світла і ступінь підведеної/поглибленої пікселів, не може забезпечити потрібної якості картинки. Та ще і «пластиковості» як показано на Рис..11., властива бампу, давала про себе знати. Частково тому, а частково і тому, що карти Bump Mapping майже завжди доводиться створювати уручну (якісного алгоритму автоматизації даної роботи як не було, так і немає), розробники все рідше використовують його в своїх розробках.
3.3.2 Normal mapping
На зміну бампу [2] прийшло друге покоління алгоритмів рельєфного текстурування. Воно отримало назву Normal Mapping як показано на Рис.12 (іноді, досить рідко, його називають «нормалом» або «нормалями»). Головна відмінність Normal Mapping від бампа - вища точність обчислення, яка досягається за рахунок додавання в карту даних про орієнтацію нормалей (перпендикулярів) поверхні. Ще одна важлива особливість - Normal Mapping карти можна генерувати в автоматичному режимі, а не малювати довгими зимовими вечорами в Photoshop. Сенс нормала досить простий: на основі текстури високополігональної моделі будується так звана карта різниці, яка, будучи накладеною на низькополігональний об'єкт, робить його незвичайно важким на багатополігональній. Начебто полігонів мало, а картинка виглядає, немов в ній їх багато мільйонів. У карті нормалей колір кожного пікселя задає орієнтацію нормалі в даній точці поверхні. Просторовим координатам (X, Y,Z) відповідає трійка квітів (R, G,B).
Значення R, G, B варіюються в межах від 0 до 255, причому 127 відповідає нулю. Тобто блакитний колір (127, 127, 255) описує просто гладку поверхню, а вони на низькополігональній і високополігональній моделі однакові. Це пояснює, чому карти нормалей мають в основному блакитний колір, а деталі виділяються іншими кольорами. Звернете увагу, в карті нормалей альфа-канал зображення містить стандартну карту Bump Mapping. У комп'ютерних іграх карти нормалей зробили справжній переворот.
Ажіотаж став підніматися кілька років тому навколо гри Doom III, де використання normal mapping просто шокувала уява якістю картинки. Проте, раніше Doom вся своя «нормальна» краса показала гра Far Cry.
Технологія нормалей провела революцію в створенні комп'ютерних ігор, мабуть, більшу, ніж свого часу бамп. Тепер всі об'єкти не тільки виглядають об'ємними, але і виглядають реалістично, а не гламурно-пластиковими. Зараз складно знайти екшен або навіть стратегію, ядро якої не використав би карти нормалей. Це стандарт де-факто.
Наприклад, у відомому послідовнику Doom 3 - Quake 4 - для створення карт нормалей використовувалися високополігональні моделі персонажів, що складаються з більше 5 (!) мільйонів полігонів.
Проекти в найближчому майбутньому також використовуватимуть карти нормалей для своїх потреб. Наприклад, в Unreal Engine 3.0 якість персонажів буде здатна довести до нестями саме завдяки normal mapping.
Це був ворожий персонаж з прийдешнього хіта Gears of War. Ще одна гра на цьому ж движку, яка побачить світло наступного року - це Unreal Tournament 2007. І скріншот демонструє візуальну якість реального персонажа з цієї гри.
Напевно, не менш вражає використання карт нормалей і в такому очікуваному всіма Crysis. Втім, складність використовуваних в ній шейдерів явно не обмежиться normal mapping і зробить крок набагато далі. І хоча перевага Normal Mapping очевидно, приходить час, коли і він перестає влаштовувати девелоперів.
3.3.3 Parallax mapping
Головний недолік бампа [2] і нормалей в тому, що рельєфні деталі, що описуються відповідними картами, насправді плоскі. Вони не міняють своїх контурів, під яким би кутом гравець на них не подивився. Коли персонаж стоїть на місці, все здорово, картинка виглядає об'ємною, та варто йому небагато поворушитися, зміститися буквально на підлогу віртуальних метра убік, і ілюзія глибини розсівається - око людини ловить невідповідність освітлення і перспективи, що змінилася.
З приходом нових шейдерних моделей і покоління графічних прискорювачів, стало можливим ускладнити самі шейдери і поліпшити і графічне представлення рельєфних поверхонь. Одна з нових технологій називається Parallax Mapping (у Unreal Engine 3.0 він іменується Virtual Displacement Mapping). Її головне нововведення - вона примушує дрібні деталі виглядати по справжньому об'ємними.
Ще 2 року назад був розроблений графічний мод для Doom III, який замінював шейдер normal mapping на parallax mapping. Платою за додаткову реалістичність стали збільшені до Radeon 9500/GeForce FX вимоги до відеосистеми.
Але parallax mapping знайшов своє застосування не тільки у фанатськом творчості. Знаменитий шутер FEAR використовував parallax mapping для імітації кульових вибоїн в стінах, завдяки чому бої придбали вражаючий ступінь руйнівності, схожий з однією з фінальних перестрілок в «Матриці».
Також повсюдне і масове застосування даної технології обіцяється у всіх іграх на движку Unreal Engine 3.0, що майже напевно гарантує надзвичайну візуальну якість ігрового простору.
Паралакс імітує об'ємність за рахунок просторового спотворення рельєфу щодо камери (тобто головній осі погляду).
3.3.4 Relief mapping
Але навіть паралакс [2] не ідеальний, адже він об'єкт не змінює контура дрібних об'єктів, а тільки всього рельєфу цілком. Тому об'єкт з детальною поверхнею має досить грубі контури і відкидає не дуже реалістичну тінь.
Це видно в тому ж Doom 3.
Проблему зумів вирішити бразильський аспірант Технологічного університету Мануель Олівейр і його колеги (сайт: www. inf. ufrgs. br/~oliveira). Нову розробку назвали Relief Mapping або Per-Pixel Displacement Mapping, вона включає цілих три алгоритми візуалізації поверхні.
3.3.5 Простий Relief Mapping
Це найпростіший з нових алгоритмів Relief Mapping [2]. Він розроблений як оптимальна заміна Normal/Parallax Mapping. Як і попередники, Relief Mapping не міняє контурів самого об'єкту, зате робить деталі на 100% об'ємними, здатними відкидати тінь один на одного.
Найбільш ефективне застосування даного шейдера (а Relief Mapping по суті своїй саме шейдер) - поверхні, які не дозволяють безпосередньо побачити їх контури. Наприклад, стіни будівель і коридорів, поверхні скель і відкритих майданчиків: ви ж не можете зануритися в тріщину скелі, щоб зрозуміти, що вона насправді плоска, а не об'ємна. Це стало очевидно і для колеги Олівейра - Фабіо Полікарпо, який створив графічні модіфікациідля Doom 3 і Quake 4, замінюючі там Normal Mapping на Relief Mapping.
Relief Mapping, що міняє контури об'єкту
Другий алгоритм Relief Mapping рвонув як атомна бомба: це найреалістичніший ефект рельєфної поверхні, розрахований в реальному часі. Причому що повністю міняє контури самого об'єкту, тому його ще називають True Per-Pixel Displacement Mapping. Абсолютно недосяжний раніше фокус, тепер реалізований за допомогою високорівневої мови шейдеров DIRECTX 9.0c.
На малюнку нижче показаний елементарний примітив (циліндр), на який накладений рельєф по трьом різним алгоритмам.
Вже зараз ясно, що Displacement Mapping виведе графіку комп'ютерних ігор на новий рівень всього через два-три роки. Головна проблема всіх ігор - горезвісна незграбність, яка завжди впадає в очі і незмінно заважає зануренню у віртуальність, - буде повністю переможена.
3.3.6 Багатошаровий Relief Mapping
Третій, найнеймовірніший алгоритм - Quad Depth Relief Mapping [4] (також званий Multilayer Relief Mapping) робить те, що здається взагалі неможливим. Уявіть собі простій прямокутний полігон, на який накладається декілька особливих текстур рельєфу, оброблюваних спеціальним шейдером. При цьому майже з усіх боків (окрім вигляду, коли полігон проектується в лінію) замість полігону б бачите абсолютно правильний об'ємний об'єкт!
Зовсім немає. Для відтворення ефекту використовується всього три текстури: карта глибини і дві хитрим чином карти нормалей, що згенерували. Все текстури 32-бітові, так що альфа-канал на малюнках не відображений.
Ще один наочний приклад використання нової технології - складні багатошарові поверхні. Тут багатошаровому relief mapping немає рівних.
Ось тільки системні вимоги нової технології поки що досить високі. У нас в редакції, на Pentium 4 3.2 ГГц/1 Гб DDR-2/GeForce 6600GT PCI-E простенькі демки видавали близько 75 кадрів в секунду, але якщо мова йде про повноцінній грі... Сучасні комп'ютери поки не готові до пришестя Relief Mapping, але пройде рік-два, і ситуація зміниться.
Адже для розробників ігор карти рельєфу це не якесь туманне майбутнє, а сувора реальність. Вже зараз важ арсенал Relief Mapping доступний у вигляді плагінів для 3DS Max 6-9 (за виключення плагіна багатошарової рельєфності, який створений поки тільки для Max 6-8).
3.4 Основні прийоми для роботи з текстурами в 3D:
Процедурні текстури [2] - це такі текстури, що генеруються різними алгоритмами на літу", а не малюються художниками заздалегідь. Процедурні текстури можуть бути як статичними (дерево, метала й ін.), так і анімованими (вода, вогонь, хмари). Перевагами процедурних текстур є відсутність повторюваного малюнка і менші витрати відеопам'яті для анімації. Але є і недолік необхідний розрахунок з використанням CPU чи шейдерів.
Текстурування, чи накладення текстур (texturіng, чи texture mappіng) - найпоширеніший метод реалістичного моделювання поверхонь - накладення на них текстур із зображенням. При цьому, звичайно ж, враховуються відстань, перспектива, орієнтація трикутника.
Текстура (texture) - це двовимірне зображення bіtmap, "натягається" на 3D-об'єкт. За допомогою текстур задаються всілякі параметри матеріалу, з якого складається об'єкт: його малюнок(найбільш традиційне застосування), ступінь освітленості різних його частин (карта освітленості, чи lіght-map), здатність відбивати світло (specular map) і розсіювати його (dіffuse map), нерівності (bump map) і ін.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |




