Steps3d - уроци - точни записи микрорелефа, използващи паралакс и облекчение за картографиране и

Характерна особеност на развитието на 3D-графика е нарастваща степен на детайлност на обектите. Първата стъпка в такива подробности е използването bumpmapping S (първи предлага палачинки).

Сега тя се е превърнала в повсеместна употреба bumpmapping. т.е. на пиксел справка нормален вектор за моделиране на грапавост (нейната микро релефна). В резултат на това е възможно да не усложнява геометрия предмети, за да се създаде илюзията mikrorelfa, т.е. висока степен на подробност.

Фигура 1. Пример на bumpmapping S.

Въпреки bumpmapping дава ясно видими резултати или да се подчертае малък брой източници на насочена светлина (в този случай е желателно, че повърхността е силно изразена както в компонент гибел на огледален 3) или в отражение (EMBM).

В случай на обект осветен от околната светлина (например обект под открит в облачен ден) -ти конвенционален bumpmapping обикновено не обработва.

Въпреки това, има и други симптоми за открит микрорелефни - промяна на текстурата координати на точки, в зависимост от посоката на наблюдателя и самостоятелно сенки и т.н.

В тази статия ще разгледаме моделиране на такива явления като се започне с най-простите и завършва с най-напредналите техники.

Най-лесният начин да се определи микрорелефа на повърхността чрез т.нар височина карта (карта височина) Н (S, т). Има две възможни интерпретации на тази версия на картата. Стойностите на това могат да се разглеждат или като височината на точка над ръб (Фигура 2а), или като вдлъбнатина в лицето (Фигура 2Ь). Ние ще продължим да следваме първото тълкуване.

Фигура 2. Възможна интерпретация на картата на височина.

Паралакс Картографиране

Най-простият случай топография симулация (без да се броят bumpmapping и) е така наречената паралакс (релеф) картографиране - един прост метод за корекция текстурата координати с помощта на картата на височина.

Когато (карта височина даден от Н (S, T)) на грапава повърхност гледа от посока V. че ако не се вземат под внимание микрорелефа повърхност, точка А (по-точно, съответната точка по координати на текстурата) ще бъде взето като точка върху него. Въпреки това, точната пресечната точка на лъч от наблюдателя съответства на точка В (и съответната точка Т * в текстура координати).

Фиг. 3. приблизителна точка на изчисление на повърхността.

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

Възможно е да се използва стойността на височина в точка А до получаване на по-точни стойности на текстурните координати (Т1):

В тази формула V е обозначен с единичен вектор допирателна на за наблюдателя в координатна система, т.е. vxy - е компонент, допирателна и VZ - нормално. Н означава височината на стойността на картата в точка T0 на.

Корекция на координатите текстурата на горната формула може да бъде доста лесно да се приложи с помощта на прости връх и фрагменти шейдъри.

Фигура 4: Изображение получава при използване на по-горе Shader (ляво - паралакс е активирана, прав - няма).

