Partilhar via


Materiais PBR

Os materiais PBR são um dos tipos de material suportados na Renderização Remota do Azure. Eles são usados para malhas triangulares que devem receber iluminação realista. As nuvens de pontos, por outro lado, não são afetadas pela iluminação dinâmica.

PBR significa Physically Based Rendering e significa que o material descreve as propriedades visuais de uma superfície de uma forma fisicamente plausível, de modo que resultados realistas são possíveis em todas as condições de iluminação. A maioria dos mecanismos de jogos modernos e ferramentas de criação de conteúdo suportam materiais PBR porque são considerados a melhor aproximação de cenários do mundo real para renderização em tempo real.

Modelo de amostra de capacete glTF renderizado por ARR

A ideia central da renderização baseada fisicamente é usar as propriedades BaseColor, Metalness e Roughness para emular uma ampla gama de materiais do mundo real. Uma descrição detalhada da PBR está além do escopo deste artigo. Para obter mais informações sobre PBR, consulte outras fontes.

No entanto, os materiais PBR não são uma solução universal. Existem materiais que refletem a cor de forma diferente dependendo do ângulo de visão. Por exemplo, alguns tecidos ou tintas de carros. Esses tipos de materiais não são manipulados pelo modelo PBR padrão e atualmente não são suportados pela Renderização Remota do Azure. Esta limitação inclui extensões PBR, como Thin-Film (superfícies multicamadas) e Clear-Coat (para tintas de automóveis).

Propriedades do material PBR

