Il rendering in avanti è il processo di calcolo di un valore di luminosità per un frammento di superficie direttamente dalla geometria di input e dalle informazioni sull'illuminazione. Il rendering differito suddivide il processo in due fasi: prima producendo un buffer dello spazio dello schermo contenente proprietà del materiale (un buffer della geometria o buffer G) costruito rasterizzando la geometria di input e in secondo luogo producendo un valore di radianza per ciascun pixel combinando la G- buffer con informazioni di illuminazione.
Il rendering differito viene spesso presentato come un'ottimizzazione del rendering in avanti. Una spiegazione è che l'illuminazione è piuttosto costosa e se hai qualche sovraccarico stai illuminando pixel che non saranno mai visti sullo schermo, mentre se memorizzi le proprietà del materiale in un G-buffer e la luce in seguito, stai solo illuminando un pixel che effettivamente appare sullo schermo. Questo è effettivamente un vantaggio di differito, dato che puoi anche eseguire un pre-passaggio di profondità e quindi eseguire un passaggio di rendering in avanti con un test di profondità impostato su D3D11_COMPARISON_EQUAL
o GL_EQUAL
o equivalente?
Il rendering differito ha anche il potenziale per pianificare meglio sulla GPU. Dividere un grande ordito / fronte d'onda in un fronte d'onda di geometria più piccola e quindi fronti d'onda di illuminazione più piccoli in seguito migliora l'occupazione (più fronti d'onda in volo contemporaneamente). Ma finisci anche con un uso della larghezza di banda molto maggiore (scrivendo un gran numero di canali sul G-buffer, quindi rileggendoli durante l'illuminazione). Ovviamente i dettagli qui dipendono molto dalla tua GPU, ma quali sono i principi generali?
Ci sono altre considerazioni pratiche sulle prestazioni quando si decide tra rendering in avanti e differito? (Supponiamo che possiamo usare le variazioni di ogni tecnica, se necessario: cioè possiamo confrontare il piastrellato in avanti con il piastrellato anche differito.)