Partage via


Matériaux PBR

Les matériaux PBR constituent l’un des types de matériaux pris en charge dans Azure Remote Rendering. Ils sont utilisés pour les maillages triangulaires qui doivent recevoir un éclairage réaliste. En revanche, les nuages de points ne sont pas affectés par l’éclairage dynamique.

PBR est l'abréviation de Physically Based Rendering qui signifie que le matériau décrit les propriétés visuelles d’une surface de manière physiquement plausible pour permettre des résultats réalistes dans toutes les conditions d’éclairage. La plupart des moteurs de jeux modernes et des outils de création de contenu prennent en charge les matériaux PBR considérés comme la meilleure approximation des scénarios réels en termes de rendu en temps réel.

Helmet glTF sample model rendered by ARR

L’idée de base du rendu physique réaliste consiste à utiliser les propriétés BaseColor, Metalness, et Roughness pour émuler un large gamme de matériaux réels. La description détaillée du rendu physique réaliste (PBR) dépasse le cadre de cet article. Pour plus d'informations sur le rendu physique réaliste, consultez d'autres sources.

Cela étant, les matériaux PBR ne constituent pas une solution universelle. Certains matériaux reflètent la couleur différemment selon l’angle de vue. Par exemple, certaines structures ou peintures de voitures. Ces types de matériaux ne sont pas gérés par le modèle PBR standard et ne sont pas pris en charge par Azure Remote Rendering pour le moment. Cette limitation comprend les extensions PBR, telles que Thin-Film (surfaces multicouches) et Clear-Coat (peintures de voitures).

Propriétés des matériaux PBR

