Udostępnij za pośrednictwem


Materiały PBR

Materiały PBR są jednym z obsługiwanych typów materiałów w usłudze Azure Remote Rendering. Są one używane do trójkątnych siatk, które powinny otrzymywać realistyczne oświetlenie. Chmury punktowe z drugiej strony nie mają wpływu na oświetlenie dynamiczne.

PBR oznacza Physically Based Rendering i oznacza, że materiał opisuje właściwości wizualne powierzchni w sposób fizycznie prawdopodobny, tak aby realistyczne wyniki są możliwe we wszystkich warunkach oświetlenia. Większość nowoczesnych aparatów gier i narzędzi do tworzenia zawartości obsługuje materiały PBR, ponieważ są one uważane za najlepsze przybliżenie rzeczywistych scenariuszy renderowania w czasie rzeczywistym.

Przykładowy model hełmu glTF renderowany przez ARR

Podstawową ideą fizycznego renderowania jest użycie właściwości BaseColor, Metalness i Roughness w celu emulowania szerokiej gamy rzeczywistych materiałów. Szczegółowy opis PBR wykracza poza zakres tego artykułu. Aby uzyskać więcej informacji o PBR, zobacz inne źródła.

Materiały PBR nie są jednak uniwersalnym rozwiązaniem. Istnieją materiały, które odzwierciedlają kolor inaczej w zależności od kąta widzenia. Na przykład niektóre tkaniny lub farby samochodowe. Tego rodzaju materiały nie są obsługiwane przez standardowy model PBR i nie są obecnie obsługiwane przez usługę Azure Remote Rendering. To ograniczenie obejmuje rozszerzenia PBR, takie jak cienkowarstwowe powierzchnie i Clear-Coat (w przypadku farb samochodowych).

Właściwości materiału PBR

