# 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]`