Blender-Code, Kameraführung
Aktueller Code: firstspline.blend,
Simulation der Bewegung
TODO: Funktion, die aus
- dem Index der Bezierkurve $i$ und
- dem vorhergehenden Kurven-Parameter $t^-$
- der vorhergehenden Geschwindigkeit $v$
- dem nächsten Kurven-Paramter $t^+$
die neue Geschwindkeit berechnet. Damit kann Reibung, Bremsen und konstante Geschwindkeit auf einem Förderband implementiert werden. Diese Funktion wird zwei mal gebraucht: Einmal zur Bau der Bahn (Berechnung der Bahnneigung), einmal zur Simulation der Kamerafahrt.
Kräfte
Reibungskraft: Proportional zur Normalkraft, Faktor 0.001 bis 0.01
Luftwiderstand: $c_w$-Wert von ca. 0.5, $F_w = \frac{\rho c_w A v^2}{2}$ mit $\rho \approx 1$, $A \approx 1$.
Energetisch: $W = F \cdot s.$
Berechnung
2 Varianten:
- Zustand nach einer gegebenen Strecke (für den Schienenbau) (implementiert)
- Zustand nach einer gegebenen Zeit (für die Kameraführung) (noch offen).
Die zweite Variante könnte mit $s=v \cdot t$ (wobei $t=1/\text{fps}$) mit Hilfe der ersten berechnet werden. Da Problem ist, wenn $v=0$ (z.B. beim Anfahren am Anfang). Als Ausweg kann die Beschleunigung in Bewegungsrichtung herangezogen werden und so $s=\frac{1}{2}at^2$ approximiert werden.
Kamera-Führung
Zustand: $t$ (Ort auf der Bahn), $v_{\text{eff}}$ (aktueller Betrag der Geschwindigkeit)
Schritt: Zeit um 1/framerate vorrücken, der Bahn folgen (z.B. um die Strecke, die mit $v_{\text{eff}}$ in dieser Zeit zurückgelegt würde, oder genauere schrittweise Simulation). Aus der Höhendifferenz und eventuell Reibung die neue Geschwindigkeit berechnen.
Kamera entsprechend positionieren und Keyframe setzen:
cam = bpy.data.objects['Camera'] frame = 0 cam.animation_data_clear() cam.matrix_world = ( (y.x,y.y,y.z,1), (-an.x, -an.y, -an.z, 1), (-vv.x,-vv.y,-vv.z,1), (pp.x, pp.y, pp.z, 0)) cam.keyframe_insert(data_path="rotation_euler", frame=frame) cam.keyframe_insert(data_path="location", frame=frame) frame+=1
Siehe auch https://blender.stackexchange.com/questions/108938/how-to-interpret-the-camera-world-matrix
D.h. die erste Koordinatenrichtung ist rechts, die zweite oben und die dritte ist entgegen der Blickrichtung.