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

dot

Supermoderator

  • »dot« ist der Autor dieses Themas

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

1

17.01.2010, 02:42

FilterKernelGenerator

Weil ich mir mal ein wenig die WPF anschauen wollte hab ich eines meiner kleinen Tools etwas aufgepeppt und denke dass es für den ein oder anderen ebenfalls sehr nützlich sein könnte, darum will ich es hier kurz vorstellen.

Wer mit Shadern arbeitet kennt sicher das Szenario: Man braucht eben mal schnell einen passenden Blurfilter, aber woher nehmen? Google liefert einem mit etwas Mühe vielleicht das ein oder andere Paper in dem sich ein annähernd passender Kernel findet, aber eigentlich möchte man dann doch gern mal mit 16 statt nur 12 Samples probieren...

Da es mir schnell zu blöd wurde mir meine Kernel hinzuschätzen oder zu ergooglen hab ich mir kurzerhand ein Tool geschrieben das mir Filterkernel mit genau den Parametern wie ich sie gerade haben will erzeugt, fertig für copy 'n' paste in meinen HLSL Code:


(Link)


Wie man schon an den Tabs im Screenshot sieht sind im Moment Generatoren für Gauss und Poisson Disc Kernel implementiert. Je nach Filtertyp kann man die entsprechenden Parameter variieren und bekommt das Ergebnis gleich in einer interaktiven Vorschau präsentiert. Mit einem Klick auf "Gimme!" generiert das Tool dann den HLSL Code der in der Textbox darunter ausgegeben und auch gleich in die Zwischenablage kopiert wird.

Im Fall vom Gauss Kernel ist das Ergebnis ein Array aus float2 Vektoren deren x-Koordinate den Offset und y-Koordinate das Gewicht eines Sample darstellt. w0 ist das Gewicht für den mittleren Sample (Offset 0, in der Visualisierung grün dargestellt), die Gewichte sind normiert (also in Summe 1). Der Size Parameter gibt die Sampleanzahl an, Scale ist ein Skalierungsfaktor für die Sampleposition und Sigma entsprechend die Standardabweichung der Gauss-Kurve. Die Vorschau passt sich den Abmessungen des Kernels an, zur Orientierung werden der maximale Offset sowie w0 rechts unten bzw. oben in der Mitte angezeigt.

Beim Poisson Disc Kernel gibt es nur den Parameter Taps der eben die Anzahl der Filtertaps (also der Samples) angibt. Das Ergebnis ist ebenfalls ein float2 Array das in diesem Fall die uv Offsets enthält. Die Visualisierung zeigt direkt die durch die Offsets gegebenen Samplepunkte innerhalb des Einheitskreises (schwarz). Ein Klick auf das Diagramm generiert einen neuen Filter mit der gerade eingestellten Samplezahl.

Das ganze ist in C# basierend auf dem .NET Framework 3.5 geschrieben, downloaden könnt ihr es hier.

Comments and Critics are welcome :)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

17.01.2010, 03:07

Wieder mal typisch; Für das was andere Leute im Kopf (Mathematiker) oder auf dem Papier (Physiker) machen, brauchen die Informatiker ein Tool ;) . Funktioniert soweit ich das beurteilen kann einwandfrei. Einzig die Tatsache, dass bei den Slidern eine "vernünftigte" Skaleneinteilung bzw. angaben fehlt, fällt mir auf.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

3

17.01.2010, 08:42

Find ich schon mal sehr gut. Nimmt einem doch ein bisschen Schreibarbeit ab :D

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

4

17.01.2010, 10:01

Wue cooles Tool:)
Wollte ohnehin in nicht allzu entfernter Zeit neue Postproshader anrühren (will ein paar Sachen ausprobieren, außerdem kann ich meine alten nicht brauchen, weil ich die neuen in Cg schreiben werd). Da werd ich sicher auf das Tool zurückgreifen.
Funktioniert tadellos. Wirklich interessant wäre noch eine Art Anwendungsvorschau.

5

17.01.2010, 10:52

Sehr fein, dankeschön dot.
Ist ein richtig gutes Tool.

Und die WPF wollte ich mir auch nochmal etwas genauer anschauen, hab da bisher auch nur bisschen mit rumgespielt.

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

6

17.01.2010, 11:32

Ich wollte die Tage noch nen schicken Depth of Field Shader schreiben. Da kommt mir das ja mehr als gelegen :D

dot

Supermoderator

  • »dot« ist der Autor dieses Themas

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

17.01.2010, 12:59

Freut mich wenns euch gefällt :)

Zitat von »"Nox"«

Einzig die Tatsache, dass bei den Slidern eine "vernünftigte" Skaleneinteilung bzw. angaben fehlt, fällt mir auf.


Ja, wenn ich den WPF Slidern irgendwie beibringen könnte eine Skala hinzumalen wär das nett, mal schauen...

Zitat von »"k|haos"«

Und die WPF wollte ich mir auch nochmal etwas genauer anschauen, hab da bisher auch nur bisschen mit rumgespielt.


Viel mehr als ein bisschen rumspielen war das auch noch net, ich find die WPF aber ziemlich cool. Schade is nur dass es kein native Interface dafür gibt, oder Direct3D interop :D

Zitat von »"Wümpftlbrümpftl"«

Wirklich interessant wäre noch eine Art Anwendungsvorschau.


Hehe, jo das hab ich mir auch schon gedacht, mal sehen ;)

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

8

27.01.2010, 23:07

Zitat von »"dot"«

Freut mich wenns euch gefällt :)

Zitat von »"Nox"«

Einzig die Tatsache, dass bei den Slidern eine "vernünftigte" Skaleneinteilung bzw. angaben fehlt, fällt mir auf.


Ja, wenn ich den WPF Slidern irgendwie beibringen könnte eine Skala hinzumalen wär das nett, mal schauen...


afaik nicht. der direkteste weg wäre über ein grid mit zweri zeilen und entsprechenden spalten wie gewünscht + bindings für spaltenzahl, überspannung erste zeile und beschriftung, fertig ;)

Werbeanzeige