Wie der NDF wirklich definiert wird.
Eine der wichtigsten Bestandteile einer Mikrofacet-BRDF ist ihre Normalverteilungsfunktion (NDF), die die mikroskopische Form der Oberfläche statistisch als Verteilung der Mikrofacet-Orientierungen beschreibt. Damit ein NDF physikalisch sinnvoll ist, sollte es bestimmte Bedingungen erfüllen, wie z.B. die Normalisierung. Aber der richtige Weg, einen NDF zu normalisieren, ist nicht das, was man intuitiv denken könnte und ich möchte erklären, warum.
Eine NDF ist eine Funktion, die grob gesagt die „Wahrscheinlichkeit“ angibt, dass ein Micro-Facet in eine bestimmte Richtung ausgerichtet wird. Im BRDF dient es als Gewichtungsfunktion, um die Helligkeit von Reflexionen zu skalieren, aber der NDF ist grundsätzlich eine geometrische Eigenschaft der Oberfläche und wir sollten in der Lage sein, sie so zu verstehen, ohne Bezug auf die Lichstreuung.
Da es eine Funktion der Richtung ist und Einheiten des inversen Raumwinkels hat, erscheint es natürlich, den NDF als Wahrscheinlichkeitsdichte über dem Raumwinkel zu betrachten. Formal, wenn wir eine Richtung (Einheitsvektor) h in der normalen Hemisphäre haben und ein kleines Stück Raumwinkel dωh, die eine Reihe von Richtungen nahe h darstellen, dann gibt sie die Wahrscheinlichkeit an, dass ein Micro-Facet eine Normal innerhalb von dωh is D(h)dωh hat, wobei D(h) NDF darstellt.
Da die Wahrscheinlichkeit, dass sich die Micro-Facet Normal irgendwo in der normalen Hemisphäre befindet, 100% betragen sollte, sollte das Integral des NDF über die gesamte normale Hemisphäre 1 sein:
∫Ω D(h)dωh = 1
Scheint einfach genug zu sein oder? Außer, dass es falsch ist. Wenn Sie einen Standard NDF, wie z.B. die Blinn-Phong, Beckmann oder GGX Distribution in das obige Integral einstecken, wird das Ergebnis nicht in der Regel 1 sein. Bei der Beckmann-Verteilung und m = 0,5m = 0,5 ergibt sich beispielsweise ein Integral von etwa 1,113. Testen Sie es in ihrem Lieblings-Computer-Algebra-System aus.
Es stellt sich heraus, dass die korrekte Bedingung für die Normalisierung eines NDFs Folgendes ist:
∫Ω D(h)(n⋅h)dωh = 1
Wieder können Sie dies mit ihrem Lieblings-NDF versuchen und sehen, dass es zu 1 kommt, wie es sollte.
Wenn Sie schon viel über BRDFs und Radiometrie gelesen haben, wurden Sie mit großer Wahrscheinlichkeit bereits mit den extra n⋅h Faktor, also die „projizierte Fläche“, konfrontiert. Tatsächlich zeigt er sich als Umrechnungsfaktor zwischen Makrofläche, ausgerichtet auf n und Microfacet-Fläche, ausgerichtet auf h.
Wenn dAh ein Microfacet mit einem Normal h ist, dann ist seine Projektion auf die Makrooberfläche dA=(n⋅h)dAh.
Es scheint also, dass der NDF nicht nur eine Wahrscheinlichkeitsdichte über dem Raumwinkel ist, sondern auch etwas mit der Fläche zu tun hat, nämlich zwei verschiedene Flächenmaße: Makro- und Mikrobereich. Also, was ist es wirklich?
Du hast einen geheimen Bereich gefunden.
Das GGX Paper Microfacet Models for Refraction through Rough Surfaces von Walter et al. hat die Antwort. Ihnen zufolge gehorcht die NDF der Gleichung:
dAh=D(h)dωh A
wobei A ein Fleck der Makrooberfläche ist, der klein genug ist, um als flach angesehen zu werden, aber viel größer als eine einzelne Microfacet ist und dAh ist die Gesamtfläche aller Microfacets innerhalb von A, die Normals innerhalb von dωh haben.
Aus dieser Sicht ist der NDF überhaupt keine Wahrscheinlichkeitsdichte. Vielmehr ist es die Dichte des Mikrobereichs über dem gemeinsamen Bereich von Makro-Area und Raumwinkel. Die Flächeneinheiten heben sich auf, so dass der NDF immer noch Einheiten mit umgekehrten Raumwinkel hat, aber die Tatsache, dass es sich um eine Fläche handelt, ist erforderlich, um sie richtig zu verstehen und zu begründen.
Die Normalisierungsbedingung kann dann aus der obigen Gleichung abgeleitet werden: nach einer kleinen Fummelei erhalten wir
A1∫(n⋅h)dAh=∫ΩD(h)(n⋅h)dωh
Das Integral auf der linken Seite wird über die Fläche aller Microfacets im Patch und das auf der rechten Seite über den Raumwinkel der normalen Hemisphäre gemacht. Wenn wir diese Gleichung auf 1 setzen, sagen wir, dass die gesamte projizierte Fläche aller Microfacets gleich der Fläche des Makrosurface-Patches sein sollte. Mit anderen Worten, es gibt genau so viele Microfacets wie nötig, um die Makrooberfläche abzudecken, ohne Löcher oder Überlappungen. Die Normalisierungsbedingung auf dem NDF stellt sicher, dass sie mit diesem Bild übereinstimmt.
Walter et al. formulieren eine stärkere Bedingung: für jede Richtung v, sollten wir Folgendes bekommen:
∫ΩD(h)(v⋅h)dωh=n⋅v
Daraus folgt im Sonderfall v = n. Der allgemeine Zustand stellt sicher, dass die NDF mit der vielfältigen Mikrooberfläche übereinstimmt, nicht nur mit einer Triangle Soup. Die Grenzen der Mikrooberfläche müssen mit denen der Makrooberfläche übereinstimmen.
Übrigens habe ich hier angenommen, dass Microfacets-Normals immer in der normalen Heimsphäre liegen, was die Mikrooberfläche zu einem Höhenfeld macht. Das ist praktisch, aber nicht unbedingt notwendig. Für eine allgemeine 3D-Mikrooberfläche müssen sie nur alle Integrale von der Hemisphäre auf die gesamte Kugel ausdehnen. Beachten Sie, dass alle Dot-Produkte
ungeklemmt sind und dass viele Standard-NDFs wie die Blinn-Phong, Beckmann und GGX-Distributionen in der antinormalen Hemisphäre Null sind.
Die Tatsache, dass ein NDF nicht nur eine Wahrscheinlichkeitsdichte von Microfacet-Normals über dem Raumwinkel ist und dass es in seiner Normalisierung einen n⋅h benötigt, scheint nicht sehr bekannt zu sein. Es hat mich sicherlich einige Zeit verwirrt und selbst das Real Time Rendering wird dadurch leider etwas falsch.