Compartir a través de


Materiales de PBR

Los materiales de PBR son uno de los tipos de material admitidos en Azure Remote Rendering. Se usan para mallas que deben recibir una iluminación realista. Por otro lado, las nubes de puntos no se ven afectadas por la iluminación dinámica.

PBR son las siglas de Physically Based Rendering y significan que el material describe las propiedades visuales de una superficie de forma física plausible, de modo que se puedan obtener resultados realistas en todas las condiciones de iluminación. La mayoría de los motores de juegos y las herramientas de creación de contenido actuales admiten materiales de PBR porque se consideran la mejor aproximación a escenarios del mundo real para la representación en tiempo real.

Modelo de ejemplo glTF de casco representado por ARR

La idea principal de la representación basada en la física es usar las propiedades BaseColor, Metalnessy Roughness para simular una amplia gama de materiales reales. Una descripción detallada de PBR queda fuera del ámbito de este artículo. Para obtener más información acerca de PBR, consulte otras fuentes.

Sin embargo, los materiales de PBR no son una solución universal. Hay materiales que reflejan el color de manera diferente en función del ángulo de visualización. Por ejemplo, algunos tejidos o pinturas de automóvil. Estos tipos de materiales no se controlan mediante el modelo PBR estándar y actualmente no se admiten en Azure Remote Rendering. Esta limitación incluye las extensiones de PBR, como Thin-Film (superficies de varias capas) y Clear-Coat (para pinturas de automóvil).

Propiedades de los materiales de PBR

