PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kernel-Trick für Wasseranimation?


BAGZZlash
2008-04-07, 23:52:07
Bei modernen Spielen wie Crysis ist es bekanntlich möglich, die Differentialgleichungen, die für die Animation des Wassers verantwortlich sind, auf ein relativ komplexes Niveau zu schrauben. Gelöst wird das dann mittels FFTs. Dennoch muss die Wasseroberfläche stets eine Funktion im mathematischen Sinne bleiben, das Wasser/eine Welle kann also z.B. nicht brechen. Meint Ihr, es wäre vielleicht möglich, das Ganze performant mithilfe des Kernel-Tricks (http://en.wikipedia.org/wiki/Kernel_trick) zu umgehen? Salopp gesagt wird hierbei eine Funktion in einen höher-dimensionalen Raum abgebildet, dort geeignet modifiziert (hier könnte die Welle brechen) und anschließend wieder zurück in den ursprünglichen Raum transformiert. Das alles geht einigermaßen flott. Wäre das ein Ansatz oder ist das vollkommener Humbug?

Mann, was mir immer für Ideen unter der Dusche kommen...

HajottV
2008-04-08, 12:25:20
Bei modernen Spielen wie Crysis ist es bekanntlich möglich, die Differentialgleichungen, die für die Animation des Wassers verantwortlich sind, auf ein relativ komplexes Niveau zu schrauben. Gelöst wird das dann mittels FFTs. Dennoch muss die Wasseroberfläche stets eine Funktion im mathematischen Sinne bleiben, das Wasser/eine Welle kann also z.B. nicht brechen. Meint Ihr, es wäre vielleicht möglich, das Ganze performant mithilfe des Kernel-Tricks (http://en.wikipedia.org/wiki/Kernel_trick) zu umgehen? Salopp gesagt wird hierbei eine Funktion in einen höher-dimensionalen Raum abgebildet, dort geeignet modifiziert (hier könnte die Welle brechen) und anschließend wieder zurück in den ursprünglichen Raum transformiert. Das alles geht einigermaßen flott. Wäre das ein Ansatz oder ist das vollkommener Humbug?

Mann, was mir immer für Ideen unter der Dusche kommen...

Ich kenne den Kerneltrick aus der automatischen Textklassifikation: Dort wird der eingesetzt, um aus einem linearen Klassifizierer einen nichtlinearen Klassifizierer zu machen. Das geht aber ausschließlich für den Fall, daß sich der Kern der Klassifikationsfunktion über das Vektorprodukt darstellen läßt. Ist die Wasseranimation ein lineares Klassifikationsproblem? Eher nicht, oder?

Gruß

Jörg

BAGZZlash
2008-04-08, 12:58:02
Ich kenne den Kerneltrick aus der automatischen Textklassifikation: Dort wird der eingesetzt, um aus einem linearen Klassifizierer einen nichtlinearen Klassifizierer zu machen. Das geht aber ausschließlich für den Fall, daß sich der Kern der Klassifikationsfunktion über das Vektorprodukt darstellen läßt. Ist die Wasseranimation ein lineares Klassifikationsproblem? Eher nicht, oder?

Gruß

Jörg

Ja, daher kenn' ich das auch: Vom maschinellen Lernen, genauer gesagt von support vector machines. Wird eingesetzt zur Mustererkennung, OCR-engines nutzen sowas beispielsweise.
Dennoch ist das Ganze nicht ausschließlich für Klassifizierungsprobleme einzusetzen. Die Darstellungsweise der Funktion, die man da transformieren will, sollte doch nichts damit zu tun haben, ob der Algorithmus als solcher funktioniert, oder? Oder muss die transformierte Funktion unbedingt linear sein?
Stimmt schon, selbst nicht vollständig separierende Klassifizierungsfunktionen sind linear und treten immer als Vektorprodukt auf (Mann, hab' ich mich darüber schon geärgert :rolleyes:).
Naja, man könnte ja hinreichend kleine Abschnitte der Welle linear approximieren über 'ne Taylor-Entwicklung und das dann in Vektordarstellung überführen. Aber spätestens dann würde das wohl zu einer nicht sinnvoll einsetzbaren mathematischen Fingerübung werden.
Es hängt also davon ab, ob der Trick nur für lineare Funktionen funktioniert. Ist das so richtig?

HajottV
2008-04-09, 14:36:46
Genau, SVMs sind ein ganz klassischer (der?) Anwendungsfall für den Kernel-Trick. Daher kenne ich das auch - allerdings aus der Textklassifikation.

Ich habe über die Sache noch einmal nachgedacht. An der Idee ist vielleicht ein Körnchen "Wahrheit" dran.

Die diskrete Fouriertransformation kann man ja als Matrix darstellen... also:

t = M * x = (m0 * x, ..., mn * x)

Da sind also Skalarprodukte drin. Jetzt könnte man natürlich einen Kernel darauf ansetzen, um x in einen anderen (höherdimensionalen) Vektor zu transformieren. Das Problem ist, daß man dann natürlich auch die Vektoren in M transformiert... und daß die Transformation im Kernelraum (für die meisten Kernel) keine Fourier-Transformation mehr ist. Für den trivialen Kernel (id) funktioniert das Ganze (das transformierte M ist natürlich wieder die FT) - die Frage ist, ob es auch nicht-triviale Kernel gibt, für die das gilt.

Gruß

Jörg