Visa ett inlägg
Gammal 2021-07-10, 02:09   #123
korvtiger
Medlem
 
Reg.datum: Jan 2008
Ort: Uppland, Sverige
Inlägg: 2 728
Standard

Har suttit och grejat med fyrboxen bland annat sedan sist. Jag upptäckte att det finns ett väldigt välgjort lok QR PB15 i TRS2019 som har mycket snygga texturer och dessutom en väldigt snygg fyrbox! Jag kontaktade byggaren (GDennish) på det internationella Trainz-forumet och fick ett väldigt hjälpsamt tillmötesgående med massor av bra tips på hur man ska animera och texurera fyrboxar för att det ska bli snyggt.
Ett tips är att kolla på hans egna mesh-bibliotek som han nyss släppt. Finns på DLS:
<kuid:217537:2064>,<kuid:217537:2091>,<kuid:217537 :2333>,<kuid:217537:2039>

Jag tog med mig dessa idéer och vidareutvecklade dem lite ytterligare. Jag använder tre olika delar:
* En mesh för själva fyrboxen, vilket är en statisk mesh med emission
* En animerad eldsflamma-mesh som jag har satt ut 10 stycken av och som har Aurans gamla texture
* En statisk mesh som bara är en polygon som sitter i fyrboxöppningen med en semitransparent texture med emission för att förhöja känslan av värme inne i fyrboxen.
Alltså typ samma setup som på PB15-loket.

Flamman har jag gjort tre olika animationer av, med tre olika storlekar på flammorna, så jag kan styra flammornas storlek enbart genom att med ett script byta animation på dem.
Dessutom använder jag texture-replacement för att byta ut Albedo-texturen på fyrboxens väggar så att de varierar mellan en rödare nyans när fyrboxen inte är så varm, en orangeare när den är medelvarm och en vitare när den är riktigt varm. Samma sak med eldsflammorna, fast med bara två nivåer, en orangeare när fyrboxen är kallare eller medelvarm och en med vitare flammor när fyrboxen är riktigt varm.
Så dessa två "dimensioner" av fyrboxen styr jag med hjälp av ett script. Färgen styrs baserat på Trainz interna parameter över hur varm fyrboxen är. Flammornas höjd styr jag baserat på draget i fyren, det vill säga en kombination av ifall hjälpblästern är på, samt trycket i ånglådan. Eftersom trycket i ånglådan går upp och ned med ångslagen så får jag dessutom en liten effekt att flammornas storlek fladdrar upp och ned mellan medel och höga flammor med ångslagen vid igångsättning, precis som de gör på riktigt (men då på grund av att avloppsångan som dras upp i skorstenen drar med sig extra mycket luft genom rosterna och fyren). Hur detta ser ut i verkligheten kan man se ganska tydligt på denna video: https://www.youtube.com/watch?v=-LXOLjCGPOM

De olika storlekarna på flammor samt de två varmare färgnyanserna

Själva animationen av flamman var lättare sagt än gjort att få till. Men så här löste jag det till sist.

Jag har använt Aurans gamla flame-texture (Denna, fast i original-upplösning: https://online.ts2009.com/mediaWiki/...:CCG_Fire1.jpg) Jag har sedan gjort en animerad mesh med denna textur på en ensam flamma som jag med hjälp av attachments satt ut 10 stycken av i fyrboxen.
En sådan flam-mesh består av 8 planes, en för varje bild i textur-animationen. Varje plane är kopplat till en empty längst ned på flamman , b.r.flameX, som styr själva animationen. Sedan animerar jag Z-skalan på varje empty, så att Z-skalan är 0 när den är osynlig och 1 när den är synlig. Här kommer dock ett krux: Trainz interpolerar animationen, så om man använder 8 frames i Blender för sin animation(alltså en för varje bild i texturen), så kommer man se en massa tillfällen i Trainz när animationen är halvvägs mellan frame 1 och 2 till exempel, så man har två halvhöga flammor istället för en fullhög. Så det löste jag (med GDennish hjälp) genom att låta varje bild visas i 10 frames och att låta bilderna överlappa med en frame mellan varje bildbyte. Så att b.r.flame0 visas mellan frame 1 och frame 10. På frame 11 så har den Z-scale 0 och blir osynlig. Men redan på frame 10 kommer b.r.flame1 att börja visas och den är alltså dold på frame 9. Sedan visas den till frame 19. Och så vidare. Så i Blender kommer det vara vissa frames där två bilder syns överlappande, men det kommer inte att synas i spelet på grund av interpoleringen. Dessutom satte jag "interpolation" till "constant" i Blender.
Sedan ett tips om man animerar scale i Blender som jag också hade en massa trassel med. För att det ska fungera i spelet så måste man exportera mesherna på en frame där de har full skala (X-scale=1, Y-scale=1, Z-scale=1), annars dyker de kanske inte upp i spelet. Jättekonstigt, men så är det. Jag löste det genom att låta animationen gå från frame 1 till frame 73 och sedan lägga till en keyframe med alla b.r.flameX på frame 0, där de har full skala. Sedan måste man bara se till att stå på frame 0 när man exporterar.
Därefter var det bara att göra tre sådana animationer och exportera, där jag varierade vilken Z-skala jag hade när flammorna var synliga.
Såhär ser det ut i Blender:


Sedan fick jag ett tips om en feature som jag inte visste om. Trainz stödjer HDR-texturer! Jaha, vad ska det vara bra till? Jo: i normala fall använder vi ju PNG-texturer vilka sparar varje färgkanal (RGB = Röd, Grön, Blå) som 8 bitar vardera, alltså som 256 färgnyanser per kanal. I spelet så finns det ju en effekt som kallas "bloom", alltså att ljusa färger smetas ut lite och "blöder över" i mörkare partier av en bild. Se exempel: https://learnopengl.com/img/advanced...om_example.png
Detta sker dock bara på pixlar som blir rendrerade i spelet till att vara ljusare än vad högsta ljusheten i emission på parameter-texturen kan åstadkomma med PNG, så jag trodde det bara fungerade när solen lyser på en yta och gör den ljusare och inte genom materialets egna emission som ju är begränsad av PNG-filens maxljushet. Men man kan istället för en 8 bitars PNG använda en 32 bitars .hdr-bild, vilken kan spara värden som är "ljusare" än vad som är möjligt i en PNG! Så jag tog in min PBR parameter-texture som jag hade gjort som en PNG och i Photoshop, bytte till 32-bitars färgdjup och ökade på nyansen i den röda färgkanalen (som motsvarar emission) till över 1.0, (vilket alltså motsvarar 255 i PNG) På det sättet så kommer ljusheten inne i Trainz att gå över tröskelvärdet som en pixel måste ha för att få den här bloomeffekten. Det tillförde rätt mycket till det hela faktiskt, se själva på följande gif som alltså är inifrån spelet

__________________
-k-
korvtiger besöker inte forumet just nu   Svara med citat