As seguintes propriedades de material são expostas na API de tempo de execução, por exemplo, na classe C# PbrMaterial ou na classe C++ PbrMaterial, respectivamente.

  • PbrFlags: Sinalizadores de recursos diversos podem ser combinados nesta máscara de bits para habilitar os seguintes recursos:

    • TransparentMaterial: Para materiais PBR, há apenas uma configuração de transparência: está habilitado ou não. A opacidade é definida pelo canal alfa da cor do albedo. Quando habilitado, um método de renderização mais complexo é invocado para desenhar superfícies semitransparentes. A Renderização Remota do Azure implementa a transparência independente de ordem verdadeira (OIT). A geometria transparente é cara de renderizar. Se você só precisa de buracos em uma superfície, por exemplo, para as folhas de uma árvore, é melhor usar o corte alfa.

    Esferas renderizadas com zero a total transparência Observe na imagem acima, como a esfera mais à direita é totalmente transparente, mas o reflexo ainda é visível.

    Importante

    Se algum material deve ser alternado de opaco para transparente em tempo de execução, o renderizador deve usar o modo de renderização TileBasedComposition. Esta limitação não se aplica aos materiais que são convertidos como materiais transparentes, para começar.

    • UseVertexColor: Se a malha contiver vertex cores e esta opção estiver ativada, a cor das vertex malhas será multiplicada para o AlbedoColor e AlbedoMap. Por padrão UseVertexColor , está desabilitado.
    • DoubleSided: Se a dupla face estiver definida como verdadeira, os triângulos com este material são renderizados mesmo que a câmara esteja a olhar para as suas faces traseiras. Para materiais PBR, a iluminação também é calculada adequadamente para faces traseiras. Por padrão, essa opção está desativada. Consulte também Single-sided rendering.
    • SpecularHighlights: Permite destaques especulares para este material. Por padrão, o SpecularHighlights sinalizador está habilitado.
    • AlphaClipped: Permite recortes rígidos por pixel, com base no valor alfa estar abaixo do valor de AlphaClipThreshold (veja abaixo). Isso também funciona para materiais opacos.
    • FresnelEffect: Esta bandeira de material permite o efeito de fresnel aditivo sobre o respetivo material. A aparência do efeito é regida pelos outros parâmetros FresnelEffectColor de fresnel e FresnelEffectExponent explicada abaixo.
    • TransparencyWritesDepth: Se a TransparencyWritesDepth bandeira estiver fixada no material e o material for transparente, os objetos que utilizam este material também contribuirão para o buffer de profundidade final. Consulte o sinalizador de material PBR transparente na próxima seção. A ativação desse recurso é recomendada se o seu caso de uso precisar de uma reprojeção de estágio final mais plausível de cenas totalmente transparentes. Para cenas mistas opacas/transparentes, essa configuração pode introduzir comportamento de reprojeção implausível ou artefatos de reprojeção. Por esse motivo, a configuração padrão e recomendada para o caso de uso geral é desabilitar esse sinalizador. Os valores de profundidade gravados são retirados da camada de profundidade por pixel do objeto mais próximo da câmera.
  • AlbedoColor: Esta cor é multiplicada por outras cores, como as AlbedoMap vertex ou cores. Se a transparência é ativada em um material, o canal alfa é usado para ajustar a opacidade, com 1 significado totalmente opaco e 0 significado totalmente transparente. A cor padrão do albedo é branco opaco.

    Nota

    Quando um material PBR é totalmente transparente, como uma superfície de vidro perfeitamente limpa, ele ainda reflete o meio ambiente. Pontos brilhantes como o sol ainda são visíveis no reflexo. Isso é diferente para materiais de cor.

  • AlbedoMap: Uma textura 2D para valores de albedo por pixel.

  • AlphaClipThreshold: Se o AlphaClipped sinalizador estiver definido na PbrFlags propriedade, todos os pixels em que o valor alfa do albedo for menor do que AlphaClipThreshold não serão desenhados. O recorte alfa pode ser usado mesmo sem permitir a transparência e é muito mais rápido de renderizar. No entanto, os materiais cortados alfa ainda são mais lentos de renderizar do que os materiais totalmente opacos. Por padrão, o recorte alfa está desativado.

  • TexCoordScale e TexCoordOffset: A escala é multiplicada nas coordenadas de textura UV, o deslocamento é adicionado a ela. Pode ser usado para esticar e deslocar as texturas. A escala padrão é (1, 1) e o deslocamento é (0, 0).

  • FresnelEffectColor: A cor fresnel utilizada para este material. Apenas importante quando a bandeira do efeito fresnel foi colocada neste material (ver acima). Esta propriedade controla a cor base do brilho fresnel (veja o efeito fresnel para uma explicação completa). Atualmente, apenas os valores do canal RGB são importantes e o valor alfa será ignorado.

  • FresnelEffectExponent: O expoente de fresnel utilizado para este material. Apenas importante quando a bandeira do efeito fresnel foi colocada neste material (ver acima). Esta propriedade controla a propagação do brilho fresnel. O valor mínimo 0,01 causa uma dispersão por todo o objeto. O valor máximo de 10,0 restringe o brilho apenas às bordas mais visíveis do pastoreio.

  • PbrVertexAlphaMode: Determina como o canal alfa de cores de vértice é usado. Os seguintes modos são fornecidos:

    • Occlusion: O valor alfa representa um valor de oclusão ambiente e, portanto, afeta apenas a iluminação indireta da caixa do céu.
    • LightMask: O valor alfa serve como um fator de escala para a quantidade total de iluminação aplicada, o que significa que o alfa pode ser usado para escurecer áreas. Isso afeta tanto a iluminação indireta quanto a direta.
    • Opacity: O alfa representa o quão opaco (1.0) ou transparente (0.0) é o material.
  • NormalMap: Para simular detalhes refinados, um mapa normal pode ser fornecido.

  • NormalMapScale: Um valor escalar que dimensiona a força normal do mapa. Um valor de 1,0 toma o normal do mapa como está, um valor de 0 faz com que a superfície pareça plana. Valores maiores que 1,0 exageram a perturbação normal do mapa.

  • Roughness e RoughnessMap: A rugosidade define o quão rugosa ou lisa é a superfície. Superfícies ásperas espalham a luz em mais direções do que superfícies lisas, o que torna os reflexos embaçados em vez de nítidos. O intervalo de valores é de 0.0 até 1.0. Quando Roughness iguais 0.0, as reflexões serão nítidas. Quando Roughness iguais 0.5, os reflexos ficarão embaçados. Se forem fornecidos um valor de rugosidade e um mapa de rugosidade, o valor final será o produto dos dois.

  • Metalness e MetalnessMap: Em física, esta propriedade corresponde ao facto de uma superfície ser condutora ou dielétrica. Os materiais condutores têm diferentes propriedades reflexivas, e tendem a ser reflexivos sem cor de albedo. Em materiais PBR, essa propriedade afeta o quanto uma superfície reflete o ambiente ao redor. Os valores variam de 0.0 até 1.0. Quando a metalidade é 0.0, a cor do albedo é totalmente visível, e o material se parece com plástico ou cerâmica. Quando a metalidade é 0.5, parece metal pintado. Quando a metalidade é 1.0, a superfície perde quase completamente sua cor de albedo, e reflete apenas o ambiente. Por exemplo, se metalness é 1.0 e roughness é 0.0 , então uma superfície parece um espelho do mundo real. Se forem fornecidos um valor de metalidade e um mapa de metalidade, o valor final será o produto dos dois.

    Esferas rebocadas com diferentes valores de metalidade e rugosidade

    Na imagem acima, a esfera no canto inferior direito parece um material de metal real, a parte inferior esquerda parece cerâmica ou plástico. A cor do albedo também está mudando de acordo com as propriedades físicas. Com o aumento da rugosidade, o material perde a nitidez de reflexão.

  • AOMap e AOScale: A oclusão ambiente torna os objetos com fendas mais realistas, adicionando sombras às áreas ocluídas. O valor de oclusão varia de a 1.0, onde 0.0 significa escuridão (ocluído) e 1.0 significa ausência de 0.0 oclusão. Se uma textura 2D é fornecida como um mapa de oclusão, o efeito é ativado e AOScale atua como um multiplicador.

    Um objeto renderizado com e sem oclusão ambiente

O material de cor substitui durante a conversão

Um subconjunto de propriedades de material de cor pode ser substituído durante a conversão do modelo por meio do arquivo de substituição de material. A tabela a seguir mostra o mapeamento entre as propriedades de tempo de execução documentadas acima e o nome da propriedade correspondente no arquivo de substituição:

Nome da propriedade do material Nome da propriedade no arquivo de substituição
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

Detalhes técnicos

A Renderização Remota do Azure usa a microfaceta BRDF Cook-Torrance com GGX NDF, Schlick Fresnel e um termo de visibilidade correlacionado GGX Smith com um termo difuso Lambert. Este modelo é o padrão de facto da indústria no momento. Para obter detalhes mais detalhados, consulte este artigo: Renderização com base física - Cook Torrance

Uma alternativa ao modelo PBR Metalness-Roughness usado na Renderização Remota do Azure é o modelo PBR Specular-Glossiness . Este modelo pode representar uma gama mais ampla de materiais. No entanto, é mais caro e geralmente não funciona bem para casos em tempo real. Nem sempre é possível converter de Specular-Glossiness para Metalness-Roughness, pois existem pares de valores (Difusos, Especulares) que não podem ser convertidos em (BaseColor, Metalness). A conversão na outra direção é mais simples e precisa, uma vez que todos os pares (BaseColor, Metalness) correspondem a pares bem definidos (Difuso, Especular).

Documentação da API

Próximos passos