Svenska 3D-Tåg - Forum  
 

Om det här är ditt första besök, se till att gå till vår FAQ (finns även länk till FAQ i navigeringsmenyn ovan). Du kan behöva att registrera dig innan du kan posta (finns även en länk till registrering i navigeringsmenyn ovan). För att titta på inlägg, välj det forum som du vill besöka från de som är listade nedan.

Gå tillbaka   Svenska 3D-Tåg - Forum > N3V Trainz > 3D-design - Trainz

Svara
 
Ämnesverktyg Visningsalternativ
Gammal 2021-06-08, 17:36   #1
tanigardi
Medlem
 
Reg.datum: Nov 2009
Ort: Gävle
Inlägg: 163
Standard

Kolbädden har jag satt upp ett material med emission i Blender.

fyr_emit.jpg

Bakade ut emission materialet, sparade av det för att kopiera över det till albedon i materialet för trainz (maskade förståss av allt utom kolbädden), sedan gjorde jag en svartvit version av mitt emission-materialet som sparade av för att sedan kopiera in det i det slutliga materialet för Trainz. Resten av fyrens, valvets och väggarnas material satte jag upp med "area light" under kolbädden och bakade ut och gjorde på samma sätt med kolbädden. Materialet till Trainz består av både kolbädden, fyrens väggar och valvet.

Vad gäller displacementet på kolbädden använde jag mig av AO-mappen som ingick i PBR-materialet som jag laddat ned. Justerade den i Gimp så att de högsta punkterna var helt vita. Bakade ut den till lämplig ställe på Principeld BSDF (tror att jag valde metallic) och lade in den i normalmappens alphakanal.

Vad gäller nivåerna i height i normalmappen så har jag förstått det så att Trainz tolkar det så att 100% vitt är i nivå med meshet och alla mörkare nyanser hamnar lägre än meshets nivå, vilket gör det ju väldigt svårt att få att fungera när det är ett komplicerat objekt som är texturerat.
tanigardi besöker inte forumet just nu  
Svara med citat
Gammal 2021-06-08, 19:25   #2
tanigardi
Medlem
 
Reg.datum: Nov 2009
Ort: Gävle
Inlägg: 163
Standard

Hade tänkt att lägga upp en bild på fyren i Trainz, men forumet ville tydligen inte att jag skulle posta den

Här kommer den (förhoppningsvis).

fyr.jpg
tanigardi besöker inte forumet just nu   Svara med citat
Gammal 2021-06-08, 20:37   #3
korvtiger
Medlem
 
Reg.datum: Jan 2008
Ort: Uppland, Sverige
Inlägg: 2 728
Standard

Ah, väldigt snyggt! Jag ska se om jag kan knåpa ihop något liknande!

Fixade färdigt med scriptet för att öppna rätt lucka beroende på om det lastas kol eller vatten idag. Här är de relevanta delarna:

Kod:
class #### isclass STLSteamEngine {

    Asset coalAsset;
    Asset waterAsset;

    public void Init() {
        inherited();
        
        .... // Initialize STLSteamEngine things

        coalAsset = me.GetAsset().FindAsset("coal");
        waterAsset = me.GetAsset().FindAsset("water");
    }


    float BeginLoad(LoadingReport report) {
        int i;
        for (i = 0; i < report.srcQueue.GetProductList().size(); i++) {
            if (report.srcQueue.GetProductList()[i] == coalAsset) {
                // Öppna kolboxluckorna
            }
            else if (report.srcQueue.GetProductList()[i] == waterAsset) {
                // Öppna vattentankluckorna
            }
        }
        return 1.0;
    }


    float EndLoad(LoadingReport report) {
        int i;
        for (i = 0; i < report.srcQueue.GetProductList().size(); i++) {
            if (report.srcQueue.GetProductList()[i] == coalAsset) {
                // Stäng kolboxluckorna
            }
            else if (report.srcQueue.GetProductList()[i] == waterAsset) {
                // Stäng vattentankluckorna
            }
        }
        return 1.0;
    }

};
I min version har jag dock gjort så att man kan öppna luckorna manuellt genom menyn som dyker upp om man högerklickar på loket i driver och väljer "View details". Jag har gjort likadant på Lans Sb och B lok som finns på STLs hemsida.

