ich habe grad ein problem wo ich ein wenig festhänge... genauergesagt ein mathematisches Ich habe ein bild gerendert und möchte bei diesem nun im nachhinein MotionBlur draufrechnen, dafür brauche ich die MotionVektoren für jedes Pixel (Die meisten Renderer können sowas mit ausgeben speziell dafür).
Das Problem ist jetzt, der renderer den ich benutze kann das nicht.. der kann lediglich ein bild mit den 3D-Motion Vektoren rausgeben (R = X, G = Y, B = Z)..
Aus diesem muß ich es nu irgendwie schaffen die 2D Vektoren zu berechnen (sprich, die richtugn in die sich das Pixel auf dem Bild bewegt).
Zusätzlich zu den 3D Vektoren hab ich aber noch allerlei andere infos pro pixel:
- 3D Motion Vektoren
- Z Kanale (entfernung vom pixel zur kamera)
- Weltkoordinate des Pixels im 3D Space
- Normale des Pixels (Worldspace)
Daraus müßte man es doch jetzt irgendwie hinbekommen den 2D Vektor zu errechnen, oder? Ich steh da ziemlich auf dem schlauch.. ich hab zwar in der theorie mehrere anstäze, aber umsetzen könnt ich keinen davon so einfach weil mir dafür die mathematik fehlt..
Wär super wenn ihr mir da helfen könnt.. irgendwie..
Aya~
PS: Falls bei den infos die ich pro pixel habe irgendwas wichtiges fehlt, einfach sagen.. ich kann noch ne menge mehr rausrendern, nur das sind die sachen die ich so oder so bräuchte und daher auch hab
durch die 2D Koordinaten der Pixel und die dazugehörigen 3D Weltkoordinaten müsste sich eigentlich die Projektionsmatrix berechnen lassen. Wie genau weiß ich aber im moment auch nicht.
hab es mal probiert einfach den 3D Vektor mit der ProjektionsMatrix zu multiplizieren... sieht an und für sich auch ganz richtig aus in den meisten fällen, nur wenn ich z.B. eine kugel nur in X und Z bewege (Z = Tiefe), dann kommt beim 2D Vektor am ende sehr starke X-Bewegung raus, was ja total falsch ist.. denn 2D mäßig bewegt sich die kugel nur ein wenig in Y-Richtung.
oder muß ich mit dem Vektor nochwas machen nachdem ich ihn mit der Matrix multipliziert habe? (Hab jetzt einfach Vektor*Matrix und von dem resultat dann nur X und Y genommen einfach).
Oder muß ich evtl die invertierte matrix nehmen oder so?
wenn z nach hinten ist, kann es durchaus sein, dass sich der effekt durch die perspektivische verzerrung erhöht, ein paar screenshots dazu wären hilfreich-
ich hab es jetzt auch mal mit der invertierten matrix versucht, klappt leider auch nicht.
Mir ist dabei noch aufgefallen das bei der Kugel ganz rechts nach dem multiplizieren noch ein Z-Wert da ist... muß ich mit dem vektor nachdem ich ihn multipliziert habe noch irgendwas machen?
Darf ich fragen, was das für eine Projektionsmatrix ist? Den Werten nach zu schließen, skaliert sie nur, aber irgendwie komisch (die Z-Komponente ist negativ, alle anderen sind positiv). Die Matrix von glFrustum kanns nicht sein, die von glOrtho auch nicht.
??
Traude
Nachtrag: der Z-Wert des Vektors dient höchstwahrscheinlich dem Tiefentest (aber nagel mich nicht fest drauf)
mh.. das war die projektionsMatrix die mir der Maya Viewport gegeben hat.. aber, ich hab grad noch eine andere funktion gefunden, kann aber so direkt nichts mit anfangen:
Zitat:
Returns the orthographic or perspective projection matrix for the camera. The projection matrix that maya's software renderer uses is almost identical to the OpenGL projection matrix. The difference is that maya uses a left hand coordinate system and so the entries [2][2] and [3][2] are negated.
Die funktion liefert mir dann die matrix:
Code:
2.81214300004.99717800001.00020.2000200 -10
aber da irritiert mich irgendwie das -1 an vorletzter stelle...
In Maya ist meine kamera so positioniert:
X: 10
Y: 5
Z: 10
RotateX: -15
RotateY: 45
RotateZ: 0
Die Translate-Werte fehlen irgendwie in der Matrix, oder?
Ich hab in Maya auch die Front, Right und UpVektoren der Kamera sowie deren position.. kann ich daraus irgendwie selber die matrix basteln, welche ich brauche?
In OpenGL werden die Projektions-Matrizen so gebaut, wie es in unserem Wiki bei "glOrtho" und "glFrustum" beschrieben ist.
Wie man die ModelviewMatrix baut, kann ich Dir sagen, wenn Du das brauchst, denn das mach ich immer selber. Ist aber mit Aufwand verbunden, wenn Du es händisch rechnen willst; hier ein Auszug aus meiner selbst gebastelten Vector3DMathUnit
(die inverse Translationsmatrix brauchst Du nicht, das ist für Gelenke gedacht):
Ach ja noch was: TSpValueSmall ist einfach ein Single.
ook, danke schau ich mir mal an Aber nur um sicherzugehen das ich mir jetzt nich hier ewig viel mühe umsonst mache...
Funktioniert es sicher, das wenn ich den 3D Vektor (ist ja nur der richtungsvektor in Weltkoordinaten) mit der projektions und modelMatrix multipliziere, das ich dann den 2D Vektor auf kameraebene bekomme? Oder ist das jetzt nur eine annahme das es dann gehen "könnte"? ^^
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Nein, das ist nicht nur eine Annahme. Du musst Dich aber ein wenig mit Matrizenrechnung auskennen. Und sieh Dir nochmal das Edit in oben meinem Post an: sie haben ein gegenläufiges Koordinatensystem. Und das kann ich Dir jetzt nicht sicher sagen, ob man bei meiner Matrix einfach die gleichen Positionen austauschen muss.
und brauch ich zwingend beide matritzen? Also Projection und Modelview?
Uund, ich hab zwar die rotationswerte etc, sprich ich könnte sie bei deiner procedure da einsetzen.. allerdings, gibt es nicht ne möglichkeit das über die Up, Front und Right Vektoren der Camera zu berechnen? Denn die Rotation/Translations daten der Camera in Maya müßen nich immer unbedingt zwingend dem entsprechen was du für die formel brauchst glaube ich... z.B. kann die RotationOrder verändert sein, oder nen Shear auf der camera, oder was weiß ich für sachen..
Aktuellen und alten Positionsvektor mit der ModelViewProjection Matrix multiplizieren, beide Vektoren durch ihren W Anteil teilen (Macht sonst die feste Pipeline) und die Differenz berechnen. X und Y des Differzvektors beziehen sich dann auf die Frambuffer koordinaten von -1;-1 nach 1;1 um diesen Vektor in einem postprozessing mit Texturkoordinaten zu verwenden muss er noch mit 0.5 multipliziert werden.
Mitglieder in diesem Forum: 0 Mitglieder und 16 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.