Las siguientes propiedades de material se exponen en la API en tiempo de ejecución, por ejemplo, en la clase PbrMaterial de C# o en la clase PbrMaterial de C++, respectivamente.

  • PbrFlags: las marcas de características varias se pueden combinar en esta máscara de bits para habilitar las siguientes características:

    • TransparentMaterial: para los materiales de PBR, solo existe una opción de transparencia (habilitada o deshabilitada). La opacidad se define mediante el canal alfa del color de albedo. Cuando está habilitada, se invoca un método de representación más complejo para dibujar superficies semitransparentes. Azure Remote Rendering implementa la transparencia independiente del orden (OIT) real. La representación de geometría transparente es costosa. Si solo necesita orificios en una superficie, por ejemplo para las hojas de un árbol, es mejor usar el recorte alfa en su lugar.

    Esferas representadas desde cero hasta la transparencia completa Observe en la imagen anterior que la esfera más a la derecha es completamente transparente, pero la reflexión sigue siendo visible.

    Importante

    Si se prevé cambiar un material de opaco a transparente en tiempo de ejecución, el representador debe utilizar el modo de representación TileBasedComposition. Esta limitación no se aplica a los materiales que se convierten, como los materiales transparentes con los que se empieza.

    • UseVertexColor: si la malla contiene colores de vertex y esta opción está habilitada, el color de vertex de las mallas se multiplica en AlbedoColor y AlbedoMap. De forma predeterminada UseVertexColor está deshabilitado.
    • DoubleSided: si el valor de doble cara está establecido en true, los triángulos con este material se representan, aunque la cámara apunte a sus caras posteriores. En el caso de la iluminación de materiales de PBR también se calcula correctamente para las caras posteriores. Esta opción está deshabilitada de manera predeterminada. Consulte también Single-sided rendering.
    • SpecularHighlights: habilita resaltados especulares para este material. De forma predeterminada, la marca SpecularHighlights está habilitada.
    • AlphaClipped: habilita recortes fijos por píxel, en función del valor alfa que se encuentra por debajo del valor de AlphaClipThreshold (más adelante puede encontrar más información). Esto también se puede usar en materiales opacos.
    • FresnelEffect: esta marca de material habilita el efecto Fresnel aditivo en el material correspondiente. La apariencia del efecto se rige por los otros parámetros de Fresnel, FresnelEffectColor y FresnelEffectExponent, que se explican a continuación.
    • TransparencyWritesDepth: si la marca TransparencyWritesDepth se establece en el material y el material es transparente, los objetos que usen este material también contribuirán al búfer de profundidad final. Vea la marca de material de PBR transparente en la sección siguiente. La habilitación de esta característica se recomienda si el caso de uso necesita una reproyección en fase más tardía más plausible de escenas completamente transparentes. En el caso de escenas transparentes u opacas mixtas, este valor puede presentar artefactos de reproyección o un comportamiento de reproyección improbable. Por esta razón, la configuración predeterminada y recomendada para el caso de uso general es deshabilitar esta marca. Los valores de profundidad escritos se toman de la capa de profundidad por píxel del objeto más cercano a la cámara.
  • AlbedoColor: este color se multiplica con otros colores, como AlbedoMap o vertex. Si el elemento transparency está habilitado en un material, el canal alfa se usa para ajustar la opacidad. En este contexto, 1 significa totalmente opaco y 0, completamente transparente. El color de albedo predeterminado es blanco opaco.

    Nota:

    Cuando un material de PBR es totalmente transparente, como la superficie perfectamente limpia de un vidrio, sigue reflejando el entorno. Los puntos brillantes como el sol siguen siendo visibles en la reflexión. Esto es diferente para los materiales de color.

  • AlbedoMap: una textura bidimensional para los valores de albedo por píxel.

  • AlphaClipThreshold: si la marca AlphaClipped se establece en la propiedad PbrFlags, no se dibujarán los píxeles en los que el valor alfa de albedo sea inferior a AlphaClipThreshold. El recorte alfa se puede usar incluso sin habilitar la transparencia y se representa mucho más rápidamente. Sin embargo, los materiales recortados alfa se siguen representando más lentamente que los materiales completamente opacos. De forma predeterminada, el recorte alfa está deshabilitado.

  • TexCoordScale y TexCoordOffset: la escala se multiplica en las coordenadas de textura UV y se le agrega el desplazamiento. Se puede usar para ajustar y desplazar las texturas. La escala predeterminada es (1, 1) y el desplazamiento es (0, 0).

  • FresnelEffectColor: el color de Fresnel utilizado para este material. Solo es importante si se ha establecido la marca del efecto Fresnel en este material (consulte más arriba). Esta propiedad controla el color base del brillo de Fresnel (consulte una explicación completa en Efecto Fresnel). Actualmente, solo son importantes los valores del canal RGB y se omitirá el valor alfa.

  • FresnelEffectExponent: el exponente de Fresnel utilizado para este material. Solo es importante si se ha establecido la marca del efecto Fresnel en este material (consulte más arriba). Esta propiedad controla la distribución del brillo de Fresnel. El valor mínimo 0,01 provoca que el brillo se aplique por todo el objeto. El valor máximo de 10,0 limita el brillo solo a los bordes visibles más oblicuos.

  • PbrVertexAlphaMode: determina cómo se usa el canal alfa de colores de vértices. Se proporcionan los siguientes modos:

    • Occlusion: el valor alfa representa un valor de oclusión ambiental y, por tanto, solo afecta a la iluminación indirecta del cuadro del cielo.
    • LightMask: el valor alfa sirve como factor de escala para la cantidad total de iluminación aplicada, lo que significa que el valor alfa se puede usar para oscurecer áreas. Esto afecta tanto a la iluminación indirecta como directa.
    • Opacity: el valor alfa representa cómo de opaco (1,0) o de transparente (0,0) es el material.
  • NormalMap: para simular detalles específicos, se puede proporcionar un mapa normal.

  • NormalMapScale: un valor escalar que escala la intensidad normal del mapa. Un valor de 1,0 toma el mapa normal tal como es; un valor de 0 hace que la superficie aparezca plana. Los valores superiores a 1,0 exageran la perturbación normal del mapa.

  • Roughness y RoughnessMap: la rugosidad define el grado de rugosidad o suavidad de la superficie. Las superficies rugosas dispersan la luz en más direcciones que las superficies suaves, lo que hace que las reflexiones sean borrosas en lugar de nítidas. El intervalo de valores es de 0.0 a 1.0. Si Roughness es igual a 0.0, los reflejos serán nítidos. Si Roughness es igual a 0.5, los reflejos serán borrosos. Si se proporcionan un valor de roughness y un mapa de roughness, el valor final será el producto de ambos.

  • Metalness y MetalnessMap: en física, esta propiedad se corresponde con la naturaleza conductiva o dieléctrica de una superficie. Los materiales conductivos tienen propiedades reflectantes diferentes y tienden a ser reflectantes sin ningún color de albedo. En los materiales de PBR, esta propiedad afecta a la cantidad de superficie que refleja el entorno circundante. Los valores van de 0.0 a 1.0. Si el valor de metal es 0.0, el color de albedo es totalmente visible y el material parece plástico o cerámica. Si el valor de metalness es 0.5, parece metal pintado. Si el valor de metal es 1.0, la superficie pierde casi por completo el color de albedo y solo refleja el entorno. Por ejemplo, si metalness es 1.0 y roughness es 0.0, una superficie parece el reflejo real. Si se proporcionan un valor de metalness y un mapa de metalness, el valor final será el producto de ambos.

    Esferas representadas con distintos valores de metal y rugosidad

    En la imagen anterior, la esfera de la esquina inferior derecha es similar a un material de metal real y la parte inferior izquierda parece cerámica o plástico. El color de albedo también cambia según las propiedades físicas. Con una rugosidad mayor, el material pierde la nitidez de la reflexión.

  • AOMap y AOScale: la oclusión ambiente permite que los objetos con grietas parezcan más realistas al agregar sombras a las áreas ocluidas. Los valores de oclusión van de 0.0 a 1.0, donde 0.0 significa oscuridad (oclusión) y 1.0 significa que no hay ninguna oclusión. Si se proporciona una textura 2D como un mapa de oclusión, el efecto se habilita y AOScale actúa como un multiplicador.

    Objeto representado con y sin oclusión ambiental

Reemplazos de material de color durante la conversión

Un subconjunto de propiedades de material de color se puede reemplazar durante la conversión del modelo a través del archivo de invalidación de material. En la tabla siguiente se muestra la asignación entre las propiedades en tiempo de ejecución documentadas anteriormente y el nombre de propiedad correspondiente en el archivo de reemplazo:

Nombre de propiedad de material Nombre de propiedad en el archivo de reemplazo
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

Detalles técnicos

Azure Remote Rendering usa el BRDF de microfaceta Cook-Torrance con GGX NDF, Schlick Fresnel y un término de visibilidad correlacionado de GGX Smith con un término difuso de Lambert. Este modelo es el estándar del sector de facto en este momento. Para obtener más información detallada, consulte este artículo: Representación basada en la física, de Cook Torrance

Una alternativa al modelo de PBR Metalness-Roughness que se usa en Azure Remote Rendering es el modelo de PBR Specular-Glossiness. Este modelo puede representar una gama más amplia de materiales. Sin embargo, es más caro y normalmente no funciona bien para los casos en tiempo real. No siempre es posible realizar la conversión de Specular-Glossiness a Metalness-Roughness, ya que existen pares de valores (Diffuse, Specular) que no se pueden convertir a (BaseColor, Metalness). La conversión en la otra dirección es más sencilla y más precisa, ya que todos los pares de (BaseColor, Metalness) se corresponden con los pares (Diffuse, Specular) bien definidos.

Documentación de la API

Pasos siguientes