Точність z-буфера і z-сутичка – РОЗРОБКА ІГОР ДЛЯ ОС ANDROID

Завжди є бажання зловжити використанням ближньої і дальньої площин відсікання так, щоб вони показували як можна більше нашої чудової сцени Ми доклали великих зусиль для того, щоб створити безліч обєктів для ігрового світу, і хотіли б, щоб від них була користь Єдина проблема полягає в тому, що z-буфер має обмежену точність На більшості пристроїв з ОС Android кожне значення глибини, що зберігається в z-буфері, може мати розмір не більше 16 біт, в цілому виходить 65 535 різних значень глибини Тому замість того, щоб встановити значення ближньої і дальньої площин відсікання рівними 0,00001 та 1 000 000 відповідно, виберіть більш обдумані значення В іншому випадку ви побачите артефакти, які вироблятиме невірно сконфигурированная область видимості в комбінації з z-буфером

У чому полягає проблема Уявіть, що ми встановили значення ближньої і дальньої площин відсікання такими, якими ми тільки що позначили Значення глибини пікселя – це відстань від ближньої площині відсікання, ніж піксель до неї ближче, тим менше значення глибини При величині буфера, рівний 16 біт, ми ділимо відстань від ближньої до дальньої площини відсікання на 65 535 сегментів Кожен сегмент займає 1 000 000/65 535 = 15 одиниць виміру нашого світу Якщо ми виберемо як одиниці виміру метри, а всі обєкти будуть мати розмір 1 х 2 х 1 м і при цьому перебувати до одному сегменті, z-буфер НЕ буде настільки корисним, оскільки всі пікселі будуть мати однакове значення глибини

УВАГА

Значення глибини, що зберігаються в z-буфері, не лінійні, але загальна ідея вірна

Ще однією проблемою, повязаною з z-буфером, є так звана z-сутичка Вона проілюстрована на рис 109

Рис 109 Z-сутичка

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

Не використовуйте значення, які є занадто маленькими або занадто великими для визначення відстаней до ближньої і дальньої площин відсікання

Уникайте застосування компланарних обєктів, трохи їх зміщуючи

Джерело: Mario Zechner / Маріо Цехнер, «Програмування ігор під Android», пров Єгор Сидорович, Євген зазноби, Видавництво «Пітер»

Схожі статті:


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

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*