Les propriétés matérielles suivantes sont exposées dans l’API runtime, par exemple sur la classe C# PbrMaterial ou la classe PbrMaterial C++, respectivement.

  • PbrFlags: Les indicateurs de fonctionnalité incorrects peuvent être combinés dans ce masque de bits pour activer les fonctionnalités suivantes :

    • TransparentMaterial: Pour les matériaux PBR, il n’existe qu’un seul paramètre de transparence : il est activé ou non. L’opacité est définie par le canal alpha de la couleur albedo. Lorsqu’elle est activée, une méthode de rendu plus complexe est appelée pour dessiner des surfaces semi-transparentes. Azure Remote Rendering implémente OIT (Order Independent Transparency). La géométrie transparente est onéreuse. S’il vous faut uniquement des trous dans une surface, par exemple pour les feuilles d’un arbre, il est préférable de recourir au détourage alpha.

    Spheres rendered with zero to full transparency Notez dans l’image ci-dessus, comment la sphère la plus à droite est entièrement transparente, mais la réflexion est toujours visible.

    Important

    Si un matériau est supposé passer de l’état opaque à transparent au moment de l’exécution, le convertisseur doit utiliser le mode de renduTileBasedComposition. Cette limitation ne s’applique pas aux matériaux convertis d'emblée en matériaux transparents.

    • UseVertexColor: si le maillage contient des vertex couleurs et que cette option est activée, la couleur des vertex maillages est multipliée en et AlbedoColorAlbedoMap. Par défaut, UseVertexColor est désactivé.
    • DoubleSided : si la bilatéralité est définie sur true, les triangles bénéficiant de ce matériau sont rendus même si la caméra regarde vers les faces arrière. L’éclairage des matériaux PBR est également correctement calculé pour les faces arrière. Par défaut, cette option est désactivée. Voir aussi Single-sided rendering.
    • SpecularHighlights: active les surbrillances spéculaires pour ce matériau. Par défaut, l’indicateur SpecularHighlights est activé.
    • AlphaClipped: active les découpages durs par pixel, si la valeur alpha est inférieure à la valeur de AlphaClipThreshold (voir ci-dessous). Cela fonctionne également pour les matériaux opaques.
    • FresnelEffect : Cet indicateur de matériau active l’ajout de l’effet Fresnel sur le matériau respectif. L’apparence de l’effet est régie par les autres paramètres de Fresnel FresnelEffectColor et FresnelEffectExponent expliqués ci-dessous.
    • TransparencyWritesDepth : si l’indicateur TransparencyWritesDepth est défini sur le matériau et que celui-ci est transparent, les objets utilisant ce matériau contribueront également au tampon de profondeur final. Consultez l’indicateur de matériau PBR transparent dans la section suivante. L’activation de cette fonctionnalité est recommandée si votre cas d’usage a besoin d’une Reprojection en phase tardive plus plausible des scènes entièrement transparentes. Pour les scènes opaques/transparentes mixtes, ce réglage peut introduire un comportement ou des artefacts de reprojection invraisemblables. Pour cette raison, le réglage par défaut et recommandé pour le cas d’usage général est de désactiver cet indicateur. Les valeurs de profondeur écrites sont extraites de la couche de profondeur par pixel de l’objet qui est le plus proche de l’appareil photo.
  • AlbedoColor : cette couleur est multipliée par d’autres couleurs, telles que les couleurs AlbedoMap ou vertex. Si la propriété transparency est activée sur un matériau, le canal alpha est utilisé pour ajuster l’opacité, avec 1 pour entièrement opaque et 0 pour entièrement transparent. La couleur albedo par défaut est blanc opaque.

    Remarque

    Lorsqu’un matériau PBR est entièrement transparent, comme une surface de verre parfaitement propre, il reflète toujours l’environnement. Les zones lumineuses telles que le soleil sont toujours visibles dans la réflexion. Cela est différent pour les matériaux de couleur.

  • AlbedoMap : une texture 2D pour les valeurs albedo par pixel.

  • AlphaClipThreshold: si l’indicateur AlphaClipped est défini sur la PbrFlags propriété, tous les pixels où la valeur alpha albedo est inférieure à AlphaClipThreshold ne seront pas dessinées. Le détourage alpha peut être utilisé, même sans activation de la transparence, et s’avère nettement plus rapide à rendre. Les matériaux avec détourage alpha sont cependant plus lents à rendre que les matériaux entièrement opaques. Par défaut, le détourage alpha est désactivé.

  • TexCoordScale et TexCoordOffset : l’échelle est multipliée par les coordonnées de la texture UV, le décalage y est ajouté. Peut être utilisée pour étirer et décaler les textures. La valeur par défaut de l’échelle est de (1, 1) et le décalage est de (0, 0).

  • FresnelEffectColor : Couleur de Fresnel utilisée pour ce matériau. Important uniquement quand l’indicateur de Fresnel a été défini sur ce matériau (voir ci-dessus). Cette propriété contrôle la couleur de base de la brillance de Fresnel (consultez Effet Fresnel pour obtenir une explication complète). Seules les valeurs du canal RVB sont importantes, la valeur alpha est ignorée.

  • FresnelEffectExponent : Exposant de Fresnel utilisé pour ce matériau. Important uniquement quand l’indicateur de Fresnel a été défini sur ce matériau (voir ci-dessus). Cette propriété contrôle la diffusion de la brillance de Fresnel. La valeur minimale 0.01 entraîne une diffusion sur l’ensemble de l’objet. La valeur maximale 10.0 restreint la brillance uniquement aux bords les plus gracieux visibles.

  • PbrVertexAlphaMode: détermine la façon dont le canal alpha des couleurs de vertex est utilisé. Les modes suivants sont fournis :

    • Occlusion: la valeur alpha représente une valeur d’occlusion ambiante et affecte donc uniquement l’éclairage indirect de la boîte de ciel.
    • LightMask: La valeur alpha sert de facteur d’échelle pour la quantité globale d’éclairage appliquée, ce qui signifie que l’alpha peut être utilisé pour assombrir les zones. Cela affecte à la fois l’éclairage indirect et direct.
    • Opacity: l’alpha représente la façon dont le matériau est opaque (1,0) ou transparent (0,0).
  • NormalMap: Pour simuler des détails affinés, une carte normale peut être fournie.

  • NormalMapScale: valeur scalaire qui met à l’échelle la force normale de la carte. La valeur 1,0 prend la normale de la carte normale, une valeur de 0 rend la surface plate. Les valeurs supérieures à 1,0 exagèrent la perturbation normale de la carte.

  • Roughness et RoughnessMap: La rugosité définit la manière dont la surface est approximative ou lisse. Les surfaces rugueuses diffusent la lumière dans plus de directions que les surfaces lisses, ce qui rend les réflexions plus floues que nettes. La plage de valeurs est comprise entre 0.0 et 1.0. Lorsque Roughness équivaut à 0.0, les réflexions sont nettes. Lorsque Roughness équivaut à 0.5, les réflexions deviennent floues. Si une valeur de rugosité et une cartographie de rugosité sont fournies, la valeur finale sera le produit des deux.

  • Metalness et MetalnessMap: En physique, cette propriété correspond à savoir si une surface est conductive ou diélectrique. Les matériaux conducteurs présentent différentes propriétés réfléchissantes et tendent à réfléchir sans couleur albedo. En termes de matériaux PBR, cette propriété détermine dans quelle mesure une surface reflète l’environnement. Les valeurs sont comprises entre 0.0 et 1.0. Lorsque le métal est 0.0, la couleur albedo est entièrement visible, et le matériau ressemble à du plastique ou des céramiques. Lorsque la propriété metalness est 0.5, il ressemble à du métal peint. Lorsque la métallité est 1.0, la surface perd presque complètement sa couleur albedo, et ne reflète que les environs. Par exemple, si metalness est 1.0 et roughness0.0, une surface ressemble à un miroir. Si les propriétés metalness et metalness map sont fournies, la valeur finale sera le produit des deux.

    Spheres rendered with different metalness and roughness values

    Dans l’image ci-dessus, la sphère du coin inférieur droit ressemble à un matériau en métal réel et la partie inférieure gauche à de la céramique ou du plastique. La couleur albedo change également en fonction des propriétés physiques. Si la rugosité augmente, le matériau perd la netteté de la réflexion.

  • AOMap et AOScale: l’occlusion ambiante rend les objets avec des crevices plus réalistes en ajoutant des ombres aux zones obstruées. La plage de valeurs de l'occlusion est comprise entre 0.0 et 1.0, où 0.0 représente l'obscurité (occlusion) et 1.0 l'absence d'occlusion. Si une texture 2D est fournie en tant que carte d’occlusion, l’effet est activé et AOScale agit comme multiplicateur.

    An object rendered with and without ambient occlusion

