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.
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.
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 porAlbedoColor
eAlbedoMap
. 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 sinalizadorSpecularHighlights
está habilitado.AlphaClipped
: permite cortes rígidos em uma base por pixel, com base no valor alfa abaixo do valor deAlphaClipThreshold
(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 FresnelFresnelEffectColor
eFresnelEffectExponent
explicados abaixo.TransparencyWritesDepth
: se o sinalizadorTransparencyWritesDepth
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, comoAlbedoMap
ou vertexcores. Se a transparência estiver habilitada em um material, o canal alfa será usado para ajustar a opacidade, sendo1
totalmente opaco e0
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 sinalizadorAlphaClipped
for definido na propriedadePbrFlags
, nenhum dos pixels em que o valor alfa de albedo for menor do queAlphaClipThreshold
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
eTexCoordOffset
: 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
eRoughnessMap
: 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 é de0.0
a1.0
. QuandoRoughness
é igual a0.0
, os reflexos são nítidos. QuandoRoughness
é igual a0.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
eMetalnessMap
: 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 de0.0
a1.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, semetalness
for1.0
eroughness
for0.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.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
eAOScale
: a oclusão ambiente torna objetos com fendas mais realistas adicionando sombras a áreas oclusas. O valor de oclusão varia de0.0
a1.0
, em que0.0
significa escuro (ocluído) e1.0
significa que não há oclusões. Se uma textura 2D for fornecida como um mapa de oclusão, o efeito será habilitado eAOScale
agirá como um multiplicador.
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
- Classe PbrMaterial do C#
- RenderingConnection.CreateMaterial() do C#
- Classe PbrMaterial do C++
- RenderingConnection::CreateMaterial() do C++