Compartilhar via


Materiais de PBR

Os materiais de PBR são um dos tipos de material compatíveis no Azure Remote Rendering. Eles são usados para malhas triangulares que devem receber iluminação realista. As nuvens de ponto, por outro lado, não são afetadas pela iluminação dinâmica.

PBR significa Physically Based Rendering e indica que o material descreve as propriedades visuais de uma superfície de maneira realmente plausível, de modo que os resultados realistas sejam possíveis em todas as condições de iluminação. A maioria dos mecanismos de jogo e ferramentas de criação de conteúdo modernos é compatível com os materiais de PBR porque são considerados a melhor aproximação de cenários reais para a renderização em tempo real.

Modelo de exemplo de capacete glTF renderizado por ARR

A ideia principal da renderização com base física é usar as propriedades BaseColor, Metalness e Roughness para emular uma ampla variedade de materiais do mundo real. A descrição detalhada do PBR não está no escopo deste artigo. Para saber mais sobre o PBR, confira outras fontes.

No entanto, os materiais de PBR não são uma solução universal. Há materiais que refletem a cor de modo diferente, dependendo do ângulo de exibição. Por exemplo, alguns tecidos ou pinturas de carros. Esses materiais não são tratados pelo modelo de PBR padrão e não têm suporte no Azure Remote Rendering no momento. Essa limitação inclui extensões de PBR, como Filme fino (superfícies de várias camadas) e Verniz (para pinturas de carros).

Propriedades do material de PBR