Następujące właściwości materiału są uwidocznione w interfejsie API środowiska uruchomieniowego, na przykład w klasie C# PbrMaterial lub odpowiednio w klasie C++ PbrMaterial.

  • PbrFlags: Flagi funkcji misc można połączyć w tej masce bitów, aby włączyć następujące funkcje:

    • TransparentMaterial: W przypadku materiałów PBR istnieje tylko jedno ustawienie przezroczystości: jest włączone lub nie. Nieprzezroczystość jest definiowana przez kanał alfa koloru albedo. Po włączeniu bardziej złożoną metodę renderowania jest wywoływana w celu rysowania półprzezroczystych powierzchni. Usługa Azure Remote Rendering implementuje rzeczywistą przejrzystość niezależną od kolejności (OIT). Przezroczysta geometria jest kosztowna do renderowania. Jeśli potrzebujesz tylko otworów na powierzchni, na przykład w liściach drzewa, lepiej zamiast tego użyć wycinków alfa.

    Sfery renderowane z zerową do pełnej przezroczystości Zwróć uwagę na to, jak na powyższym obrazie większość sfer jest w pełni przezroczysta, ale odbicie jest nadal widoczne.

    Ważne

    Jeśli jakikolwiek materiał ma zostać przełączony z nieprzezroczystego na przezroczysty w czasie wykonywania, program renderujący musi użyć trybu renderowania TileBasedComposition. To ograniczenie nie ma zastosowania do materiałów, które są konwertowane jako przezroczyste materiały na początek.

    • UseVertexColor: Jeśli siatka zawiera vertex kolory i ta opcja jest włączona, kolor siatki vertex jest mnożony do elementów AlbedoColor i AlbedoMap. Domyślnie UseVertexColor jest wyłączona.
    • DoubleSided: Jeśli podwójna strona jest ustawiona na wartość true, trójkąty z tym materiałem są renderowane nawet wtedy, gdy kamera patrzy na plecy. W przypadku oświetlenia materiałów PBR jest również obliczane prawidłowo dla tylnych twarzy. Domyślnie ta opcja jest wyłączona. Zobacz też Single-sided rendering.
    • SpecularHighlights: umożliwia wyróżnianie specularne dla tego materiału. Domyślnie flaga SpecularHighlights jest włączona.
    • AlphaClipped: włącza twarde wycinki na piksel na podstawie wartości alfa poniżej wartości AlphaClipThreshold (patrz poniżej). To działa również w przypadku nieprzezroczystych materiałów.
    • FresnelEffect: Ta flaga materiału umożliwia działanie fresnela addytywnego na odpowiedni materiał. Wygląd efektu podlega innym parametrom FresnelEffectColor fresnel i FresnelEffectExponent wyjaśniono poniżej.
    • TransparencyWritesDepth: Jeśli flaga TransparencyWritesDepth jest ustawiona na materiale, a materiał jest przezroczysty, obiekty korzystające z tego materiału również przyczynią się do końcowego buforu głębokości. Zobacz flagę materiału PBR przezroczystą w następnej sekcji. Włączenie tej funkcji jest zalecane, jeśli przypadek użycia wymaga bardziej wiarygodnego ponownego projektu późnego etapu w pełni przezroczystych scen. W przypadku mieszanych nieprzezroczystych/przezroczystych scen to ustawienie może powodować nieprawdopodobne zachowanie ponownego projektu lub artefakty ponownego projektowania. Z tego powodu domyślne i zalecane ustawienie ogólnego przypadku użycia polega na wyłączeniu tej flagi. Zapisane wartości głębokości są pobierane z warstwy głębokości na piksel obiektu znajdującego się najbliżej aparatu.
  • AlbedoColor: ten kolor jest mnożony za pomocą innych kolorów, takich jak AlbedoMap kolory lubvertex. Jeśli przezroczystość jest włączona na materiale, kanał alfa służy do dostosowywania nieprzezroczystości, co 1 oznacza pełne nieprzezroczyste i 0 oznacza w pełni przezroczyste. Domyślny kolor albedo jest nieprzezroczystym białym.

    Uwaga

    Gdy materiał PBR jest w pełni przezroczysty, jak idealnie czysta powierzchnia szkła, nadal odzwierciedla środowisko. Jasne plamy, takie jak słońce, są nadal widoczne w odbiciu. Różni się to w przypadku materiałów kolorowych.

  • AlbedoMap: Tekstura 2D dla wartości albedo na piksel.

  • AlphaClipThreshold: Jeśli flaga AlphaClipped jest ustawiona we PbrFlags właściwości, wszystkie piksele, w których wartość alfa albedo jest niższa niż AlphaClipThreshold nie zostanie narysowana. Wycinki alfa można używać nawet bez włączania przezroczystości i jest znacznie szybsze renderowanie. Materiały przycięte alfa są nadal wolniejsze do renderowania niż w pełni nieprzezroczyste materiały, choć. Domyślnie wycinanie alfa jest wyłączone.

  • TexCoordScale i TexCoordOffset: Skala jest mnożona do współrzędnych tekstury UV, przesunięcie jest do niego dodawane. Można użyć do rozciągnięcia i przesunięcia tekstur. Domyślna skala to (1, 1), a przesunięcie to (0, 0).

  • FresnelEffectColor: Kolor fresnel używany do tego materiału. Ważne tylko wtedy, gdy flaga efektu fresnel została ustawiona na tym materiale (patrz powyżej). Ta właściwość steruje kolorem bazowym blasku fresnel (zobacz efekt fresnel, aby uzyskać pełne wyjaśnienie). Obecnie tylko wartości kanału RGB są ważne, a wartość alfa zostanie zignorowana.

  • FresnelEffectExponent: wykładnik fresnel używany dla tego materiału. Ważne tylko wtedy, gdy flaga efektu fresnel została ustawiona na tym materiale (patrz powyżej). Ta właściwość kontroluje rozprzestrzenianie się blasku fresnela. Wartość minimalna 0,01 powoduje rozłożenie całego obiektu. Maksymalna wartość 10,0 ogranicza blask tylko do najbardziej wypasowych krawędzi widocznych.

  • PbrVertexAlphaMode: określa sposób użycia kanału alfa kolorów wierzchołków. Dostępne są następujące tryby:

    • Occlusion: Wartość alfa reprezentuje wartość okluzji otoczenia i w związku z tym wpływa tylko na oświetlenie pośrednie z pola nieba.
    • LightMask: Wartość alfa służy jako współczynnik skalowania dla ogólnej ilości zastosowanego oświetlenia, co oznacza, że alfa może służyć do zaciemnienia obszarów. Ma to wpływ zarówno na oświetlenie pośrednie, jak i bezpośrednie.
    • Opacity: Alfa reprezentuje, jak nieprzezroczysty (1.0) lub przezroczysty (0.0) materiał jest.
  • NormalMap: Aby zasymulować szczegółowe szczegółowe informacje, można podać normalną mapę .

  • NormalMapScale: wartość skalarna, która skaluje normalną siłę mapy. Wartość 1,0 przyjmuje normalną mapę jak jest, a wartość 0 sprawia, że powierzchnia jest płaska. Wartości większe niż 1,0 przesadzają z normalną perturbacją mapy.

  • Roughness i RoughnessMap: Szorstkość określa, jak szorstka lub gładka jest powierzchnia. Szorstkie powierzchnie rozpraszają światło w większym kierunku niż gładkie powierzchnie, co sprawia, że odbicia są rozmyte, a nie ostre. Zakres wartości to od 0.0 do 1.0. Gdy Roughness równa 0.0się , odbicie będzie ostre. Gdy Roughness równa 0.5się , odbicie stanie się rozmyte. Jeśli zostanie podana zarówno wartość szorstkości, jak i mapa szorstkości, ostateczna wartość będzie produktem tych dwóch wartości.

  • Metalness i MetalnessMap: W fizyce ta właściwość odpowiada temu, czy powierzchnia jest przewodząca, czy dielektryczna. Materiały przewodzące mają różne właściwości refleksyjne i wydają się być refleksyjne bez koloru albedo. W materiałach PBR ta właściwość wpływa na to, ile powierzchnia odzwierciedla otaczające środowisko. Zakres wartości z zakresu od 0.0 do 1.0. Gdy metalność to 0.0, kolor albedo jest w pełni widoczny, a materiał wygląda jak plastik lub ceramika. Gdy metalowość to 0.5, wygląda jak malowany metal. Gdy metalność to 1.0, powierzchnia prawie całkowicie traci kolor albedo i odzwierciedla tylko otoczenie. Na przykład, jeśli metalness jest i roughness1.0 jest 0.0 to powierzchnia wygląda jak rzeczywiste lustro. Jeśli zostanie podana zarówno wartość metalowości, jak i mapa metalowości, ostateczna wartość będzie produktem tych dwóch elementów.

    Sfery renderowane z różnymi wartościami metalowości i szorstkości

    Na powyższym obrazie kula w prawym dolnym rogu wygląda jak prawdziwy materiał metalowy, lewy dolny wygląda jak ceramiczny lub plastikowy. Kolor albedo zmienia się również zgodnie z właściwościami fizycznymi. Wraz ze wzrostem szorstkości materiał traci ostrość odbicia.

  • AOMap i AOScale: Otoczenia okluzji sprawia, że obiekty z szczelinami wyglądają bardziej realistycznie, dodając cienie do okludowanych obszarów. Zakres wartości okluzji od 0.0 do , gdzie 0.0 oznacza ciemność (okluded) i 1.0 oznacza brak 1.0okluzji. Jeśli tekstura 2D jest dostarczana jako mapa okluzji, efekt jest włączony i AOScale działa jako mnożnik.

    Obiekt renderowany z okluzji otoczenia i bez