Init är den metod som anropas först när man skapar ett lok av denna typen och den letar först reda på referenser till Assetsen för coal och water och sparar dem i variablerna coalAsset och waterAsset. Sedan är det BeginLoad och EndLoad som anropas före och efter lastningen sker. Dessa är väldigt lika. Jag har en for-loop som går igenom alla produkter som kommer att lastas enligt den LoadingReport som skickas med till dessa metoder. Sedan kollar jag bara att om någon av de produkter som lastas är coalAsset eller waterAsset så får man lägga till kod för att öppna/stänga luckorna. Det gör man antagligen med:

Kod:
SetMeshAnimationState("tank_lid", true);
för att öppna och
Kod:
SetMeshAnimationState("tank_lid", false);
för att stänga, ifall meshen heter tank_lid i mesh tablen. Dessa animerar till sista respektive första framen i animationen för meshen.

Antagligen har du redan ett script till ditt lok, så då är det bara att lägga till de nya delarna från exemplet ovan. Init metoden finns redan, så där räcker det med att kopiera in de två sista raderna med coalAsset = ...osv. BeginLoad och EndLoad är bara att kopiera och klistra in, samt lägga till kod för att faktiskt öppna eller stänga luckor och så vidare.
Om du skulle behöva hjälp att scripta loken sedan så är det bara att säga till så kan jag hjälpa till!
__________________
-k-
korvtiger besöker inte forumet just nu   Svara med citat
Gammal 2021-06-09, 16:37   #4
tanigardi
Medlem
 
Reg.datum: Nov 2009
Ort: Gävle
Inlägg: 163
Standard

Det var verkligen snabbt marscherat med "luck-scriptandet". Verkar ju inte särskilt komplicerat att lägga till i mitt loks script (i princip samma som till loket Thor).

Att kunna öppna luckorna manuellt verkar mycket intressant, hade faktiskt funderat på om det skulle vara möjligt. Blev inte riktigt klok på om det sista med "SetMeshAnimationState", gäller för manuellt öppnade eller hör till det automatiska.

Måste verkligen ta i tu med att börja sätta mig in i scriptande , det finns ju grundläggande turorials någon stans på Aurans site.

Skulle vara oerhört tacksam om hjälp med scripten om jag skulle stöta på patrull (vilket jag förmodligen kommer att göra)
tanigardi besöker inte forumet just nu   Svara med citat
Gammal 2021-07-10, 02:09   #5
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
Gammal 2021-07-14, 17:19   #6
tanigardi
Medlem
 
Reg.datum: Nov 2009
Ort: Gävle
Inlägg: 163
Standard

Fantastiskt , det här är något jag verkligen saknat, har levt i tron att det inte var möjligt i Trainz 19. Blir något att ta i tu med och implementera i Sexans hytt. Skall väl förhoppningsvis lyckas få till något, det är ju en otroligt utförlig och detaljerad beskrivning. Det är väl det där med scriptandet som blir problem kan jag tro.
tanigardi besöker inte forumet just nu   Svara med citat
Gammal 2021-07-14, 20:13   #7
korvtiger
Medlem
 
Reg.datum: Jan 2008
Ort: Uppland, Sverige
Inlägg: 2 728
Standard

Scriptandet kan jag hjälpa dig med när du kommer dit! Vore ju kul att se ett färdigt svensk smalspårsånglok av toppklass! Om du vill använda mina texturer, eller tjuvkika på dem och sedan göra egna, så är det bara att säga till.
__________________
-k-
korvtiger besöker inte forumet just nu   Svara med citat
Svara


Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av
Forumhopp



Alla tider är GMT +2. Klockan är nu 04:03.


Powered by vBulletin® Version 3.7.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
© Svenska 3D-Tåg 2001-2009