Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Mocap

No description
by

Stefan Erdbeerkäse

on 13 March 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Mocap

Mocap mit OpenSTAGE
OpenSTAGE-System

MotionBuilder
Unity3D
Character in Unity Einbinden
Visualisieren der Trackingdaten
Mecanim
per Hand/Script

Navigation/Menu
Animator
Clips bearbeiten
Navigation
OpenStage Plugin
Model Binding
Recording
Bearbeitung
Filtern
Exportmöglichkeiten
Maya
Visualisierung
der
Bewegung
GUI zur Steuerung,
was wie
visualisiert wird
Winkelgeschwindigkeit
am Objekt
Trailrendering
Auswahl von
Darstellungsart
Feineinstellung von:
Ab- u. Anwahl der
Bones bzgl.
Trainrendering
IO-Tool mit OSC Ausgang
Ende :)
Projektarbeit - Mocap


EINLEITUNG: |Fabian
- Warum Motion Capturing? |
- Ziel der Projektarbeit

GRUNDLAGEN | Danyel
- Unterschied Marker/los
- - Vorteile:
- - Nachteile:

1. Anbindungsmöglichkeiten der OpenSTAGE
1.1 MotionBuilder | Jannik
1.1.1 Grundlagen | Jannik
1.1.2 Filtern | Jannik
1.1.3 Clips bearbeiten | Jannik
1.1.4 Exportmöglichkeiten | Jannik
1.2 Script | Stefan
1.2.1 OpenSTAGE-Sdk | Stefan
1.2.2 Datenstream 1, Actor 1/2/3 | Stefan
1.2.3 Datenstream 2, Actor 1/2/3 | Stefan
1.2.4 Voxelstream, Actor 1/2/3 | Stefan
1.3 BackSTAGE | Stefan
1.3.1 Konfigurieren | Stefan
1.3.2 Aufzeichnen/HQ | Stefan
1.3.3 SimServer | Stefan

2. Unity3D
2.1 Character einbinden
2.1.1 per Hand | Danyel
2.1.2 per Mecanim | Jannik
2.1.3 fertige Animation anwenden |Florian
2.1.4 Live Animation anwenden |Danyel
2.1.4.1 Script | Danyel
2.1.4.2 Asset, welches OSC Daten empfängt (von Patrick) |Danyel (Fabian)
2.2 Daten visualisieren | Fabian
2.2.1 verschiedene Visualisierungen| Fabian

3. Maya |Florian
3.1 MB in Maya
3.2 Maya in Unity

4. ggfl. Vergleich mit anderen Technologien |Florian

//Kommentar: Die Verteilung in der jetztigen From ist ein Vorschlag von mir, wenn sich jemand in einem anderen Bereich sieht --> Bitte mitteilen!
Danyel




Unity 3D und OpenStage - Ziel
Motion Capture-Daten „live“ nutzen
Skript soll unabhängig vom Character sein
einfach zu nutzen

OpenStage und Unity 3D - Anwendung
Bridge starten
Skript OSCListenerBones auf Character ziehen
Joints dem Skript zuweisen, nicht benötigte auf private

OpenStage und Unity 3D - Aufbau
- Hauptskript OSCListenerBones
- Datenkapselung für Elemente über StageTransform
- Standardwerte in DiffRotEnum
OpenStage und Unity 3D - Daten empfangen
OSC-Messages mit 4x4 Matrix in Update per while-Schleife empfangen
Matrix extrahieren, Rotations- und Positionswerte extrahieren
Passendes Joint-Element raussuchen, Werte berechnen und anwenden

