Ladungsabhängige Modifikation des Auspuffrauchs

  • Hallo zusammen,


    ich bin Chris und neu hier.
    Aber ich bin kein RS/RW-Newbie, ich hab angefangen, als das ganze noch Railsimulator und nicht Railworks hieß.
    Ich finds toll das es hier so ein gutes Forum gibt mit jeder Menge Tips und Tricks.


    Womit wir beim Thema wären.
    Ich hab nämlich auch ein paar Tips & Tricks für euch.
    In meinem RW3-Lokschuppen steht schon seit längerer Zeit die Class 66.
    So weit, so gut.
    Mit der Zeit ist die "66er" iwie zu der meistgefahrenen Lok geworden.
    Allerdings und jetzt komme ich endlich zur Sache, hab ich mir gedacht, das ist doch unrealistisch, wenn da immer die gleiche Menge Rauch in der gleichen Farbe aus dem Auspuff kommt.
    Daraufhin kam die 66 ins AW und ich begann erste Überlegungen, wie man den Rauch ändern könnte.
    Nach einiger Zeit fand ich -auch durch Recherche in diesem Forum- einen Weg, die Menge und Farbe des Rauches zu ändern.
    Das habe ich getan und bald fuhr die Lok mit anthrazitfarbenem Rauch über meine Strecken.
    Damit war ich aber noch nicht zufrieden, denn es kam immer noch, egal welche Generatorladung, die gleiche Menge in der gleichen Farbe raus.
    Da habe ich mir gedacht, das kann nicht sein und die 66 kam wieder ins AW und ich überlegte weiter.
    Jedenfalls, um das ganze hier etwas abzukürzen; ihr merkt, ich beginne zu labern, zeig ich euch einfach mal, wie man ladungsabhängigen Rauch scripted.
    Als Beispiel dient die Class 66.


    Beginnen wir mit der Menge und Farbe, noch undynamisch.


    Im Verzeichnis /Railsimulator/Railvehicles/Class66 ist der Ordner "Particles"
    In ihm findet ihr die Datei "emd_66_exhaust" als .bin und .xml.


    Zur korrekten Funktion müssen wir die .bin über Serz.exe in eine .xml umwandeln, welche wir mit Editor u.ä. bearbeiten.
    Das sieht dann so aus:


    <_fEmissionRate d:type="sFloat32" d:alt_encoding="000000A09999B93F" d:precision="string">0.01</_fEmissionRate>
    <_fVelocityVariance d:type="sFloat32" d:alt_encoding="000000000000F03F" d:precision="string">1</_fVelocityVariance>
    <_fResistanceFactor d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</_fResistanceFactor>
    <_bIntense d:type="cDeltaString">eFalse</_bIntense>


    <cHcColour>
    <Red d:type="sFloat32" d:alt_encoding="000000009695D53F" d:precision="string">0.337255</Red>
    <Green d:type="sFloat32" d:alt_encoding="000000009695D53F" d:precision="string">0.337255</Green>
    <Blue d:type="sFloat32" d:alt_encoding="000000009695D53F" d:precision="string">0.337255</Blue>
    <Alpha d:type="sFloat32" d:alt_encoding="000000A01611B13F" d:precision="string">0.066667</Alpha>
    </cHcColour>
    </_HcInitialColor>
    <_HcMidColor>
    <cHcColour>
    <Red d:type="sFloat32" d:alt_encoding="000000009695D53F" d:precision="string">0.237255</Red>
    <Green d:type="sFloat32" d:alt_encoding="00000040D4D2D23F" d:precision="string">0.194118</Green>
    <Blue d:type="sFloat32" d:alt_encoding="00000040D4D2D23F" d:precision="string">0.194118</Blue>
    <Alpha d:type="sFloat32" d:alt_encoding="000000A01E14A43F" d:precision="string">0.039216</Alpha>
    </cHcColour>
    </_HcMidColor>
    <_HcFinalColor>
    <cHcColour>
    <Red d:type="sFloat32" d:alt_encoding="000000201615C53F" d:precision="string">0.164706</Red>
    <Green d:type="sFloat32" d:alt_encoding="000000201615C53F" d:precision="string">0.164706</Green>
    <Blue d:type="sFloat32" d:alt_encoding="000000201615C53F" d:precision="string">0.164706</Blue>
    <Alpha d:type="sFloat32" d:alt_encoding="000000A0FD0F903F" d:precision="string">0.015686</Alpha>
    </cHcColour>
    </_HcFinalColor>
    <_fPercSwitchToMidColor d:type="sFloat32" d:alt_encoding="000000A09999C93F" d:precision="string">0.2</_fPercSwitchToMidColor>
    <_fSpin d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</_fSpin>
    <_fSize d:type="sFloat32" d:alt_encoding="000000000000D03F" d:precision="string">0.25</_fSize>
    <_fFinalSize d:type="sFloat32" d:alt_encoding="000000000000E83F" d:precision="string">0.55</_fFinalSize>
    <_fLifeCycle d:type="sFloat32" d:alt_encoding="0000000000000040" d:precision="string">2</_fLifeCycle>
    <_fParticleTemp d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</_fParticleTemp>
    <_fParticleMass d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</_fParticleMass>
    <_vSpinAxis>


    Damit könnt ihr schonmal die Farbe und Menge verändern.


    Die Farbe legt ihr mit den Zahlen vor Red, Green, Blue & Alpha fest.
    1 heißt weiß, 0 ist pechschwarz.
    Emission Rate legt die Menge fest, 0 ist nichts, 0.05 aufwärts schon ne Menge.
    Unter den Farben legt ihr die Größe der Rauchsäule fest.
    Bei fSize> und fFinalSize>; 0 ist nichts, 1 schon ziemlich riesig; es geht aber mehr als 1.


    So weit, so gut.


    Dynamischen Rauch bekommt man mit einem .xml File genannt EngineScript.
    Diese findet ihr z.B. bei der Class 166.


    Diese sieht so aus (schon für die Class 66 angepasst):
    --------------------------------------------------------------------------------------
    -- Engine Script for Class 66
    --
    -- (c) Railsimulator.com 2011
    --
    -- Provides script for variable exhaust smoke.
    --
    --------------------------------------------------------------------------------------



    -- maximum tractive effort for determining smoke density. Acceleration rate for AI.


    MAXTE = 0.7
    ACCELRATE = 0.25


    gSmokeColourR = 1.0
    gSmokeColourG = 1.0
    gSmokeColourB = 1.0
    gEmitRate = 0.05


    -------------------------------------------------------------------------------------


    function Initialise ()



    -- Get emitter values.


    gSmokeColourR, gSmokeColourG, gSmokeColourB = Call( "Exhaust:GetEmitterColour" )



    -- Stores for checking when values have changed.


    gDriven = 0


    Call( "BeginUpdate" )


    end


    -------------------------------------------------------------------------------------


    function OnControlValueChange ( name, index, value )


    if Call( "*:ControlExists", name, index ) then


    Call( "*:SetControlValue", name, index, value );


    end


    end


    -------------------------------------------------------------------------------------


    function Update ( time )



    -- Check for player train.


    if Call( "GetIsPlayer" ) == 1 then


    -- Check if player is driving this engine.


    if ( Call( "GetIsEngineWithKey" ) == 1 ) then
    if gDriven == 0 then
    gDriven = 1
    Call( "*:SetControlValue", "Active", 0, 1 )
    end
    else
    if gDriven == 1 then
    gDriven = 0
    Call( "*:SetControlValue", "Active", 0, 0 )
    end
    end


    -- Get tractive effort values for this vehicle.
    TractiveEffort = Call ( "GetTractiveEffort" )
    TractiveEffort = math.abs ( TractiveEffort )


    else -- This is an AI train.


    -- Tractive effort doesn't work for AI, so use acceleration.


    Accel = Call( "GetAcceleration" )
    Speed = Call( "GetSpeed" )


    -- Unfortunately acceleration is signed based on direction loco is facing (sic).
    if Speed < 0 then
    Accel = Accel * -1
    end


    if Accel > ACCELRATE then
    TractiveEffort = MAXTE
    elseif ( math.abs(Speed) > 1 ) and ( Accel > -0.1 ) then
    TractiveEffort = MAXTE/2
    else
    TractiveEffort = MAXTE/11
    end


    end



    if TractiveEffort < MAXTE/10 then


    gSmokeColourR = 0.197255
    gSmokeColourG = 0.197255
    gSmokeColourB = 0.197255
    Call ( "Exhaust:SetEmitterColour", gSmokeColourR, gSmokeColourG, gSmokeColourB )
    Call ( "Exhaust:SetEmitterRate", gEmitRate )


    end


    if ( TractiveEffort <= MAXTE/2 ) and ( TractiveEffort >= MAXTE/10 ) then


    gSmokeColourR = 0.237255
    gSmokeColourG = 0.194118
    gSmokeColourB = 0.194118
    Call ( "Exhaust:SetEmitterColour", gSmokeColourR, gSmokeColourG, gSmokeColourB )
    Call ( "Exhaust:SetEmitterRate", 0.01 )


    end


    if TractiveEffort > MAXTE/2 then


    gSmokeColourR = 0.164706
    gSmokeColourG = 0.164706
    gSmokeColourB = 0.164706
    Call ( "Exhaust:SetEmitterColour", gSmokeColourR, gSmokeColourG, gSmokeColourB )
    Call ( "Exhaust:SetEmitterRate", 0.005 )


    end


    end


    Bitte lasst euch davon nicht einschüchtern, da müsst ihr nichts großartig programmieren, eigentlich läuft die Sache wieder nur mit den Zahlen.
    Die Farben sind gleich wie bei der ersten Datei, die Zahlen laufen auch genauso.
    Erweiternd könnt ihr bei "Exhaust:SetEmitterRate", 0.01" noch die Menge bei der angegebenen Ladung festlegen.


    Damit der Rauch aber ladungsabhängig wird, müssen in der Datei "emd_66_script" die Drehzahlen angepasst werden.
    Bei idlerpm muss 300, bei maxrpm 903.
    Was auch noch zu tun ist, und das ist eigentlich das wichtigste, es muss bei z.B. "emd_66_green" noch "emd_66_script" in "emd_66_EngineScript" geändert werden. Bei der "emd_66_green" ists auch wieder der gleiche "Terz mit Serz" :)
    Das mit der Ladungsabhängigkeit und der Farbe könnt ihr übrigens für jede Lok anders einstellen.


    Ich denke, das wars fürs erste. Wenn ihr Fragen habt, nur zu, dafür sind wir ja hier im Forum. ;)

  • Sorry, aber für ne "große Leistung" fehlt mir hier einfach noch die Erleiterung der Werte im Detail. Das ist bis jetzt nur rauskopiert und kaum erklärt was da was macht. Und dass auch die Partikeltexturen eine wichitge Rolle spielen. Ohne die wirds nicht sonderlich rauchig. Ich sach das nicht einfach so. Ich hab mir erst vor paar Tagen eine Lok hergenommen und im Script (das genau das gleiche da oben war) ein wenig rumexperiomentiert mit den Werten und da tat sich dann nicht wirklich viel am Emmitter. Zumal bei dem Scriot da oben eine wirkliche Abhängigkeit von Drehzahl und Last nicht erreicht wird. TE geht beim Aufschalten von Last sofort und Zügig über 1 drüber, bis weit hin über 400 und mehr. Die Zeilen da hätte man auf ein drittel einkürzen können. Unnötiger Ballast ist das. Schön dass sich wer mit beschäftigt und Info teilen will, aber das muss schon genauer sein. Am besten von der Erstellung eines Particle-Emmiters hin über die passenden Texturen und die nötigen und sinnvollen Paramteter bis zur LUA Programmierung um die Emmitter umzuschalten und zu steuern. Das da oben ist nur Copy&Paste. Was dann nicht mal bei jeder Lok funktioniert wenn die Partikeltexturen nich da sind.


    Ick wes, ick mecker nur rum. Ich mag aber keine halben Erklärungen. Da gibts schon genug im Railworks von. Siehe halbfertige Wiki-Tuts zu LUA etc etc.

  • Hallo Chris und willkommen im Forum!
    Schöner Einstand mit einem hilfreichen Post, trotzdem bin Ich da ein bisschen bei Maik. Schöner Text und gute Einleitung, aber danach hört es dann auf. Ein Copy&Paste Skript, ohne hervor zu heben welche Stelle wie und warum geändert wurde ist zum selber nachbauen oder übertragen auf andere Loks mäßig sinnvoll.
    Dazu gibt es keinen Hinweis ob der Code vollständig ist (gehe ich der Einfachheit halber aber mal von aus) und die Formatierung desselben hätte man auch hier im Forum geschickter machen können, dazu gibts schließlich extra den [CODE] Tag. Okay, erster Eintrag hier, muss man nicht wissen, aber könnte man ;)


    Maik: Er sagt aber auch er hat das nicht von Anfang an selbst gebaut, von daher kann deine Forderung das genauso hier aufzuschreiben gar nicht erfüllt sein. Falsche Vorraussetzung deinerseits. Und deine sehr allgemeine Aussage "hätte man auf ein Drittel kürzen können" bietet nicht wirklich Hilfe zur Verbesserung des Skripts.


    (Anmerkung: dieser Post ist meine eigene, persönliche Meinung als Foren-Nutzer und nicht in Zusammenhang mit dem blauen Titel links unter meinem Namen zu sehen)

  • Er sagt aber auch er hat das nicht von Anfang an selbst gebaut, von daher kann deine Forderung das genauso hier aufzuschreiben gar nicht erfüllt sein. Falsche Vorraussetzung deinerseits. Und deine sehr allgemeine Aussage "hätte man auf ein Drittel kürzen können" bietet nicht wirklich Hilfe zur Verbesserung des Skripts.

    Ja entschuldigung dass ich nicht gleich mit fertigen Beispielen komme. Aber ich poste es eben erst wenn ich weis was da was bedeutet und das ist bisher nicht der Fall. Die Emmitter kommen bei mir ert noch dran. Momentan brauch ich die nicht und beschäftige mich damit auch nicht weiter. Zum Einkürzen aber ein kleines Beispiel das hier aber nur 4 Zeilen Code spart in der Eile (und wenn man poragmmiert dann bitte immer auf einheitlichen Code achten ... entweder ich nutze Klammern oder nicht ... ich bin für deren Nutzung und auch das ";" wurde nicht zum spass erfunden):



    PS EDIT: es sind hier logische Fehler bereits in diesem Stück Code die ich jetzt nicht berichtigt habe.

  • Berichtigt ohne es zu Testen. Block 1 ist überflüssig da eh nie separat wahr. Er wird immer vom 3. Block überschrieben, bzw. kam Block 1 gar nicht in Versuchung da immer Block3 wahr ist wenn Blok1 wahr ist.



    Jetzt isses kürzer oder ^^ .. und ja ich weis dass es nicht mehr vollständig ist. Man müsste es neu schreiben un statt TE die Drehzahl hernehmen (je nach Loktyp). Bei Diesel-Elektischen Loks ist die Drehzahl entscheidender als der TE. Denn der Generator liefert bei gleichen Drehzahlen immer die gleiche Gegenkraft für den Motor und so ist der Rusausstoß auch gleichbleibend.

  • Hmm. Ok. War ein Denkfehler meinerseits. Irritiert aber auch dermaßen die Rechnung mit dem TE dort. Wieso bricht man hier TE durch statt einfach nach festen Werten zu gehen. TE/2 ist immer der selbe wert bei der Lok. Egal. Ich werde das sowieso noch neu erfinden müssen. Nur nicht jetzt.

  • Guten Abend,


    erstmal danke für die vielen Antworten.
    Ich bitte eventuelle Fehler betreffend Format und Menge zu entschuldigen.
    Ich hoffe, ich habe damit nicht für unnötigen Ärger gesorgt, wenn doch, tut mir das leid.


    Jedenfalls, was das Script angeht, ich bin kein Programmierer oder Lokbauer.
    Ich hab das eher zufällig gefunden, und um Missverständnisse zu verhindern, ich habe das nicht selber gescripted, nur verändert.
    Ich dachte halt, das euch das vielleicht auch interessiert...


    Wie dem auch sei,


    Grüße Chris

    Einmal editiert, zuletzt von Chris ()

  • So ich habs mir nicht nehmen lassen und mal ein bissel gebastelt. Dabei rausgekommen ein kleines Video zu reinen Demonstrationszwecken. Mit der Realität hat das nichts zu tun und mit Umweltschutz schon gar nicht. Ich habe den Emmitter völlig neu eingestellt. Dabei immer wieder versucht rauszufinden was welcher Parameter macht. Alles hab ich noch nich durch, aber mir wird schon einiges klarar. Die Partikeltextur ist auch noch fehlerhaft. Ausserdem wird man für ein vernünftiges Abgasverhalten mindestens 4 Emmitter in der Lok benötigen die dann fließend umgeschaltet werden. Man sieht ja hier dass die Ausstoßrate für die hohe Drehzal zu groß ist. Da muss eben dann ein Emmitter hin der weniger Partikel raushaut. Das hat auch nix mit der EmmiterRate zu tun die man mit Lua steuern kann. Es geht um die Menge an Partikeln pro Ausstoß, die kann man nämlich auch regulieren. Die Farbe ist natürlich jetzt etwas zu kräftig. Aber wie gesagt eine Demonstration. Die ganzen Werte sind Drehzahlabhängig. Geht aber auch mit weiteren Parametern wie TE oder Accelleration oder Ampere oder weis der Geier was. Auch die DeltaRPM ist noch mit reinzubringen für den "Schluckauf" des Motors. Fantasie ist eben geboten. Auch lassen sich mit Gravity und Velocity noch nette Effekte herzaubern. Richtig fetten dichten und langsam schwebenden Rauch wird man aber leider nicht bekommen, denn dann geht die Partikelzahl in die 10tausende und das gibt nur noch eine Diashow.


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    PS: Das Script ist nicht fertig, die Emmitter sind nicht fertig -> ergo bitte keine Fragen danach
    PPS: die Lok ist nicht fertig und nicht von mir, bitte auch dazu keine Fragen ... es gibt keine Antworten

  • So ich habs mir nicht nehmen lassen und mal ein bissel gebastelt. Dabei rausgekommen ein kleines Video zu reinen Demonstrationszwecken. Mit der Realität hat das nichts zu tun und mit Umweltschutz schon gar nicht. Ich habe den Emmitter völlig neu eingestellt. Dabei immer wieder versucht rauszufinden was welcher Parameter macht. Alles hab ich noch nich durch, aber mir wird schon einiges klarar. Die Partikeltextur ist auch noch fehlerhaft. Ausserdem wird man für ein vernünftiges Abgasverhalten mindestens 4 Emmitter in der Lok benötigen die dann fließend umgeschaltet werden. Man sieht ja hier dass die Ausstoßrate für die hohe Drehzal zu groß ist. Da muss eben dann ein Emmitter hin der weniger Partikel raushaut. Das hat auch nix mit der EmmiterRate zu tun die man mit Lua steuern kann. Es geht um die Menge an Partikeln pro Ausstoß, die kann man nämlich auch regulieren. Die Farbe ist natürlich jetzt etwas zu kräftig. Aber wie gesagt eine Demonstration. Die ganzen Werte sind Drehzahlabhängig. Geht aber auch mit weiteren Parametern wie TE oder Accelleration oder Ampere oder weis der Geier was. Auch die DeltaRPM ist noch mit reinzubringen für den "Schluckauf" des Motors. Fantasie ist eben geboten. Auch lassen sich mit Gravity und Velocity noch nette Effekte herzaubern. Richtig fetten dichten und langsam schwebenden Rauch wird man aber leider nicht bekommen, denn dann geht die Partikelzahl in die 10tausende und das gibt nur noch eine Diashow.


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    PS: Das Script ist nicht fertig, die Emmitter sind nicht fertig -> ergo bitte keine Fragen danach
    PPS: die Lok ist nicht fertig und nicht von mir, bitte auch dazu keine Fragen ... es gibt keine Antworten


    haha black smokey jo . maik you need to use better oil in this machine ;)

  • Das ist eine Lok der Deutschen Reichsbahn der ehemaligen DDR! Noch Fragen? ;)


    Ansonsten habe ich zum Beispiel auch schon die BR 612 mit üblen Rauchfahnen gesehen (lag da wohl an dem besonderen Kraftstoff den die da eine Zeitlang gefahren sind!)


    Edit: Nach Ansicht des Videos muss ich sagen, Ihr habt den Klang sehr gut getroffen. Von meinem Elternhaus hörte ich immer die Lokomotiven im Tal (da war der eine große Bahnhof unseres Ortes).


    Die Farbe des Qualmes deutet auf jeden Fall auf eine fette Einstellung des Gemisches im Vollast-Bereich hin! ;)

    Einmal editiert, zuletzt von Rolf Schreiter ()

  • Cooles Video Maik da! Na das erinnert mich bei Vollgas ein bischen an die "Finsterlinge" mit den gelben Augen drin beim "Kleinen Prinzen..." Also Klasse ist schonmal die Abhängigkeit von der Farschaltung (auch das Versiegen beim Rollen lassen), je dunkler es wird desto "ätzender" sprich schärfer wird aber auch die Abgrenzung zur Umgebung, da müsste es eine bessere Verflüchtigung hinten raus geben. Nun wissen wir alle egal ob aus Ost oder West, so ein Dauerbrenner waren sie nicht vielleicht noch ne schlecht eingestellte Taigatrommel, also das ganze müsste irgendwie nach ein paar Sekunden Vollgas schwächer werden und vielleicht mit der Geschwindigkeit eher abnehmen (sprich die niedrigen Gänge (Anfahren, Steigungen) machen mächtig Dreck. Bezüglich Zuglänge/Gewicht/Anfahrzugkraft gibts sicher Möglichkeiten. Gruß

  • Dieses Script lässt sich gar nicht einsetzen da es auf diese Lok beschränkt ist. Ausserdem ist es nur ein Test gewesen. Man lese weiter oben nochmal genauer.