Przesłonięcia materiału kolorowego podczas konwersji

Podzbiór właściwości materiału koloru można zastąpić podczas konwersji modelu za pośrednictwem pliku zastępowania materiału. W poniższej tabeli przedstawiono mapowanie między właściwościami środowiska uruchomieniowego opisanymi powyżej i odpowiednią nazwą właściwości w pliku zastąpienia:

Nazwa właściwości materiału Nazwa właściwości w pliku zastępowania
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

Szczegóły techniczne

Usługa Azure Remote Rendering używa mikro-aspektu Cook-Torrance BRDF z GGX NDF, Schlick Fresnel i GGX Smith skorelowany termin widoczności z terminem rozproszonym Lambert. Ten model jest obecnie de facto standardem branżowym. Aby uzyskać bardziej szczegółowe informacje, zapoznaj się z tym artykułem: Renderowanie oparte fizycznie — Cook Torrance

Alternatywą dla modelu PBR Metalness-Roughness używanego w usłudze Azure Remote Rendering jest model PBR Specular-Glossiness. Ten model może reprezentować szerszy zakres materiałów. Jednak jest to droższe i zwykle nie działa dobrze w przypadku przypadków w czasie rzeczywistym. Nie zawsze jest możliwe konwertowanie ze specyfikacji połysku na metalness-Roughness , ponieważ istnieją pary wartości (dyfuzora, specular), których nie można przekonwertować na (BaseColor, Metalness). Konwersja w innym kierunku jest prostsza i bardziej precyzyjna, ponieważ wszystkie pary (BaseColor, Metalness) odpowiadają dobrze zdefiniowanym parom (rozproszonym, specular).

Dokumentacja interfejsu API

Następne kroki