Remplacements de matériaux de couleur pendant la conversion

Un sous-ensemble de propriétés de matériau de couleur peut être remplacé lors de la conversion du modèle via le fichier de remplacement de matériau. Le tableau suivant montre le mappage entre les propriétés de runtime documentées ci-dessus et le nom de propriété correspondant dans le fichier de remplacement :

Nom de propriété du matériau Nom de la propriété dans le fichier de remplacement
PbrFlags.TransparentMaterial transparent
PbrFlags.AlphaClipped alphaClipEnabled
PbrFlags.UseVertexColor useVertexColor
PbrFlags.DoubleSided isDoubleSided
PbrFlags.TransparencyWritesDepth transparencyWritesDepth
AlbedoColor albedoColor
TexCoordScale textureCoordinateScale
TexCoordOffset textureCoordinateOffset
NormalmapScale normalMapScale
Metalness metalness
Roughness roughness
AlphaClipThreshold alphaClipThreshold

Détails techniques

Azure Remote Rendering utilise la microfacette BRDF Cook Torrance avec GGX NDF, Schlick Fresnel et un terme de visibilité corrélée GGX Smith avec un terme diffus Lambert. Actuellement, ce modèle est la norme de facto du secteur. Pour plus d’informations détaillées, reportez-vous à cet article : Rendu physiquement basé sur Torrance

Le modèle PBR Specular-Glossiness est une alternative au modèle PBR Metalness-Roughness utilisé dans Azure Remote Rendering. Ce modèle peut représenter une plus grande gamme de matériaux. Toutefois, il est plus onéreux et ne fonctionne pas très bien en temps réel. Il n’est pas toujours possible de passer de Specular-Glossiness à Metalness-Roughness car il s’agit de paires de valeurs (Diffuse, Specular) impossibles à convertir vers (BaseColor, Metalness). La conversion dans l’autre sens est plus simple et plus précise puisque toutes les paires (BaseColor, Metalness) correspondent à des paires (Diffuse, Specular) bien définies.

Documentation de l’API

Étapes suivantes