Work in progress

The content of this page was not yet updated for Godot 4.2 and may be outdated. If you know how to improve this page or you can confirm that it's up to date, feel free to open a pull request.

High dynamic range lighting

Introduction

Normally, an artist does all the 3D modeling, then all the texturing, looks at their awesome looking model in the 3D modeling software and says "looks fantastic, ready for integration!" then goes into the game, lighting is setup and the game runs.

Alors, à quel moment toute cette activité "HDR" entre-t-elle en jeu ? Pour comprendre la réponse, nous devons examiner le comportement des écrans.

Votre écran affiche des rapports de lumière linéaire allant d'une intensité maximale à une intensité minimale. Les moteurs de jeux modernes effectuent des calculs complexes sur les valeurs de lumière linéaire dans leurs scènes respectives. Alors quel est le problème ?

La plage d'intensité de l'affichage est limitée en fonction du type d'affichage. Le moteur de jeu rend à une gamme illimitée de valeurs d'intensité, cependant. Alors que "intensité maximale" signifie quelque chose pour un affichage sRGB, il n'a aucun rapport avec le moteur de jeu ; il n'y a qu'une gamme potentiellement infiniment large de valeurs d'intensité générées par image de rendu(per frame of rendering).

Cela signifie que certaines transformations de l'intensité de la lumière de la scène, également connues sous le nom de ratios de lumière liés à la scène, doivent être transformées et mappées pour s'inscrire dans la plage de sortie particulière de l'affichage choisi. Ceci est plus facile à comprendre si nous envisageons de photographier virtuellement notre scène de moteur de jeu avec une caméra virtuelle. Ici, notre caméra virtuelle appliquerait une transformation de rendu de caméra particulière aux données de la scène et la sortie serait prête pour l'affichage sur un type d'affichage particulier.

Note

Godot ne prend pas encore en charge la sortie high dynamic range. Il peut uniquement effectuer l'éclairage en HDR et tonemap le résultat vers une image low dynamic range .

Pour les utilisateurs avancés, il est toujours possible d'obtenir une image non-tonemapped du viewport avec les données HDR complètes, qui peut ensuite être enregistrée dans un fichier OpenEXR.

Écrans d'ordinateur

Presque tous les écrans nécessitent un codage non linéaire pour les valeurs de code qui leur sont envoyées. L’affichage, à son tour, utilisant sa caractéristique de transfert unique, "décode" la valeur de code en rapports de sortie linéaires, et projette les rapports à partir des lumières de couleur unique sur chaque site d’émission rougeâtre, verdâtre et bleuâtre.

Pour une majorité des affichages faits par ordinateur, les spécifications de l'affichage sont soulignés en accord avec IEC 61966-2-1, connu aussi sous le nom des spécifications sRGB de 1996. Ces spécifications indiquent comment un affichage sRGB devrait se comporter, y compris la couleur de la lumière dans les LED des pixel ainsi que les caractéristiques du transfert de l'entrée (OETF) à la sortie (EOTF).

Cependant, tous les affichage n'utilisent pas les même OETF et EOTF qu'un affichage d'ordinateur, par exemples, un affichage d'émission télé utilise le BT.1886 EOTF. Cependant, Godot ne prend actuellement en charge que les écrans sRGB.

La norme sRGB est basée sur la relation non linéaire entre le courant et la luminosité des écrans CRT des ordinateurs de bureau courants.

../../_images/hdr_gamma.png

Les mathématiques d'un modèle de scène de référence exigent que nous multiplions la scène par différentes valeurs pour ajuster les intensités et l'exposition à différentes plages de lumière. La fonction de transfert de l'affichage ne peut pas rendre correctement la plage dynamique plus large de la sortie de scène du moteur de jeu en utilisant la simple fonction de transfert de l'affichage. Une approche plus complexe de l'encodage est nécessaire.

Scène linéaire et pipelines d'assets

Working in scene-linear sRGB is more complex than pressing a single switch. First, imported image assets must be converted to linear light ratios on import. Even when linearized, those assets may not be perfectly well-suited for use as textures, depending on how they were generated.

Il y a deux façon de faire cela :

Fonction de transfert sRGB pour afficher les rapports linéaires lors de l'importation d'images

C'est la méthode la plus facile d'utiliser les assets sRGB, mais pas la plus idéale. L'un des problèmes est la perte de qualité. L'utilisation de 8 bits par canal pour représenter les rapports de lumière linéaire n'est pas suffisante pour quantifier correctement les valeurs. Ces textures peuvent aussi être compressées plus tard, ce qui peut exacerber le problème.

Fonction de transfert matériel sRGB pour afficher la conversion linéaire

Le GPU effectuera la conversion après avoir lu le texel en nombre flottant. Cela fonctionne bien sur PC et consoles, mais la plupart des appareils mobiles ne le supportent pas, ou ne le supportent pas au format texture compressé (iOS par exemple).

Scène linéaire pour affichage-référé non linéaire

Une fois le rendu terminé, le rendu linéaire de la scène doit être transformé en une sortie appropriée telle qu'un affichage sRGB. Pour ce faire, activez la conversion sRVB dans le Environnement (plus d'informations à ce sujet ci-dessous).

Gardez à l'esprit que les conversions sRGB -> Display Linear et Display Linear -> sRGB doivent toujours être toutes les deux activées. Si l'une d'entre elles n'est pas activées, il en résultera d'horribles visuels qui ne conviendront qu'aux jeux indépendants expérimentaux d'avant-garde.

Paramètres de HDR

Le réglage HDR se trouve dans la ressource Environnement. On les trouve la plupart du temps dans un nœud WorldEnvironment ou dans une caméra. Pour plus d'informations, voir Les environnements et les effets post-rendu.