Rendre seulement une partie de l'écran en détail

11

Si les graphiques sont rendus pour un grand angle de vision (par exemple un très grand téléviseur ou un casque VR), le spectateur ne peut pas réellement se concentrer sur l'image entière, juste une partie de celle-ci. (En fait, c'est également le cas pour les écrans de taille normale.)

Combiné à un moyen de suivre les yeux du spectateur (ce qui est principalement viable en VR, je suppose), vous pourriez théoriquement exploiter cela et rendre les graphiques loin de la focalisation du spectateur avec progressivement moins de détails et de résolution, améliorant les performances, sans perdre la qualité perçue.

Existe-t-il des techniques pour cela disponibles ou en cours de développement aujourd'hui?

Bart van Heukelom
la source
C'est une idée intéressante, mais je suppose qu'elle n'est pas viable car la plupart des écrans ne sont pas livrés avec un eye-tracker. Je pense également que changer la géométrie au rythme des mouvements oculaires pourrait avoir un impact négatif sur les performances. Bien sûr, vous pouvez concevoir votre niveau / vos scènes de manière à encourager le joueur à regarder certains points d'intérêt et à y fournir des maillages détaillés pendant que vous utilisez des ressources de qualité inférieure pour l'environnement ...
bummzack
1
Consultez cet article Siggraph 2014: graphics.cs.cmu.edu/projects/multirate . Je n'ai pas eu le temps de le lire, mais il décrit un moyen d'ombrer une image à moins de "1x fragment shader par pixel" et d'obtenir toujours une image raisonnable. Peut-être que l'algorithme ou les idées qu'ils décrivent peuvent être utilisés pour réduire le taux d'échantillonnage sur les bords de l'écran et améliorer les performances.
TravisG
Un autre article qui pourrait être intéressant: software.intel.com/en-us/articles/coarse-pixel-shading
TravisG
C'est une chose maintenant, appelée Foveated Rendering. roadtovr.com/…
Bart van Heukelom

Réponses:

7

Il existe des exemples de ces effets dont vous parlez dans de nombreux jeux. Tout d'abord, il y a la profondeur de champ , ce qui rend l'objet à distance flou, tout comme si l'appareil photo se concentre sur des choses proches de lui, comme dans cet exemple. Vous pouvez explorer plus d'exemples liés à cela dans le package DirectX SDK - ils ont également un exemple de code. Pour OpenGL, vous les obtiendrez sur le net si vous effectuez une recherche.

entrez la description de l'image ici

La deuxième chose que vous voudrez peut-être voir est ce qui est peut-être appelé Geometry MipMaping ou Progressive Meshes qui, comme son nom l'indique, est similaire au mip-mapping de texture, mais pour la géométrie. Le nombre de polygones dans un maillage est réduit à mesure que l'objet s'éloigne de la caméra. Cela aide à augmenter les performances. Dans D3D, il existe une fonction qui aidera à générer automatiquement des maillages progressifs. C'est ici:

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

En voici un exemple:

entrez la description de l'image ici

EDIT: Considérez l'image suivante- entrez la description de l'image ici

Ceci est le tronc de cue de l'appareil photo. La ligne qui traverse le milieu est le vecteur LookAt. Maintenant, en supposant que le joueur voudra toujours se concentrer au centre de l'écran, vous définissez l'angle x. Tout objet qui sera positionné à un angle supérieur au x décidé aura un rendu de faible résolution, et ceux qui sont dans l'angle seront rendus avec détail. Ainsi, les objets au centre de l'écran seront plus détaillés que ceux des côtés. Car si le joueur ne regarde pas le centre, ajustez simplement cette ligne centrale dans la direction dans laquelle le joueur regarde. (ou peut-être faire pivoter toute la caméra dans cette direction).

The Light Spark
la source
Bien que je doute que vous puissiez gagner en performances en implémentant dof.
badweasel
@badweasel Eh bien, c'est vrai. DOF n'apporte pas d'amélioration des performances, mais c'est un effet qui mérite d'être mentionné. Il vous permet de masquer la faible géométrie détaillée et volumineuse qui pourrait parfois apparaître à distance.
The Light Spark
J'ai voté contre votre réponse. C'est une bonne réponse. Je voulais juste le signaler, car cela faisait partie de sa question.
badweasel
Ces techniques utilisent la distance z loin de l'appareil photo, mais je veux dire la distance x / y loin du point sur l'écran que l'utilisateur regarde. Je suppose cependant qu'ils pourraient être adaptés en tant que tels.
Bart van Heukelom
1
@BartvanHeukelom Pourquoi, si le joueur ne se concentre pas sur le centre, vous faites tourner la caméra pour faire ce qu'il met l'accent sur le centre. Ça a l'air amusant.
The Light Spark
2

Oui, Foveated Rendering utilise le suivi des yeux pour ne restituer que ce que l'utilisateur regarde en détail. Tout le reste peut être rendu avec moins de détails.

entrez la description de l'image ici

Bien qu'il soit assez évident en regardant une capture d'écran comme celle-ci, il est apparemment invisible pour l'utilisateur en VR.

Les casques traditionnels existants n'incluent pas (encore) le suivi des yeux, mais il existe quelques solutions après-vente pour ajouter le suivi des yeux. En outre, une petite quantité de traitement supplémentaire est requise pour le processus de rendu. Cependant, les avantages sont importants. Avec le rendu foveated implémenté, seul un faible pourcentage de FOV doit être rendu dans les moindres détails, ce qui peut entraîner des fréquences d'images considérablement plus élevées. Les nombres exacts dépendent de l'implémentation.

De plus, cela n'est même pas limité aux casques VR. Il peut également être utilisé sur des moniteurs de bureau (avec l'ajout du suivi des yeux et à un effet plus limité).

MichaelHouse
la source
1

S'étendant sur la réponse de Byte56, oui, ce genre de chose est en cours de développement dans l'industrie. Fixed Foveated Rendering est une technique utilisée par Valve dans leur démo de réparation de robot ( https://youtu.be/DdL3WC_oBO4?t=769 ) et dans quelques jeux commerciaux (Resident Evil VII pour PSVR me vient à l'esprit). Le rendu foveated fixe n'utilise pas le suivi des yeux, mais cela signifie qu'il fonctionne bien avec les versions actuelles des casques VR qui ne disposent actuellement d'aucune sorte de capacités de suivi des yeux. Bien que pour le moment, le Vive soit censé obtenir un kit de mise à niveau pour le suivi des yeux, vous pouvez donc voir certains titres AAA VR utiliser cela.

Vous ne trouverez pas de nombreux exemples de code disponibles liés à ce genre de chose, mais Nvidia a quelques extensions matérielles qui sont décemment documentées. La multi-résolution est assez bien expliquée mais est une fonctionnalité liée à leur matériel.

Essaim d'abeilles
la source