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.
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.
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 oAlbedoColor
eAlbedoMap
. Por padrãoUseVertexColor
, 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, oSpecularHighlights
sinalizador está habilitado.AlphaClipped
: Permite recortes rígidos por pixel, com base no valor alfa estar abaixo do valor deAlphaClipThreshold
(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âmetrosFresnelEffectColor
de fresnel eFresnelEffectExponent
explicada abaixo.TransparencyWritesDepth
: Se aTransparencyWritesDepth
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 asAlbedoMap
vertex ou cores. Se a transparência é ativada em um material, o canal alfa é usado para ajustar a opacidade, com1
significado totalmente opaco e0
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 oAlphaClipped
sinalizador estiver definido naPbrFlags
propriedade, todos os pixels em que o valor alfa do albedo for menor do queAlphaClipThreshold
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
eTexCoordOffset
: 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
eRoughnessMap
: 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 é de0.0
até1.0
. QuandoRoughness
iguais0.0
, as reflexões serão nítidas. QuandoRoughness
iguais0.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
eMetalnessMap
: 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 de0.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, semetalness
é1.0
eroughness
é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.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
eAOScale
: A oclusão ambiente torna os objetos com fendas mais realistas, adicionando sombras às áreas ocluídas. O valor de oclusão varia de a1.0
, onde0.0
significa escuridão (ocluído) e1.0
significa ausência de0.0
oclusão. Se uma textura 2D é fornecida como um mapa de oclusão, o efeito é ativado eAOScale
atua como um multiplicador.
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
- Classe C# PbrMaterial
- C# RenderingConnection.CreateMaterial()
- Classe C++ PbrMaterial
- C++ RenderingConnection::CreateMaterial()