while(oscm != null)
{
OscBundle oscB = oscm as OscBundle;
IEnumerator oscIE = oscB.Elements.GetEnumerator();
OscElement e;
oscIE.MoveNext();
//while(oscIE.MoveNext())
{
e = oscIE.Current as OscElement;

string adress = e.Address;
matrix = new Matrix4x4();
matrix[0,0] = (float)e.Args[0];
matrix[1,0] = (float)e.Args[1];
matrix[2,0] = (float)e.Args[2];
matrix[3,0] = (float)e.Args[3];
matrix[0,1] = (float)e.Args[4];
matrix[1,1] = (float)e.Args[5];
matrix[2,1] = (float)e.Args[6];
matrix[3,1] = (float)e.Args[7];
matrix[0,2] = (float)e.Args[8];
matrix[1,2] = (float)e.Args[9];
matrix[2,2] = (float)e.Args[10];
matrix[3,2] = (float)e.Args[11];
matrix[0,3] = (float)e.Args[12];
matrix[1,3] = (float)e.Args[13];
matrix[2,3] = (float)e.Args[14];
matrix[3,3] = (float)e.Args[15];

//extract position
//Vector3 position = new Vector3(matrix[0,3], matrix[1,3], matrix[2,3]);

Vector3 rotationX = matrix.GetColumn(0);
Vector3 rotationY = matrix.GetColumn(1);
Vector3 rotationZ = matrix.GetColumn(2);
position = matrix.GetColumn(3);


OpenStage und Unity 3D - Daten verarbeiten
Rotationswert mit invertierten Ausgangswerten (T-Pose) von der OpenStage multipliziert mit Quaternion.identity (entspricht „no rotation“)

//StageTransform
public void getDiffStage()
{
rotationDateneingangAktuell = new Quaternion(qRotationFresh.x, qRotationFresh.y, qRotationFresh.z, qRotationFresh.w);
qDiffStage = Quaternion.identity * Quaternion.Inverse(rotationDateneingangAktuell);
}
Initial mit T-Pose
Standardwerte teilweise in DiffRotEnum

Frage?
Wie könnte man eine Laufzeit-Kalibration implementieren die die Leistung nicht zu sehr mindert?

OpenStage und Unity 3D - Kalibration
//OSCListenerBones
Transform parent=_obj.getParent();
_obj.setQRotationFresh(Quaternion.LookRotation(- new Vector3(-rotX.y, -rotX.z, rotX.x), new Vector3(-rotZ.y, -rotZ.z, rotZ.x)));
_obj.setQRotation(new Quaternion(_obj.getQRotationFresh().x,_obj.getQRotationFresh().y,_obj.getQRotationFresh().z,_obj.getQRotationFresh().w));


_obj.setQRotation(_obj.getQRotation() * _obj.getQDiffStage()*_obj.getCharacterotation());
_obj.getParent().rotation = _obj.getQRotation();

---------------------------------------------------------


OpenStage und Unity 3D - Oculus Rift einbinden
OVRPlayerController einbinden
OVRPlayerController  Rotationswerte
OVRCamerController  Positionswerte

//OSCListenerBones

Vector3 newpos=new Vector3(OculusCamPos.position.x,OculusCamPos.position.y-0.8F,OculusCamPos.position.z);
mSacrum.getParent().position=newpos;
OpenStage und Unity 3D - Probleme
Neu positionierung der Kamera der Oberkörperrotation entsprechend schwierig, da Oculus Rift die Positionsdaten liefert
Rotation nur über die Stage, Character muss auf 0,0,0 ausgerichtet sein  Umrechnung nicht trivial

Verbinden der Technologien umständlich, (Bridge+Skript)  schöner wäre eine C#-Lib
Umständlicher Aufbau und Kalibration der OpenStage
Initiale Kalibrierung in Unity 3D nicht optimal, Ausrichtung muss umgerechnet werden


-->Eine zukünftige Tool-Entwicklung könnte die Nutzung stark verbessern!

OpenStage und Unity 3D - Fazit und Ausblick
OpenStage und Unity 3D |Projekte
- Geisterfahrt - mit Oculus Rift
- Rotation über OpenStage
- Kopfbewegungen über Oculus Rift
- Probleme bei Torso-Rotation nach vorn
- Spiegel
- Positionswerte im Raum müssen umgerechnet werden
Geisterfahrt
Spiegel
Full transcript