As propriedades de material a seguir são expostas na API de runtime, por exemplo, na classe PbrMaterial do C# ou na classe PbrMaterial do C++, respectivamente.

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

    • TransparentMaterial: para materiais de PBR, há somente uma configuração de transparência: habilitada ou desabilitada. A opacidade é definida pelo canal alfa da cor de albedo. Quando habilitada, um método de renderização mais complexo é invocado para desenhar superfícies semitransparentes. O Azure Remote Rendering implementa a OIT (transparência de ordem independente) verdadeira. A geometria transparente é cara para renderizar. Se você precisar apenas de espaços em uma superfície, por exemplo, para as folhas de uma árvore, será melhor usar o recorte alfa.

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

    Importante

    Se algum material precisar ser alternado de opaco para transparente no runtime, o renderizador deverá usar o modo de renderização TileBasedComposition. Essa limitação não se aplica aos materiais convertidos como materiais transparentes logo de início.

    • UseVertexColor se a malha contiver cores vertex e essa opção estiver habilitada, a cor vertex da malha será multiplicada por AlbedoColor e AlbedoMap. Por padrão, UseVertexColor está desabilitado.
    • DoubleSided: se a bilateralidade estiver definida como verdadeira, os triângulos com esse material serão renderizados, mesmo se a câmera estiver apontada para as faces traseiras deles. A iluminação de materiais de PBR também é calculada corretamente para as partes traseiras. Por padrão, essa opção está desabilitada. Consulte também Single-sided rendering.
    • SpecularHighlights: habilita os realces especulares para este material. Por padrão, o sinalizador SpecularHighlights está habilitado.
    • AlphaClipped: permite cortes rígidos em uma base por pixel, com base no valor alfa abaixo do valor de AlphaClipThreshold (veja abaixo). Isso também funciona para materiais opacos.
    • FresnelEffect: este sinalizador de material permite o efeito de Fresnel aditivo no respectivo material. A aparência do efeito é regida pelos outros parâmetros de Fresnel FresnelEffectColor e FresnelEffectExponent explicados abaixo.
    • TransparencyWritesDepth: se o sinalizador TransparencyWritesDepth estiver definido no material e o material for transparente, os objetos que usarem esse material também contribuirão para o buffer de profundidade final. Confira o sinalizador transparente do material PBR na próxima seção. É recomendável habilitar esse recurso se o caso de uso precisa de uma reprojeção de estágio tardio mais plausível de cenas totalmente transparentes. Para cenas mistas opacas/transparentes, essa configuração pode causar um 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 obtidos da camada de profundidade por pixel do objeto mais próximo à câmera.
  • AlbedoColor: essa cor é multiplicada por outras cores, como AlbedoMap ou vertexcores. Se a transparência estiver habilitada em um material, o canal alfa será usado para ajustar a opacidade, sendo 1 totalmente opaco e 0 totalmente transparente. A cor albedo padrão é branca opaca.

    Observação

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

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

  • AlphaClipThreshold: se o sinalizador AlphaClipped for definido na propriedade PbrFlags, nenhum dos pixels em que o valor alfa de albedo for menor do que AlphaClipThreshold serão desenhados. O recorte alfa pode ser usado mesmo sem habilitar a transparência e é muito mais rápido para renderizar. No entanto, os materiais com recorte alfa ainda são mais lentos para renderizar do que os materiais totalmente opacos. Por padrão, o recorte alfa fica desabilitado.

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

  • FresnelEffectColor: a cor de Fresnel utilizada para esse material. É importante apenas quando o sinalizador de efeito de Fresnel é definido nesse material (veja acima). Essa propriedade controla a cor base do brilho Fresnel (confira Efeito Fresnel para ver uma explicação completa). No momento, apenas os valores de canal RGB são importantes e o valor alfa será ignorado.

  • FresnelEffectExponent: o expoente de Fresnel utilizado para esse material. É importante apenas quando o sinalizador de efeito de Fresnel é definido nesse material (veja acima). Essa propriedade controla o espalhamento do brilho de Fresnel. O valor mínimo de 0,01 causa um espalhamento em todo o objeto. O valor máximo de 10,0 restringe o brilho apenas às bordas mais adornadas visíveis.

  • 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 do skybox.
    • LightMask: o valor alfa serve como um fator de escala para a quantidade geral de iluminação aplicada, o que significa que o alfa pode ser usado para escurecer áreas. Isso afeta a iluminação indireta e 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 usa o normal do mapa normal 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 irregularidade define o nível de aspereza ou suavidade de uma superfície. Superfícies ásperas dispersam a luz em mais direções que as suaves, o que torna os reflexos desfocados em vez de nítidos. O intervalo de valores é de 0.0 a 1.0. Quando Roughness é igual a 0.0, os reflexos são nítidos. Quando Roughness é igual a 0.5, os reflexos são desfocados. Se um valor de irregularidade e um mapa de irregularidade forem fornecidos, o valor final será o produto dos dois.

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

    Esferas renderizadas com valores de irregularidade e metal diferentes

    Na imagem acima, a esfera no canto inferior direito parece um material de metal real, e a do canto inferior esquerdo parece com cerâmica ou plástico. A cor de albedo também muda de acordo com as propriedades físicas. Com o aumento da irregularidade, o material perde a nitidez de reflexo.

  • AOMap e AOScale: a oclusão ambiente torna objetos com fendas mais realistas adicionando sombras a áreas oclusas. O valor de oclusão varia de 0.0 a 1.0, em que 0.0 significa escuro (ocluído) e 1.0 significa que não há oclusões. Se uma textura 2D for fornecida como um mapa de oclusão, o efeito será habilitado e AOScale agirá como um multiplicador.

    Um objeto renderizado com e sem oclusão ambiente

Substituições de material de cor durante a conversão

Um subconjunto de propriedades de material de cor pode ser substituído durante a conversão de modelo por meio do arquivo de substituição de material. A tabela a seguir mostra o mapeamento entre as propriedades de runtime 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

O Azure Remote Rendering usa o BRDF de microfaceta Cook-Torrance com GGX NDF, Schlick Fresnel e um termo de visibilidade correlacionado GGX Smith com um termo de difusão Lambert. Esse modelo é o padrão do setor no momento. Para ver mais detalhes, veja o artigo Renderização baseada em física – Cook Torrance.

Uma alternativa ao modelo de PBR Metal – Irregularidade usado no Azure Remote Rendering é o modelo de PBR Especular – Brilho. Esse modelo pode representar uma gama mais ampla de materiais. No entanto, ele é mais caro e geralmente não funciona bem para casos em tempo real. Nem sempre é possível converter de Especular – Brilho para Metal – Irregularidade, pois há pares de valores (Difusão, Especular) que não podem ser convertidos em (BaseColor, Metal). A conversão na outra direção é mais simples e mais precisa, já que todos os pares (BaseColor, Metal) correspondem aos pares bem definidos (Difusão, Especular).

Documentação da API

Próximas etapas