Розглянемо відкладене освітлення. Коротше кажучи, відкладене освітлення - це техніка, яка використовує зменшену версію відкладеного затінення для обчислення світлової карти екрана. У другому проході геометрія відображається знову, використовуючи світлу карту екрану як інформацію про освітлення.
Ця методика застосовується для зменшення розміру буфера G, оскільки потрібно менше атрибутів. Це також купує вам перевагу в тому, що буфер G-буфера та світлова карта екрану можуть мати меншу роздільну здатність, ніж екран.
Я реалізував суворий рендерінг на основі GLES 2.0 (хоча і експериментальний), і мені вдалося звести G-буфер до однієї текстури RGBA (так, я використав text2D замість рендербуфера). Він містив звичайну карту простору екрану + буфер глибини в альфа-каналі (наскільки я пам’ятаю стиснутий за допомогою логарифму).
Атрибути позиції ( тут називається світ ) можна обчислити під час проходження освітлення, використовуючи той факт, що в перспективній проекції .xy розбивається на .z , так що:
х уfг уs t u m=х уш оr l d/ zw o r l d
Я зблизив атрибут позиції xy , зробивши:
х уw o r l d= х уfr u s t u m∗ zw o r l d
Примітка: мені довелося зробити додаткові коригування залежно від налаштувань матриці проекції.
Також варто зазначити, що я зміг опустити компонент .z нормальних векторів, оскільки я міг реконструювати .z з .xy, оскільки нормальний вектор нормалізується так, що:
х2+ у2+ z2----------√= 1х2+ у2+ z2= 1z2= 1 - ( х2+ у2)z= 1 - ( х2+ у2)-----------√
Використовуючи цю техніку, я зміг звільнити інший канал у моєму RGBA G-Buffer і застосував це для зберігання екранного екрана specular-map (або глянцю, якщо хочете).