Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

11.04.2015, 02:36

Was genau ist Lineares Filtering

Hallo Community,

ich hätte eine Frage zu folgender Funktion:

SDL_SetHint( SDL_HINT_RENDER_SCALE_QUALITY, "1" ) )

Hiermit schlage ich in SDL scheinbar Lineares Filtering vor, wozu ich allerdings einige Fragen hätte.
Was genau macht Lineares Filtering ? Ich habe gelesen, dass es versucht
die Übergänge von Pixel zu Pixel sanfter zu gestalten. Das sah
allerdings bei allen Beispielbildern immer verwischt aus. Was wenn ich
nun ein Spiel machen will mit Pixelgrafiken - vollkommen sanfte
Übergänge sind da eher eine Katastrophe und keine Verbesserung.

Wird Filtering nur beim Skalieren der Größe des Ursprungbildes verwendet, um Qualitätsverlust vorzubeugen, oder wie kann ich mir das vorstellen ? Bei Bildern mit viel "Inhalt" mag das möglicherweise vorteilhaft sein, denn ein paar falsch gesetzte Pixel machen da möglicherweise keinen großen Unterschied, aber Pixelart lebt ja praktisch von klaren Abgrenzungen, da ansonsten nur ein relativ seltsamer Klotz ensteht, anstatt der gewünschten Figur.

Ich hoffe jemand kann für Klarheit sorgen, vorallem, wie sich Lineares Filtering auf Pixelart auswirkt und ob meine Sorgen unbegründet sind.

Lg :)

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

2

11.04.2015, 02:45

Wenn ich mich richtig erinnere geht es dabei wie du vermutest um das Verhalten beim Skalieren von Bildern. Wikipedia erklaert das ganz nett: http://en.wikipedia.org/wiki/Image_scaling

3

11.04.2015, 03:00

Die Frage ist natürlich, wie sich das Ganze auf Bilder mit wenig Detail auswirkt, welche in Originalgröße aus recht großen Kästchen bestehen. Hat da schon jemand mit Erfahrung gemacht, ob das Bild bei dem Vorgang möglicherweise zu viel an Detail verloren hat, oder vollkommen verwischt wurde und somit ein kontraproduktives Rusultat erzielt hat ?

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

4

11.04.2015, 03:19

Wenn du mit beabsichtigt pixeligen Bildern arbeitest würde ich das weglassen.

Ich glaube der Filter ist auch der Grund warum du in modernen Spielen keine Verpixelung sondern nur Unschärfe bei nahen Texturen hast.

5

11.04.2015, 03:23

Wikipedia scheint meine Befürchtungen zu bestätigen.

Gibt es eine ähnlichliche Funktion wie:

SDL_SetHint( SDL_HINT_RENDER_SCALE_QUALITY, "1" ) )

Für Pixelart in SDL ? Es gibt ja besondere Algorithmen, welche Rücksicht auf Pixelart nehmen und versuchen Details beizubehalten. Alternativ kann ich natürlich wie birdfreeyahoo bereits vorgeschlagen hat das Ganze einfach weg lassen.

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

6

11.04.2015, 08:49

lineares Filtering bedeutet, das du zwischen zwei Werten mit einer linearen Funktion einen Wert berechnest. Etwa so a = a1 * y + a2 * (1 - y).

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

11.04.2015, 10:35

Mittels inverser Transformation wird über einer linearen Funktion ein Wert vom Ursprungsbild auf das Zielbild gemapped.

Selbst bei einer Skalierung trifft somit auf jeden pixel im zielbild ein Pixel. Es entstehen keine lücken. Linear interpoliert dabei bedeutet, dass der errechnete Pixel für dss Zielbild aus mehreren Pixeln aus dem Ursprungsbild errechnet wurde.

Sorry, Bambi, aber deine Erklärung ist Stuss.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

11.04.2015, 12:16

Mittels inverser Transformation wird über einer linearen Funktion ein Wert vom Ursprungsbild auf das Zielbild gemapped.

Keine Ahnung, was du mit "inverser Transformation" meinst. Das mit der linearen Funktion kommt von woanders (Bildverarbeitung) und ist hier nicht anwendbar. Es geht hier um Texturfilter, und da heißt "linear" etwas anderes (s. u.).

Selbst bei einer Skalierung trifft somit auf jeden pixel im zielbild ein Pixel. Es entstehen keine lücken.

Mir ist kein Texturfilter bekannt, bei dem "Lücken" entstehen.

Linear interpoliert dabei bedeutet, dass der errechnete Pixel für dss Zielbild aus mehreren Pixeln aus dem Ursprungsbild errechnet wurde.

Nein. Es bedeutet, dass anhand der Texturkoordinaten bilinear zwischen den vier umgebenden Texeln interpoliert wird. Wie das in einer Richtung aussieht, hat TGGC gezeigt. Tatsächlich interpoliert man in beide Richtungen (x und y), darum heißt es auch "bilinear". Deine Aussage mit den mehreren Pixeln trifft z. B. auch auf einen bikubischen Filter zu, ist also nicht spezifisch für den bilinearen Filter.

So wende ich es an. Bin da ja nicht ganz untätig im bereich.

Du setzt irgendwo in Unity, Direct3D oder OpenGL einen Parameter "Linear", und das war's dann. Unter "anwenden" würde ich verstehen, dass du einen Software-Rasterizer geschrieben hast und deine Texturen manuell samplest. Ich habe das schon mehrfach getan und bin daher wirklich "nicht ganz untätig im Bereich". ;)

Werbeanzeige