Esatto, inoltre, se ho capito bene, ipotizzando che un frame si generi per esempio in 10ms in un gioco:
- con dlss 3
- istante 0 si genera A
- istante 10 si genera C e vedo A
- istante 15 vedo B
- istante 20 vedo C
I frame che vedo sono ogni 5ms (quindi ho il doppio dei fotogrammi) ma in realtà è tutto spostato avanti (ritardato) perché per generare i frame intermedi serve anche il fotogramma dopo, che quindi deve essere generato e poi aspettare che venga mostrato quello interpolato per poi finalmente entrare in scena.
Se è davvero così è una cavolata pazzesca perché il tempo in cui posso "agire" raddoppia.
A meno che i frames generati non siano fatti con i fotogrammi precedenti andando ad "intuito"
Be', quasi...
Anzitutto premetto che anche senza DLSS/FSR/UpScaling/etc si utilizza (praticamente) sempre un doppio-buffer: frontBuffer e backBuffer.
Si scrive sempre sul backBuffer, e una volta completato si chiama una sorta di "swapBuffer" che inverte le posizioni (il front diventa back e viceversa)
Questo lo si fa per visualizzare il frame gia' completo e non mentre lo si crea.
E' anche comune la tecnica del triple-Buffer, e prima di visualizzare il "primo frame" sul frontBuffer devo riempire i 2 buffer precedenti, quindi ho bisogno di una sorta di "warm-up" prima di iniziare con la visualizzazione.
E nessuno mi vieta di usarne anche piu' di 3, per esigenze particolari.
Quindi non ha importanza quanto indietro mi trovi con l'immagine visualizzata o da renderizzare, l'importante e' che del buffer visualizzato sul frontBuffer abbia memoria dei vertci (realmente processati in 3D)
Cosi' anche col DLSS3 ho bisogno di una sorta di warm-up prima di iniziare.
Per semplicita' uso:
i numeri dispari per i frame REALI generati in 10ms
i numeri pari per i frame INTERPOLATI generati in 5ms
- warm-up ... si genera 1 (10ms)
- warm-up ... si genera 3 (10ms)
- istante 0 ... vedo 1 si genera 2 (5ms) ... posso intervenire col pad
- istante 5 ... vedo 2 si genera 5 (10ms)
- istante 15 ... vedo 3 si genera 4 (5ms) ... posso intervenire col pad
- istante 20 ... vedo 4 si genera 7 (10ms)
- istante 30 ... vedo 5 si genera 6 (5ms) ... posso intervenire col pad
- istante 35 ... vedo 6 si genera 9 (10ms)
- istante 45 ... vedo 7 si genera 8 (5ms) ... posso intervenire col pad
... e cosi' via
Quindi (dopo il warm-up) ho un framerate di 133FPS, ma posso intervenire ogni 15ms
- senza dlss3:
- istante 0 vedo A
- istante 10 vedo C
Cosi', senza DLSS3, avrei invece 100FPS, ma posso intervenire ogni 10ms (ossia ad ogni frame)
N.B.
- Per quanto cio' che ho scritto possa essere molto verosimile, la tecnica del DLSS3 e' comunque una tecnologia "chiusa" (non si conosce nella specificita' del codice) e a parte la descrizione di NVidia non c'e' molto altro.
- Nel particolare esempio ho fatto una visualizzazione a "singhiozzo" (5/10/5/10/5/10...) per semplicita' e migliore comprensione, ma immagino sia stata resa fluida mediando i valori... con tale accorgimento, nell'esempio precedente, i frames verrebbero visualizzati ogni 7.5ms (7.5/7.5/7.5/7.5...) indipendentemente che siano reali o interpolati... ma rimarrebbero sempre 133FPS e 15ms