Rendering solo di una parte dello schermo in dettaglio


11

Se la grafica viene riprodotta per un ampio angolo di visione (ad esempio un televisore molto grande o un auricolare VR), lo spettatore non può effettivamente concentrarsi sull'intera immagine, solo una parte di essa. (In realtà, questo vale anche per schermi di dimensioni regolari.)

Combinato con un modo per tracciare gli occhi dello spettatore (che è principalmente praticabile in VR, immagino), potresti teoricamente sfruttarlo e rendere la grafica lontana dal focus dello spettatore con progressivamente meno dettagli e risoluzione, ottenendo prestazioni, senza perdere la qualità percepita.

Ci sono tecniche per questo disponibili o in fase di sviluppo oggi?


È un'idea interessante, ma immagino che non sia praticabile perché la maggior parte dei display non viene fornita con un eye-tracker. Penso anche che cambiare la geometria al ritmo del movimento degli occhi potrebbe avere un impatto negativo sulle prestazioni. Naturalmente si potrebbe progettare il vostro livello / scene in modo che incoraggiano il giocatore a guardare in alcuni punti di interesse e fornire maglie hi-approfondita, durante l'utilizzo di asset di qualità inferiore per le frazioni ...
bummzack

1
Dai un'occhiata a questo documento Siggraph 2014: graphics.cs.cmu.edu/projects/multirate . Non ho avuto il tempo di leggerlo, ma descrive un modo per ombreggiare un'immagine con l'esecuzione di "1x frammento di shader per pixel" e ottenere comunque un'immagine ragionevole. Forse qualunque algoritmo o idee che delineano può essere usato per ridurre la frequenza di campionamento sui bordi dello schermo e migliorare le prestazioni.
TravisG,

Un altro documento che potrebbe essere interessante: software.intel.com/en-us/articles/coarse-pixel-shading
TravisG

Questa è una cosa ora, chiamata Foveated Rendering. roadtovr.com/…
Bart van Heukelom l'

Risposte:


7

Ci sono esempi di tali effetti di cui stai parlando in molti giochi. Innanzitutto, c'è la Profondità di campo , che rende sfocato l'oggetto a distanza, proprio come se la fotocamera stesse focalizzando l'attenzione solo su cose vicine, come in questo esempio. Puoi esplorare altri esempi relativi a questo nel pacchetto SDK DirectX, anche lì hanno un codice di esempio. Per OpenGL, li troverai in rete se cerchi.

inserisci qui la descrizione dell'immagine

La seconda cosa che potresti voler vedere è quella che è forse conosciuta come Geometry MipMaping o Progressive Meshes che, come suggerisce il nome, è simile alla mappatura mip delle trame, ma per la geometria. Il numero di poligoni in una mesh si riduce man mano che l'oggetto si allontana dalla telecamera. Questo aiuta ad aumentare le prestazioni. In D3D esiste una funzione che aiuta a generare automaticamente mesh progressive. Ecco qui:

HRESULT WINAPI D3DXGeneratePMesh(
                                  LPD3DXMESH pMesh,
                                  const DWORD *pAdjacency,
                                 const D3DXATTRIBUTEWEIGHTS *pVertexAttributeWeights,             
                                  const FLOAT *pVertexWeights,
                                  DWORD MinValue,
                                  DWORD Options,
                                  LPD3DXPMESH *ppPMesh
                                 );

Ecco un esempio di questo:

inserisci qui la descrizione dell'immagine

EDIT: considera la seguente immagine- inserisci qui la descrizione dell'immagine

Questa è la frustum di abbattimento della fotocamera. La linea che attraversa il centro è il vettore LookAt. Ora, supponendo che il giocatore vorrà sempre mettere a fuoco al centro dello schermo, definisci l'angolo x. Qualsiasi oggetto che verrà posizionato ad un angolo superiore alla x decisa avrà un rendering a bassa risoluzione e quelli che si trovano all'interno dell'angolo verranno renderizzati con dettagli. In questo modo, gli oggetti al centro dello schermo saranno più dettagliati di quelli sui lati. Se il giocatore non sta guardando il centro, allora basta regolare quella linea centrale nella direzione in cui il giocatore sta guardando. (o forse ruotare l'intera videocamera in quella direzione).


Anche se dubito che potresti ottenere prestazioni implementando dof.
badweasel,

@badweasel Bene, è vero. DOF non fornisce miglioramenti nelle prestazioni, ma è un effetto degno di nota. Ti consente di nascondere la geometria poco dettagliata e robusta che a volte potrebbe fuoriuscire a distanza.
The Light Spark,

Ho votato a favore della tua risposta. È una buona risposta Volevo solo sottolinearlo poiché faceva parte della sua domanda.
badweasel,

Queste tecniche utilizzano la distanza z dalla fotocamera, ma intendo la distanza x / y dal punto sullo schermo che l'utente sta guardando. Suppongo che potrebbero essere adattati come tali però.
Bart van Heukelom,

1
@BartvanHeukelom Perché, se il giocatore non si sta concentrando sul centro, fai girare la telecamera per fare ciò che sta sparando al centro. Sembra divertente.
The Light Spark,

2

Sì, Foveated Rendering utilizza il eye tracking per rendere solo ciò che l'utente sta guardando in dettaglio. Tutto il resto, può essere reso in modo più dettagliato.

inserisci qui la descrizione dell'immagine

Mentre è abbastanza ovvio quando si guarda uno screenshot come questo, secondo quanto riferito è invisibile all'utente in VR.

Le cuffie tradizionali esistenti non includono il tracciamento oculare (ancora), ma ci sono alcune soluzioni post-vendita per aggiungere il tracciamento oculare. Inoltre è necessaria una piccola quantità di elaborazione aggiuntiva per il processo di rendering. Tuttavia i benefici sono significativi. Con l'implementazione del rendering distorto, solo una piccola percentuale di FOV deve essere renderizzata in dettaglio, questo può portare a frame rate notevolmente più alti. I numeri esatti dipendono dall'implementazione.

Inoltre, questo non è nemmeno limitato alle cuffie VR. Può essere utilizzato anche su monitor desktop (con l'aggiunta del eye tracking e con un effetto più limitato).


1

Espandendo la risposta di Byte56, sì, questo genere di cose è in fase di sviluppo nel settore. Fixed Foveated Rendering è una tecnica utilizzata da Valve nella loro demo di riparazione robot ( https://youtu.be/DdL3WC_oBO4?t=769 ) e in alcuni giochi commerciali (mi viene in mente Resident Evil VII per PSVR). Il Rendering fisso fisso non utilizza il tracciamento degli occhi, ma ciò significa che funziona bene con le versioni attuali di cuffie VR che attualmente non hanno alcun tipo di funzionalità di tracciamento degli occhi. Anche se in questo momento Vive dovrebbe ottenere un kit di aggiornamento eye-tracking, quindi potresti vedere alcuni titoli AAA VR che lo utilizzano.

Non troverai molti esempi di codice disponibili relativi a questo genere di cose, ma Nvidia ha alcune estensioni hardware documentate in modo decente. La multi-risoluzione è spiegata abbastanza bene ma è una funzionalità legata al loro hardware.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.