9. Фінальна обробка (Post processing) – обробка всієї результуючої картинки як єдиного цілого якими-небудь двовимірними ефектами.
Деякі стадії цього конвеєра можуть бути переставлені місцями, розбиті на чи частині сполучені. По-друге, вони можуть бути відсутнівзагалі (рідко) чи можуть з'явиться нові (часто). І, по-третє, результат роботи кожної з них може бути посланий (в обхід інших стадій) назад. Наприклад, картинку, отриману на останній стадії, можна використовувати як нову текстуру для 8-ий, реалізуючи в такий спосіб ефект поверхонь, що відбивають, (дзеркал). Таких, як мармуровий піл у грі Unreal.
3D API
Для одержання результату треба визначиться з двома речами – хто які стадії буде виконувати і як він це буде робити. У нас є три основних кандидати на роботу – сама програма (як правило, початкові стадії конвеєра), бібліотека прикладного програмування (інтерфейс, API) і сам прискорювач. Утім, програми, що не використовують прискорювач (Doom, Quake у програмному режимі і т.д.), усі стадії конвеєра виконують самостійно. У поняття бібліотеки в даному контексті можна
Щеіснуєблизько 10 бібліотекнизькогорівня, створенихрозроблювачамирізнихприскорювачів; такихяк: R-Redline фірми Rendition, S3D Toolkit фірми S3 іт.д. Яківипливалоочікувати, програми, написаніспеціальнодляних, поступовозникають[2].
Хочабільшістьсучаснихприскорювачівберутьнасебелишедві-триостанністадіїконвеєра, існуєважливеішвидкопрогресуючевиключеннязцьогоправила: з'явилисяпершідоступнічіпизпідтримкоюгеометричнихперетворень, здатнізначнозбільшитишвидкістьпобудовизображеннянакомп'ютерахзнедостатньоюобчислювальноюпотужністю(а вона, потужність, недостатня по визначенню - інакше не було би потреби в прискорювачах узагалі).
3D акселерація
Отже, самийзагальнийприскорювачскладаєтьсязгеометричногопроцесора (Geometry Processor, покипрактичнозавждивідсутній), механізмуустановки (Setup engine, стадія 7 конвеєра) імеханізмувідмальовкипримітивів – зафарбування (Fill engine, стадії 8 і 9), щопридетальномурозглядівиявляєтьсякомбінацієюдвохблоків – обробкитекстур (Texel engine) іобробкибуферакадру (Pixel engine). Продуктивність прискорювача залежить від процесора, продуктивності пам'яті, шини і самих обробних блоків. Як правило, приводяться два числа – максимальна пропускна здатність (трикутників у секунду, triangle throughput) і максимальна продуктивність зафарбування (крапок у секунду, fill rate). Такий підхід можливий, але не дуже коректний. Та й усі ми знаємо, що кращим тестом є швидкість гри, у яку ми любимо грати (fps, кадрів у секунду на якомусь стандартному наборі дій) і якість зображення (у цифрах не вимірити). Саме ці параметри і необхідно довідатися в першу чергу в Internet чи, може бути, у сусіда в під'їзді, але не коштує при цьому забувати про сильну залежність числа кадрів від обсягу пам'яті і потужності процесора комп'ютера цього самого сусіда.
Якщо не вдаватися в глибокі технічні подробиці, зафарбування відбувається в такий спосіб: блок обробки буфера кадру визначають, чи видна зафарбовувана крапка, наприклад, за допомогою буфера глибин (Z Buffer). Якщо вона видна, блок обробки текстур обчислює колір текстури, що відповідає цій крапці примітива. Тут є кілька важливих моментів – інтерполяція (filtering, згладжування) і вибір рівня текстури (mip-mapping). Перший забезпечує зображення без різких прямокутних пікселей, навіть коли ви знаходитеся поблизу предмета і дозвіл текстури явно недостатнє. Другий усуває перекручування (дивні візерунки), що виникають при
Як правило, для кожної крапки текстури, крім RGB кольору, можна задати ступінь її прозорості (alpha, RGBA формат текстури), що буде використовуватися прискорювачем для регулювання впливу джерела на приймач. Подібним чином зафарбовуються, наприклад, напівпрозорі по краях вибухи й ореоли навколо джерел світла в Unreal.
Не є життєво необхідної, але дуже прискорює роботу програм, що використовують багатопрохідну побудову зображення (наприклад, Quake2 чи Unreal), можливість мультитекстурування (multitexturing). Фактично, ця наявність двох (чи навіть більш) блоків обробки текстур, здатних одночасно обчислювати два кольори по двох текстурах для однієї крапки примітива, а потім комбінувати їх між собою. Подібною можливістю володіє Vооdоо2, RivaTNT і ще трохи поки "недороблених" чіпів[1].
Важливі також точність представлення квітів (16 біт – Hi-Color чи 32 біта – True-Color, останній набагато краще) і точність буфера глибин (Z-Buffer, 16 біт гірше, 24 і 32 краще), використовуваного для визначення видимості окремих крапок примітива. Помилки у визначенні глибини здатні приводити до дивних ефектів, наприклад, до ніг, що переглядають крізь постамент, статуї в грі Unreal.
І остання дія блоку обробки буфера кадру – накладання глобальних ефектів на готову картинку. Наприклад, туман, чи серпанок темрява (з погляду прискорювача це те саме), тобто ефект, відомий як fogging. Чи використовуваний у RivaZX метод повноекранного згладжування (full screen antialiasing), коли зображення розраховується з великим дозволом, чим показується користувачу, причому сусідні крапки зображення сумуються, і саме сумарне значення демонструється користувачу як одна крапка. Подібним чином усуваються різкі границі між полігонами, зображенню надається приємний "монолітний" вид. Існує також крайове згладжування примітивів, що приводить до практично ідентичного (ледве гірше) результату [3] (edge antialiasing), але потребуюче набагато менше витрат на побудову зображення.
5.ОСОБЛИВОСТІ МОДЕЛЮВАННЯ СВІТЛА І СЦЕНИ
Фізична модель світла
Світло - це дуже складна система, щоб змоделювати її в досконалості. Саме тому ми рідко можемо бачити створені комп'ютером тривимірні зображення, що були б по сьогоденню фотореалістичні. В усіх випадках, чим складніше і реалістично створювана вами віртуальна сцена, тим більше обчислень ви повинні зробити, і тем повільніше вона буде відтворюватися на екран. Як програміст, ви повинні будете вирішити, чим ви більше готові пожертвувати: якістю чи зображення швидкістю його прорахунку на комп'ютері[4]; чи хочете ви, щоб ваша програма привела усіх у здивування своєю красою, але вимагала майже годину для промальовування одного єдиного зображення, чи могла працювати зі швидкістю виводу 60 кадрів у секунду, але при цьому була схожа на карикатуру.