Anwendung von Normalenvektoren

  • Hallo zusammen,


    ein immer wieder aufkommendes Thema sind die im Loksim sog. Normalenvektoren. Da trotz der im Jahr 2014 mit der Version 2.9 eingeführten und 2016 erweiterten Funktion zur automatischen Berechnung der Normalenvektoren immer noch Objekte mit grob fehlerhaft gesetzten Vektoren in den Betatest kommen oder veröffentlicht werden, sehe ich mich gezwungen, zu dem Thema mal ein paar Worte zu verlieren. Vielleicht kann der @PatrickR das Ganze auch oben anpinnen. Scheinbar hat sich seit den Kindertagen des Loksim eine falsche Auffassung dazu eingebürgert, wodurch Fehler teilweis abstrus begründet werden und auch nach Fotos mit eindeutiger Falsifizierung der Annahme an ihnen festgehalten wird.
    Meiner Meinung nach sind neben Painttexturen, fehlenden künstlichen Lichtquellen und automatischem Schattenwurf auch falsch gesetzte Normalenvektoren einer der Hauptgründe für die immer wieder als "altbacken" bezeichnete Grafik des Loksim, dabei ist mit etwas Einsatz so viel mehr drin.


    Funktion der Normalenvektoren
    Die Normalenvektoren - eigentlich korrekt: Beleuchtungsvektoren - regeln die Beleuchtung von Objektflächen in der 3D-Darstellung. Der Name "Normalenvektor" stammt dabei aus der Tatsache, dass diese in der Regel normal auf der sichtbaren Fläche stehen, also senkrecht davon wegzeigen und betitelt damit auch schon die korrekte Ausrichtung der Vektoren.



    Ein Vektor bildet für die zugehörige Fläche damit die Achse, auf der die Lichtquelle stehen und deren Richtung sie strahlen muss, um die höchste Beleuchtung der Fläche zu erreichen. Die Länge eines Vektors, die sich aus der Länge ihrer x-, y- und z-Komponenten über die Abwandlung des Satzes des Pythagoras errechnen lässt, sollte immer 1 betragen. Längere Vektoren sorgen bei geringer Beleuchtung bereits zu voller Reflexion, kürzere Vektoren logischerweise zu geringerer Reflexion, dazu aber später mehr.
    Keine Aufgabe der Vektoren ist es, Verschmutzung oder ähnliches darzustellen. Die damit erreichte Verdunklung des unteren Teils von Wagenkästen sieht nicht nur seltsam aus und lässt den Kasten ausgebeult erscheinen, sie ist auch schlichtweg falsch, da Staubablagerungen meist zu einer Aufhellung und Verblassung führen. Lediglich das Darstellung von Schattierungen unterhalb von größeren Dächern ist denkbar.


    Anwendung der Normalenvektoren
    Der Loksim-Objekteditor bietet zwei automatische Berechnungsverfahren an, die dem Objektersteller bereits 99% der Arbeit abnehmen. Zur korrekten Berechnung ist es zum einen notwendig, dass Rückseiten von Flächen nicht dargestellt werden, da die Beleuchtung nur für die Vorderseite berechnet werden kann (hier hilft es, die entsprechende Fläche über Rechtsklick -> Hinzufügen -> Rückseite hinzuzufügen) und zum anderen, dass runde von eckigen Bereichen klar abgegrenzt werden.


    Eckige Bereiche
    Gerade Flächen mit klaren Kanten nutzen Beleuchtungsvektoren, die für die gesamte Fläche einheitlich und unabhängig von den Punktvektoren sind. Über Bearbeiten -> Normalenvektoren automatisch berechnen (Standard) werden entsprechende Objekte korrekt berechnet und die Länge der Vektoren auf 1 gesetzt. Flächen, die eine Ausrundung darstellen sollen, werden dabei aber falsch dargestellt. Bei Objekten, bei denen der Anteil gerader Flächen größer ist als der Anteil an Ausrundungen, sollten letztere in ein eigenes Objekt herausgeschnitten werden.



    Ausrundungen
    Für runde Objekte gibt es die Funktion Bearbeiten -> Normalenvektoren automatisch berechnen (rundes Objek) [sic]. In diesem zweischrittigen Berechnungsverfahren werden zuerst wie oben beschrieben die Vektoren der einzelnen Flächen berechnet und dann an jedem Punkt der Durchschnitt der Vektoren aus allen angrenzenden Flächen berechnet. Dabei hat die Größe der Fläche keinen Einfluss. Bei komplett runden Objekten wie Zylindern und Kugeln ist eine Nachbearbeitung per Hand nicht erforderlich.



    Im selben Objekt befindliche gerade Flächen mit Kanten (z.B. Deckfläche) werden einfach erzeugt, in dem die entsprechenden Punkte verbunden, die Fläche dann ausgeschnitten und erneut eingefügt werden. Dabei werden die Punkte kopiert, sie sind dann also nur jeweils einer Fläche zugeordnet, ansonsten würden die Vektoren falsch gesetzt werden.


    Falsch (Fläche nur eingefügt und Vektoren berechnet):



    Korrekt (Deckflächen ausgeschnitten und einkopiert, um Punkte zu duplizieren):



    Finden sich im selben Objekt aber auch gerade Flächen oder sind die Außenkanten des Objektes runde Übergänge zu geraden Flächen (keine kantigen wie bei der Deckfläche eines Zylinders), müssen die Normalenvektoren der Übergangspunkte per Hand gesetzt werden, und zwar auf dieselben Werte, die der geraden Fläche zugeordnet sind.



    Hier haben wir ein Objekt, bei dem sich zwischen zwei Zylinderhälften noch ein gerader Teil befindet (gibt es z.B. bei Brückenpfeilern). Bei der Berechnung der Vektoren werden die Randvektoren der geraden Flächen etwas nach außen gezogen, da ja der Durchschnitt zwischen gerader Fläche und der ersten Fläche der Rundung gebildet wird. Für eine korrekte Darstellung der Beleuchtung (so wird die gerade Fläche je nach Stand der Lichtquelle zur einen Seite hin etwas dunkler) müssen die Vektoren der Randpunkte denen der Fläche angepasst werden. Also entsprechende Fläche anklicken, die Werte des Flächenvektors merken (oder einzeln kopieren) und den entsprechenden Punkten zuweisen.


    Exkurs: Länge der Vektoren
    Wie bereits beschrieben, haben Vektoren in der Regel die Länge 1, dies wird von Loksim auch so berechnet und sollte so angewendet werden. Per Hand gesetzte Vektoren im 45°-Winkel sollen also keinesfalls die Werte (0.5 | 0.5 | 0) haben, da der Vektor damit insgesamt nur eine Länge von 0.707 hat. Dies ergibt sich aus der Formel



    Möchte man den Winkel aber beibehalten, muss man an dem Vektor eine sogenannte Normierung durchführen. Dafür wird die tatsächlich erhaltene Länge errechet, dies haben wir bereits getan und erhalten ~0.707. Nun teilen wir 1 durch die tatsächliche Länge und erhalten 1.414. Dies multiplizieren wir mit jeder einzelnen Vektorkomponente und erhalten damit den Vektor (0.707 | 0.707 | 0), der damit die Länge 1 besitzt.


    Weiter oben habe ich bereits geschrieben, dass die Länge einen Einfluss auf die Reflexion der Vektoren hat. Dies spielt im derzeitigen Loksim-Beleuchtungssystem aber noch keine große Rolle. Denkbar wäre es, verschiedene Werkstoffe oder Lacke mit verschiedenen Vektorenlängen zu unterscheiden. In anderen 3D-Darstellungen werden für Flächen sog. Materialien ausgewählt, die einen Einfluss auf Lichtreflexionen haben. Für Loksim könnten allenfalls für matte Oberflächen (verputzte Häuserwände, Erdboden) gegenüber spiegelnden Oberflächen (lackierte Wagenkästen, Schienen) kürzere Vektoren verwendet werden.


    Ich hoffe, hiermit etwas Klarheit zu diesen merkwürdigen Pfeilen und deren Anwendung geschaffen zu haben und freue mich auf neue, korrekt beleuchtete Objekte ;)


    Ach ja: Oder einfach Blender nehmen :P


    Gruß, Klaus

  • AndreW

    Hat das Label Tutorial hinzugefügt