Experiment 2 angefangen

This commit is contained in:
Simon Lübeß
2026-03-07 23:16:00 +01:00
parent 612330cd10
commit 3d57d3d12e
11 changed files with 306 additions and 68 deletions

View File

@@ -0,0 +1,11 @@
# Gesamten Code mit Type-Annotations voll gekleistert
TODO: Schreibi schreibi
# Random Optimierungen
Bei der Vorbereitung der Benchmarks ist aufgefallen, dass weit mehr Zeit als erwartet mit dem Vorbereiten des Renderns verbracht wird. Dies umfasst neben dem Verändern der Blender Szene mit zufälligen Werte für z. B. die Blickrichtung und Kamera-Position auch das erzeugen der Materialien sowie des Compositing-Graphen und auch das Erzeugen von Texturen für die Sclera und Cornea mit den Glanzlichter darauf und das Erzeugen der Iris Textur.
Im Material für die Haut wird die Luminanz-Kurve angepasst, dafür wird erstmal die min und max Luminanz der Haut-Textur berechnet. Die alte Implementierung berechnet diese Werte in jeder Iteration erneut. Da diese Textur sich aber nie ändert, können sie gecached werden.
Um die Sclera-Textur zu erzeugen wird in der alten Implementierung zunächst eine weiße Textur erzeugt, dann werden die RGB-Werte aller Pixel durch einen zufällig bestimmten Grauwert ersetzt. Anschließend wird ein transparenter Kreis für die Cornea erzeugt und die Glints auf die Textur gemalt.
Die ersten beiden Schritte lassen sich zusammenfassen. Statt erst eine weiße Textur zu erzeugen (`np.ones`) und die Pixel dann grau (`tex[::3] = grau`) zu machen, kann in einem einzigen Schritt ein Array mit den korrekten Grauwerten erzeugt werden (`np.full(size, [grau,grau,grau,1])`). Tatsächlich kommt der meiste Performance-Vorteil durch das ersetzen von `tex[::3]`