Въпреки това, този метод за корекция на текстура координати е само сближи, по-специално, когато вектор V почти докосва повърхността (т.е. VZ

Фигура 5. Parallax с офсетов ограничаващи.

Въпреки паралакс картографиране обсъдено по-горе осигурява само приблизителна стойност за Godyaev повърхности без резки промени в височина, в противен случай тя може да даде грешни стойности. По този начин на фиг. 3 вместо точната стойност на Т *. съответстваща на пресечната точка на лъча с повърхността, ние се стойността на Т1 (въпреки че е по-добре от T0 първоначалната стойност).

Стръмен Parallex Картографиране

Един много прост начин да се подобри точността на класическия паралакс картографирането е е дял височина диапазон от стойности на няколко равни сегменти (слоя). След това е възможно чрез прости изброяване слоеве (започват с най-външният, т.е., съответстваща на най-голямата стойност на височината, на слой), за да намери приблизителна стойност на точката на повърхността (Фигура 6) -. Подход обикновено се нарича стръмен паралакс картографиране.

Фигура 6. Намирането на пресичане чрез търсене слоеве.

В този случай, първо проверете точка A0. след А1. след А2 и така нататък, докато следващата точка е под съответната височина стойност (за фиг. 6 е точка A3). Всъщност извършва обем следа, разделен на слоеве с еднаква дебелина.

Този алгоритъм се реализира лесно, както следва по фрагмент шейдър GLSL. Параметър мащаб. както и в миналото, контролира "степента на облекчение" - какво е това, странно selnee "пръчици" облекчение.

Въпреки това, тъй като не всички графични ускорители поддържат докато линия в Shader на фрагмент, следното е опция за шейдър за определен брой слоеве от активните кондиционали верига цикъл разположени.

Фигура 7. изображения, получени в отпадъчната бюст определени на слоя.

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

Фигура 8. артефакти, които възникват, когато повтаряне слоеве.

Тази грешка връзка каквато и на факта, че тестът се провежда в пресечната точка на vysego на лъча само малък брой слоеве, съответстващи на отделни определени височини. В този Isla при резки промени на височина и / или посоката на погледа, в близост до допирателната, тази "наслояване" повърхността става ясно видими.

Един от най-простите начини за справяне с това е да се променя броя на слоевете в зависимост от ъгъла между посоката на гледане и нормалата към повърхността - най-малък ъгъл (т.е. косинуса на ъгъла е по-близо до единица), толкова по-малко слоеве от ъгъл по-голям (по-близо косинус до нула) - повече слоеве. Най-простият вариант - линейна интерполация между zadanannym предварително определен минимален и максимален брой на слоеве от косинуса на ъгъла.

Също така по време на форума gamedev.ru тя предложи да се използва експоненциална вместо линейна интерполация.

облекчение Картографиране

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

Фигура 9: Изясняване точка по метода на разполовяване.

Така че за случая на фиг. 8 точна пресичане на стойността е между A * и А1. обаче в първоначалното приближение може да се вземе точка В1 = (А1 + A *) / 2. Ако тази точка е над повърхността, определена от картата на височина, на основата е на интервал [В1. A *]. друго, основата е на [А1, В1].

Освен това, в придобитото сегмент отново изберете средната стойност и да я сравни със стойността на височината. Това сравнение определя кои половината от сегмент трябва да се остави (тъй като тя съдържа корена).

Тъй като няколко повторения извършват изясняване на основата, при което във всеки точност итерация се удвоява (от дължината на сегмента, съдържащ основата се намалява наполовина при всяко повторение). След определен брой повторения на средата на последния сегмент се приема като корен. Този подход се нарича облекчение картографиране. По-долу е съответната програма фрагмент.

Като илюстрация на този подход ние се текстура на NVSDK, определяне както на нормалната карта (в RGB част) и карта височина (в алфа каналът). На следващо място, изграждане на имидж куб от всяка страна на която се наслагва каменна текстура и нормални карти (кота). В изграждането на образа не само ще използвате картографирането облекчение. но също така и да се извърши изчислението на дифузно на пиксел и огледален осветление.

Следващите две снимки са показани на изображението куб използване облекчение за картографиране и без (яркост изчисление само на пиксел).

Имайте предвид, че картографирането текстура върху повърхност, различна от обичайната bumpmapping 'A.

Steps3d - уроци - точни записи микрорелефа, използващи паралакс и облекчение за картографиране и

Фиг. 10. На пиксела осветление с помощта на облекчение картиране и

Steps3d - уроци - точни записи микрорелефа, използващи паралакс и облекчение за картографиране и

Фиг. 11. На пиксела осветление, без да използвате облекчение картиране и

С малки шейдърни модификации може да се използва не само облекчение картографиране за определяне на точния момент на повърхността, но и за тестване засенчване (затваряне микрорелеф от източника на светлина).

За тази цел търсене на пресечната точка на лъч с повърхността започва от точката на пресичане намерено и извършва в посока на вектора на източника на светлина. Повтаряне слоеве в този случай се извършва в обратна посока (т.е. съответното увеличение на височина).

Паралакс захапването Картографиране

Има и друг вариант на стръмен паралакс картографиране ", както и, наречен паралакс оклузия картографиране.

Този метод се основава на по-скоро просто наблюдение - веднага след като сме приели като се опита слой, в който пресечната точка, ние можем просто да приемем, че по протежение на отсечката, която е вътре в този слой, височината варира линейно.

Фигура 12. линеен сближаване.

След това, за приблизителното определяне на точката на пресичане можем просто да се намери пресечната точка на това предположение не прибягва до двоичен търсене (и като цяло вече не се позовава на текстурата). Този метод е не само по-бързо, но и дава най-добрите изображения.

По-долу е фрагмент шейдър, която реализира този подход.

Следващите снимки на екрани са от прилагането на този подход. Забележете как chteko видима повърхност топография.

Фигура 13. Резултатите на паралакса оклузия картографиране "и (ляво паралакса и bampmepping полето - само iampmepping).

Използването на разстоянията карта на повърхността

Има и друг интересен начин да се определи точката на видно като се вземат предвид картата на височина. Той е описан в глава 8 от книгата GPU Gems 2 (тази глава може да бъде изтеглен от сайта на NVIDIA).

Този метод е също итеративно намери пресечната точка на лъч от наблюдателя към повърхността на обект. Въпреки това, да се намери стойността на следващата стъпка, тя използва поддържаща триизмерна структура.

Тази структура се основава на висотата на картата, където третото измерение служи височина. По този начин стойността на всеки Texel е най-близкото разстояние до повърхността, определена от картата на височина (виж фиг. 15).

Фигура 14. Функцията на разстояние до повърхността.

Фигура 15. Допълнително триизмерна структура.

Този подход е също, като предишния, носи количество следа, но като стойността на следващата стъпка по сноп към повърхността на стойността на този помощни текстури.

Тъй като това е най-близкото разстояние до повърхността, като тази дължина стъпка, ние са гарантирани да не се пресичат повърхността (които могат да възникнат с предварително обсъдени метод).

Фигура 16. Последователно сближаване на точното решение.

По този начин изпълнението на редица стъпки по линията по този начин ни дава приблизителна стойност на точката на пресичане на лъча на повърхността. Колкото повече стъпки ще бъдат извършени, толкова по-висока точност.

Въпреки това, важното е правилния размер спомагателни съвпадение с текстура стойности в него.

За съжаление този метод изисква специално създаден 3D-текстура, както и редица зависими (зависим) чете от текстурата, което е доста негативно влияние върху производителността.

Cone Етап Mapping, спокойна конус Етап Mapping

Suschesvuet друг много елегантен начин, в зависимост от разстоянието, което е близо до употреба, но избягва някога всички 2D-tektsurami. Ние се изгради на всяка точка от максимума на конус широк, но така, че да не се пресичат повърхността. След това всеки такъв конус се характеризира с тангента на половината от ъгъла на завоя, сложи лимит на максималния ъгъл - до допирателната на не повече от един.

Фигура 17. конусите на повърхността.

След това, чрез изграждане на такава konusya в него не може да бъде точки на повърхността и не може да се провери дали лъч пресича с повърхността вътре в конуса, и веднага отиде до кръстовището с границата на конуса.

Ето защо, за рейтрейсинг може да бъде отправна точка, за да се вземат на конуса и да намерят пресечната точка на лъча с конус лъч до точката на пресичане с конус вземе ново кръстовище конус лъч и го гледам, и по-долу. Резултатът е последователност от точки poulchaem гарантирани приближава до точната пресичане на лъча с повърхността.

Фигура 18. Конструиране на приближения до точката на пресичане.

За съжаление, по класическия метод на крачка конус картографиране е доста бавен конвергенция, поради което е налице промяна, омекотяване ограничения на ширината на конуса - лъч може да се пресичат на повърхността, но не повече от веднъж (виж фиг 19.). Така, лъчът може да премине през повърхността, но се определя веднага.

Фигура 19. Конструиране на приближения до точката на пресичане. Червено означава класическия вариант, зелено - отпусна.

В този случай, както е построен итеративен последователност, но за всяка точка на пресичане на лъча и конуса не проверява дали получената точка под повърхността. Ако е така, това означава, че интервалът между получената точка и предишната последователност съдържа точно една пресечна точка, която лесно може да бъде poulcheno чрез разполовяване или чрез линейна интерполация.

Фигура 20. Търсенето на пресичане.

Така polsedny изпълнение (спокойна конус стъпка картографиране) има по-висока скорост на сближаване и, като метод за функции разстояние, гарантира, че дори малки елементи са пропуснати (които могат да възникнат при проверка на отделните слоеве). Следващата фигура илюстрира как се съхранява греда и конуса.

Фигура 21. Намирането на пресичане на лъча и конуса.

По този начин, за прилагане на този метод изисква предварително регулиране карта tektsuru триизмерна структура, съдържаща допирателните на половината конус ъглите на въртене. Следният псевдо код фрагмент илюстрира алгоритъм, който може да се използва за конструиране на текстура.

В тази връзка можете да изтеглите всички изходния код на тази статия. Също така на разположение за изтегляне на двоични версии за M $ Windows. Linux и Mac OS X.