Mipmap-Fehler
- Jens Strumberg
- Beiträge: 2185
- Registriert: 09.04.2003 16:13:19
- Wohnort: Bochum
Hallo.
Ich habe im Betrachter folgendes Problem bei der Texturdarstellung:
Ich habe die Tage die Werkstatthalle von Oberhausen-Osterfeld als LOD-2-Objekt gebaut. Wenn ich mir das Ergebnis jetzt im Betrachter angucke kommt es je nach Sichtwinkel zu weißen Schummerungen an den Kanten des Daches.
Schaue ich orthogonal auf das Dach sind diese nicht sichtbar, je mehr ich den Sichtwinkel in die horizontale ändere tritt der Fehler verstärkt auf. Ein Artefakt basierend auf Mipmaping sollte es nicht sein, da die 1x1, 2x2 und 4x4 Grafiken alle die Farbe des Daches haben. Auch die Normalenvektoren stehen richtig.
Schöne Grüße,
Jens
Ich habe im Betrachter folgendes Problem bei der Texturdarstellung:
Ich habe die Tage die Werkstatthalle von Oberhausen-Osterfeld als LOD-2-Objekt gebaut. Wenn ich mir das Ergebnis jetzt im Betrachter angucke kommt es je nach Sichtwinkel zu weißen Schummerungen an den Kanten des Daches.
Schaue ich orthogonal auf das Dach sind diese nicht sichtbar, je mehr ich den Sichtwinkel in die horizontale ändere tritt der Fehler verstärkt auf. Ein Artefakt basierend auf Mipmaping sollte es nicht sein, da die 1x1, 2x2 und 4x4 Grafiken alle die Farbe des Daches haben. Auch die Normalenvektoren stehen richtig.
Schöne Grüße,
Jens
- Carsten Hölscher
- Administrator
- Beiträge: 33512
- Registriert: 04.07.2002 00:14:42
- Wohnort: Braunschweig
- Kontaktdaten:
Das ist 99,9% ein Mipmap-Problem. Schalte mal den Mipmap-Test an, dann siehst Du ,welcher Mipmap-Level dort zum Einsatz kommt. Ich tippe, die Texturen sind zu knapp belegt, also sehr scharf an den Rändern ausgerichtet. So rutscht dann bei den Mipmaps etwas von den nachbarpixeln mit rein. Es wäre keine Überraschung, wenn die nachbarbereiche auf der Textur dort ca. weiß sind
Carsten
Carsten
- Jens Strumberg
- Beiträge: 2185
- Registriert: 09.04.2003 16:13:19
- Wohnort: Bochum
- Carsten Hölscher
- Administrator
- Beiträge: 33512
- Registriert: 04.07.2002 00:14:42
- Wohnort: Braunschweig
- Kontaktdaten:
Mipmaps werden benutzt (also ggf. erzeugt, wenn nicht in der dds-Datei vorhanden), wenn der Mipmap-Wert auf 0 steht. Bei 1 wird ohne Mipmaps gearbeitet, bei 2, 3, 4 usw. nur die ersten 2, 3, 4,... Mipmapstufen.
Vergrößere doch einfach mal die Dachbereiche auf der textur in den weißen Bereich rein.
Kannst mir auch mal schicken das ganze - dann bereite ich das noch mit Bildern so auf, daß man es gut nachvollziehen kann.
(bish hier war's ein beitrag vom 10.06., der beim Trennen des Thema verloren gegangen war)
Also zur Analyse von Jens' Halle. Solche Farbverschmierungen sind eigentlich immer Mipmap-Probleme. Das muß man halt erkennen. Den Rest kann man z.B. folgermaßen analysieren:
Die Halle in der Problemansicht mit den verfärbten Dachkanten:
In der Mipmaps-Ansicht sieht man, daß der Fehler mit der gelben Stufe korrespondiert.
Das ist also die 64x64er Mipmapstufe. Schaut man sich also mal die 64er Stufe an, hier in Originalgröße:
Ist immer wieder erstaunlich, wie klein die benutzten Texturen sind. Vergrößert man die Textur (nur unterer Ausschnitt), sieht man das Problem: Durch die Mipmaperstellung mischt sich unten weiß mit rein.
Ich habe sicherheitshalber mal nen 1 Pixel lila-Streifen drüber gemalt (hier im Bild nur auf der rechten Seite, um den Unterschied zu zeigen), und schon wird der Fehler lila statt weiß.
Also man könnte die Textur in der 64er Stufe manuell bearbeiten, indem man das Dach dort einen Pixel breiter zeichnet oder man läßt in der Ausgangstextur etwas mehr Reserve an den Rändern.
Carsten
Vergrößere doch einfach mal die Dachbereiche auf der textur in den weißen Bereich rein.
Kannst mir auch mal schicken das ganze - dann bereite ich das noch mit Bildern so auf, daß man es gut nachvollziehen kann.
(bish hier war's ein beitrag vom 10.06., der beim Trennen des Thema verloren gegangen war)
Also zur Analyse von Jens' Halle. Solche Farbverschmierungen sind eigentlich immer Mipmap-Probleme. Das muß man halt erkennen. Den Rest kann man z.B. folgermaßen analysieren:
Die Halle in der Problemansicht mit den verfärbten Dachkanten:
In der Mipmaps-Ansicht sieht man, daß der Fehler mit der gelben Stufe korrespondiert.
Das ist also die 64x64er Mipmapstufe. Schaut man sich also mal die 64er Stufe an, hier in Originalgröße:
Ist immer wieder erstaunlich, wie klein die benutzten Texturen sind. Vergrößert man die Textur (nur unterer Ausschnitt), sieht man das Problem: Durch die Mipmaperstellung mischt sich unten weiß mit rein.
Ich habe sicherheitshalber mal nen 1 Pixel lila-Streifen drüber gemalt (hier im Bild nur auf der rechten Seite, um den Unterschied zu zeigen), und schon wird der Fehler lila statt weiß.
Also man könnte die Textur in der 64er Stufe manuell bearbeiten, indem man das Dach dort einen Pixel breiter zeichnet oder man läßt in der Ausgangstextur etwas mehr Reserve an den Rändern.
Carsten
Zuletzt geändert von Carsten Hölscher am 12.06.2007 00:56:53, insgesamt 1-mal geändert.
- Rolf Reichardt
- Beiträge: 663
- Registriert: 11.11.2003 08:27:07
- Wohnort: Berlin
- Kontaktdaten:
Ich versuche gerade, mit dem Nvidia-dds-Plugin für Photoshop 6.0 eine dds-Datei zu erstellen.
Unten sieht man, dass es funktioniert. Dann habe ich die Textur nochmals geändert, und wollte sie wiederum als dds speichern. Jetzt klappt es es nicht mehr, siehe Screenshot oberes Fenster. Öffne ich die Dateien mit ddsview, sagt er in beiden Fällen in der Statusleiste "1024x1024 (mipmap 1/5), 32 bpp +Alpha". Was könnte ich da falsch gemacht haben?
Grüße
Rolf
Edit: Gib mir ein "s"
Unten sieht man, dass es funktioniert. Dann habe ich die Textur nochmals geändert, und wollte sie wiederum als dds speichern. Jetzt klappt es es nicht mehr, siehe Screenshot oberes Fenster. Öffne ich die Dateien mit ddsview, sagt er in beiden Fällen in der Statusleiste "1024x1024 (mipmap 1/5), 32 bpp +Alpha". Was könnte ich da falsch gemacht haben?
Grüße
Rolf
Edit: Gib mir ein "s"
Zuletzt geändert von Rolf Reichardt am 19.06.2007 18:32:42, insgesamt 1-mal geändert.
Tradition ist die Weitergabe des Feuers, nicht die Anbetung der Asche!
Gustav Mahler (1860-1911)
Gustav Mahler (1860-1911)
- Carsten Hölscher
- Administrator
- Beiträge: 33512
- Registriert: 04.07.2002 00:14:42
- Wohnort: Braunschweig
- Kontaktdaten:
Noch ein wichtiger Hinweis zum Thema Mipmap:
Bisher war die anisotrope Filterung im Betrachter auch aus, wenn man sie ausgewählt hat. grund war schlichtweg, daß noch zusätzlich ein Parameter gesetzt werden muß, was die DirectX-Doku aber an der Stelle, wo man es wissen müßte, nicht erwähnt. Ich bin eben über Umwege drauf gestoßen.
Es betrifft die Effekte beim schrägen Draufschauen. Also im Extremfall sowas wie das hier, wo im oberen Bild die Mipmaps sehr schnell "entarten":
Unten ist's ohne Mipmaps, dann mit den bekannten Flimmereffekten bei Bewegung.
Bei korrekt eingestellten Filtern (und Grakas, die das unterstützen), ist der Fehler deutlich entschärft. Zwar sind immer noch leichte Mipmap-Fehler zu erkennen, aber es sieht fast so aus wie auf dem unteren Bild, ohne die Flimmerprobleme. Betrachter-Update mit passend eingerichteten Defaultwerten folgt dann in Kürze. Ob's auch bei Problemen wie bei Jens oben hilft, muß man noch mal testen.
Auf die Wahl der Texturgröße hat's übrigens keinen Einfluß, also es wird weiterhin für jedes Pixel derselbe Mipmap-Level wie bisher benutzt.
Carsten
Bisher war die anisotrope Filterung im Betrachter auch aus, wenn man sie ausgewählt hat. grund war schlichtweg, daß noch zusätzlich ein Parameter gesetzt werden muß, was die DirectX-Doku aber an der Stelle, wo man es wissen müßte, nicht erwähnt. Ich bin eben über Umwege drauf gestoßen.
Es betrifft die Effekte beim schrägen Draufschauen. Also im Extremfall sowas wie das hier, wo im oberen Bild die Mipmaps sehr schnell "entarten":
Unten ist's ohne Mipmaps, dann mit den bekannten Flimmereffekten bei Bewegung.
Bei korrekt eingestellten Filtern (und Grakas, die das unterstützen), ist der Fehler deutlich entschärft. Zwar sind immer noch leichte Mipmap-Fehler zu erkennen, aber es sieht fast so aus wie auf dem unteren Bild, ohne die Flimmerprobleme. Betrachter-Update mit passend eingerichteten Defaultwerten folgt dann in Kürze. Ob's auch bei Problemen wie bei Jens oben hilft, muß man noch mal testen.
Auf die Wahl der Texturgröße hat's übrigens keinen Einfluß, also es wird weiterhin für jedes Pixel derselbe Mipmap-Level wie bisher benutzt.
Carsten
- Carsten Hölscher
- Administrator
- Beiträge: 33512
- Registriert: 04.07.2002 00:14:42
- Wohnort: Braunschweig
- Kontaktdaten:
- Rolf Reichardt
- Beiträge: 663
- Registriert: 11.11.2003 08:27:07
- Wohnort: Berlin
- Kontaktdaten:
- Carsten Hölscher
- Administrator
- Beiträge: 33512
- Registriert: 04.07.2002 00:14:42
- Wohnort: Braunschweig
- Kontaktdaten:
- Patrick Polzin
- Beiträge: 62
- Registriert: 12.08.2004 17:40:04
@Carsten: Das Problem sollte sich beim Einstellen des MultiSamples 2x aufwärts deutlich verringern. Gilt auch mit den "Kanten" eines Vertices, welche farblich an der Kante gefärbt werden (gibt aber später etwas hässliche Effekte beim Schatten). Siehe hierzu das AntiAlias-Sample vom DX SDK.
Desweiteren hast du schon die verschiedenen Filter mit der SetSamplerState Methode von D3DDev mit den Parametern, MIP MIN MAG mit den verschiedenen Möglichkeiten versucht? Mit MipMap-Filtern bin ich persönlich "etwas vorsichtig" und lasse den User über eine Datei entscheiden, welches Setting er hierfür nimmt.
Mit HLSL-Shadern dürfte sich dieses Problem sogar minimieren lassen, obwohl ich mich doch dort erstmal selbst schlau machen muss, bevor ich dem 100% zustimmen kann. Na ja, da du aber kein HLSL einsetzt, bleibt dir nur der Weg über die D3DPRESENT_PARAMETERS::MultiSampleType, SetSamplerState-Methode oder eine entsprechende Einstellung in der D3DXCreateTextureFromFileEx-Funktion. So ist das halt im Leben .
MfG, Patrick Polzin
Desweiteren hast du schon die verschiedenen Filter mit der SetSamplerState Methode von D3DDev mit den Parametern, MIP MIN MAG mit den verschiedenen Möglichkeiten versucht? Mit MipMap-Filtern bin ich persönlich "etwas vorsichtig" und lasse den User über eine Datei entscheiden, welches Setting er hierfür nimmt.
Mit HLSL-Shadern dürfte sich dieses Problem sogar minimieren lassen, obwohl ich mich doch dort erstmal selbst schlau machen muss, bevor ich dem 100% zustimmen kann. Na ja, da du aber kein HLSL einsetzt, bleibt dir nur der Weg über die D3DPRESENT_PARAMETERS::MultiSampleType, SetSamplerState-Methode oder eine entsprechende Einstellung in der D3DXCreateTextureFromFileEx-Funktion. So ist das halt im Leben .
MfG, Patrick Polzin
- Carsten Hölscher
- Administrator
- Beiträge: 33512
- Registriert: 04.07.2002 00:14:42
- Wohnort: Braunschweig
- Kontaktdaten:
- Rolf Reichardt
- Beiträge: 663
- Registriert: 11.11.2003 08:27:07
- Wohnort: Berlin
- Kontaktdaten:
Ich habe den Fehler gefunden: Das NVidia-DDS-PlugIn für Adobe Photoshop 6.0 arbeitet nur dann richtig, wenn Photoshop mit Administrator-Rechten ausgestattet ist. Ich habe XP Profesionell SP 2 auf dem Rechner. Siehe auch hier Link.Carsten Hölscher hat geschrieben:@Rolf: Hast Du evtl. beim 2. Speichern noch einmal "generate mipmps" aktiviert? Wenn schon mipmaps da sind, muß man "no mipmaps" aktivieren.
Carsten
In der Regel arbeite ich mit einem einem eingeschränkten Benutzerkonto.
Gruß
Rolf
Tradition ist die Weitergabe des Feuers, nicht die Anbetung der Asche!
Gustav Mahler (1860-1911)
Gustav Mahler (1860-1911)