http://zusiforum.eisenbahn-seiten.de/vi ... php?t=1214)
Ich habe mir das Thema dann gestern auch mal für Zusi vorgenommen und es ist auch eine - wie ich denke - sehr praktikable Lösung dabei herausgekommen.
Es sind ja mehrere Aspekte zu berücksichtigen, also der Reihe nach:
1.) z-Flimmern: Auch bei der aktuellen Zusi 2-Version mit dem hochaufgelösten z-Buffer kann man ja bei nahe beieinanderliegenden Polygonen z-Buffer-Flimmern feststellen. Einschneiden der Lampen in den Signalschirm würde nicht helfen, da der mit zunehmendem Abstand wachsende Lichtpunkt sich auch mit dem Schirm überlagern würde. DirectX bietet aber eine Möglichkeit, den Z-Buffer bewußt zu "täuschen". Das ganze läuft unter dem Begriff z-Bias und da es eine sehr hilfreiche Funktion ist, habe ich sie gleich allgmein verfügbar gemacht.
Zusi 3-Doku hat geschrieben:z-Bias: Hier kann der für den z-Buffer relevante Abstand korrigiert werden. Sinnvolle Werte liegen bei +/-0,001. Für Werte kleiner 0 überdeckt das Mesh-Subset also andere Polygone, die eigentlich geometrisch an der gleichen Stelle liegen. Bei Werten größer 0 tritt das Meshsubset hinter gleich liegende Polygone und bei einem Wert von 0 erfolgt eine normale, unveränderte Darstellung. Mit dieser Methode lassen sich z.B. Signallampen direkt in die Ebene des Signalschirms legen oder Beschriftungen aufbringen, ohne daß die Polygone extra ausgeschnitten werden müssen, ohne daß es zu Flimmereffekten durch Rundungsungenauigkeiten im z-Buffer kommt. Die Reihenfolge, in der die Polygone gezeichnet werden, spielt für das Funktionieren dieses Effekts keine Rolle.
Das folgende Bild verdeutlicht das: Es sind drei Quadrate dargestellt, die alle in derselben Ebene liegen. Zwischen dem mittleren und dem unteren kommt es zu Flimmereffekten, da durch Rundungsungenauigkeiten mal ein Pixel des mittleren, mal eines des unteren Quadrats dargestellt wird. Bei dem oberen Quadrat wurde der z-Bias auf -0.001 gesetzt. Damit befindet sich dieses Rechteck in der Tiefenbetrachtung also beim Beschreiben des z-Buffers immer vor dem mittleren Rechteck und überdeckt dieses ohne Flimmern, ohne daß sich seine geometrische Position wirklich verändert hat.
2.) Vergrößerung der Signallichter: Auch bei Abstellung der Flimmerprobleme gemäß 1.) wird ein normales Signallicht ab einem gewissen Abstand kleiner als ein Pixel und wird damit nicht mehr sicher dargestellt. Dagegen hilft eine abstandsabhängige Vergrößerung des Polygons. Über einen einstellbaren Faktor läßt sich das bei Zusi 3 für jedes Mesh-Subset einstellen. Also auf den letzten ca. 150m vor dem Signal wird es normal dargestellt, davor entsprechend vergrößert. Eine sichere Erkennbarkeit ist damit auf über 1000m gewährleistet. Mit dem nächsten Update des Zusi3-Betrachters gibt es eine kleine Demo dazu.
3.) Signalblenden bei Formsignalen: Ein weiteres Problem sind die animierten Formsignale mit ihren animierten Blenden+Beleuchtung. Damit das ganze vorbildgerecht funktioniert, muß die Lampe weißes Licht abgeben und die Blenden müssen sich davor bewegen können und dann von der Lampe quasi durchleuchtet werden. DirectX-mäßig ist das praktisch dieselbe Fragestellung wie Halbtransparenz, allerdings mit etwa anderen Parametern. Damit der Anwender nicht groß nachdenken muß, habe ich eine Vorauswahl draus gemacht - dann auch im nächsten Betrachter zu finden.
Hier zwei kleine Screenshots zum Prinzip:
Das weiße Polygon steht für die Lampe, ist ein völlig normales Polygon mit Nachtfarbe weiß. Die beiden Blenden haben die Nachtfarben grün und rot und modifizierte Blending-Parameter (hier würde eine weitere Vertiefung wohl nur Abschrecken - einfach Typ "Blende" anklicken und freuen ist die Devise)
Und auch bei Nacht bekommt man das gewünschte Ergebnis:
Was der Signalbauer zu beachten hat: Zum Glück nicht besondes viel. Damit ein vergrößerter Lichtpunkt sich um sein Zentrum vergrößert und nicht etwa seitlich auswandert, müssen die Lampen alle auf Koordinate 0/0/0 gebaut und per Signal-Datei an ihren Einsatzort geschoben werden.
Ein Lichtsignal kann in Zukunft also einfach einen schwarzen Schirm haben und die Lichtpunkte werden in dieselbe Ebene davorgesetzt. Durch z-Bias und Lichtvergrößerung werden sie hervorragend zu erkennen sein.
Bei den Formsignalblenden gelten die üblichen Regeln für Halbtransparenz, also Zeichnen von hinten nach vorne (erst die Laterne, dann die Blenden), ansonsten muß man nur die Blenden als entsprechenden Typ kennzeichnen, auch in Kombination mit z-Bias und Lichtpunktvergrößerung (wobei ich da noch checken muß, ob das vernünftig aussieht, wenn sich beide Blenden vergrößern...)
Carsten