Začneme prípravou textúry ktorú si pripravíme s niekoľkých kolmých fotografii priecestia tak aby sme v nej mali všetky dôležité súčasti. Nakoniec výslednú bitmapu upravíme v editore pridaním kontrastu, doostrením, vyhladením a podobne podľa potreby. Textúru načítame do gmaxu ako obojstrannú.
Modelovať začneme tienitkom z jednoduchej rúrky o priemere 0.122m, 0.125m a výške 0.45m. Bude zložená z 16 častí aby sme mali pekný oblúk a na výšku z jedného segmentu. Je samozrejme možné počet častí znížiť pre ušetrenie polygónov na 8. Nebude už síce až tak pekný oblúk, ale bude to ešte postačovať. Menej častí by nemal mať lebo by sa tienitko stalo hranaté.
Z
trubice odstránime spodnú polovicu po prevode na
EDITABLE MESH a onačení si príslušných plôch.
Teraz
si vyberieme vertexy a označíme si zadné
spodne a pomocou SCALE ich mierne roztiahneme. Potom označíme predne a
upravíme
tvar tienitka tak ako je na obrázku zúžením priemeru oproti zadnej
časti a
miernym zošikmením do oblúka.
Teraz
si označíme ostávajúce predné a zadné plochy
a odmažeme ich ako nepotrebné.
Odmazať môžeme aj všetky vnútorné
plochy ak
používame obojstranný materiál čo sa zobrazí na vonkajšiu i vnútornú
stranu.
Podmienkou je zhoda mapovania a časti textúry ktorou mapujeme obidve
strany. Pri rozdielnom mapovaní musíme zachovať aj vnútornú
stranu. Ak
používame obojstrannú textúru nieje nutné toto tienitko modelovať z
rúrky, ale
stačí nám jednoduchý cylinder pričom aj ušetríme niekoľko
predchádzajúcich
krokov.
Teraz vytvoríme jednoduchý cylinder o polomere 0.2m, výške najmenej
0.01m, ako
16 uholník a s jedným segmentom na výšku. Pomocou ALIGN v ose X ho
prisunieme k
tienitku a vycentrujeme k nemu.
Podobne
z cylindra vyrobíme zadnú časť rovnakého
priemeru ako tienitko a na výšku z dvoch segmentov. Zadný po prevode na
EDITABLE MESH a označení vertexov zúžime aby sme dostali náznak oblúka
paraboly
žiarovky.
A
nakoniec z bežného hranolu ukotvenie svetla o
stojan ktoré mierne zapustíme do paraboly.
kuid
<kuid:XXXXXX:XXXXXX> kuid-table { } obsolete-table { } kind "texture" category-region-0 "SK" category-era-0 "2000s" trainz-build 2 category-class "JC" asset-filename "coronared" username "corona red" |
Adresár
bude obsahovať aj ďalší txt súbor
coronared.texture.txt prislúchajúci a definujúci samotnú bitmapu.
Primary=Coronared.bmp Tile=st |
kuid
<kuid:XXXXX:XXXXX> region "SK ZEL PRIECESTIA" type "SIGNALIZACIA" script "svetlo" class "svetlo" kind "scenery" kuid-table { cervena_corona <kuid:XXXXX:XXXXX> } mesh-table { default { auto-create 1 mesh "objekt.im" effects { light0 { kind "corona" att "a.light1" object-size 0.1 } light1 { kind "corona" att "a.light2" object-size 0.1 } } } } soundscript { dayloop { repeat-delay 0 distance 10,150 sound { svetlo.wav } } } light 1 category-region-0 "SK" category-era-0 1970 category-class "WX" asset-filename "objekt" username "Signalizacia stara 135" |
Dôležité
je priradenie corony pre script. Deje
sa to deklaráciou v kuid-table
{} kde
ku kuidu corony priradíme označenie napríklad s "cervena_corona".
Na výraz "cervena_corona" sa potom bude odvolávať script ktorý pojem
kuid nepozná.
mesh-table {}
definujeme default im
súbor exportovaného modelu svetiel a v časti effects
{} samotné blikajúce svetla pomocou povinného tagu "corona", povinného
jedinečného názvu light0
a light1,
a pomocou priraďovacieho tagu definovaných helper pointov v gmax. Tag attobject-size určuje
veľkosť a teda aj
intenzitu svetla.
V časti soundscript {}
definujeme
zvukový wav súbor bzučiáku kde
repeat-delay
s parametrom 0
určuje že medzi
opakovaním nebude žiadna pauza a zvuk sa bude teda prehrávať stále
dokola bez
prestávky. Tag distance
určuje vzdialenosť
v metroch kde bude zvuk počuť na plno a tlmene. Tag sound
{} určuje samotný wav súbor ktorý musí byť v tom istom adresáre,
resp
definovaný.
V configu je ešte tag script
a class ktorý definuje
script kde je definované
samotné blikanie. Výraz v úvodzovkách musí byť zhodný s názvom
diskového
súboru. Samotný script pre jednoduché blikanie bude potom vyzerať
nasledovne
include
"trackside.gs" include "mapobject.gs" class svetlo isclass MapObject { thread void FlashControll(); void SetLight (string lightname, string color); public void Init() { FlashControll(); } void SetLight (string lightname, string color) { if ( color ) { SetFXCoronaTexture ( lightname, GetAsset().FindAsset(color)); } else { SetFXCoronaTexture ( lightname , null); } } thread void FlashControll() { int i, counter = 0; string red; while (1) { if (counter == 0) { red = "cervena_corona"; SetLight ( "light0" , red); SetLight ( "light1" , null); } else { SetLight ( "light0" , null); SetLight ( "light1" , red); } Sleep(0.6); counter = (counter+1) % 2; } } }; |
Script v zásade využíva interný časovač a výmenu resp. zobrazovanie corony v určitej časovej dĺžke raz na jednom a raz na druhom bode. Pre lepšie pochopenie doporučujem si prečítať niečo o programovacom jazyku ktorý používa tento script. Pre TRS 2006 je možné naprogramovať script tak, že svetlá sa spustia iba pri prejazde vlaku s využitím interných nových funkcii. To samé na základe existujúcich US semaforov jedného tvorcu, ktoré som v dávnejšej dobe náhodou videl a ktoré fungujú rovnako v TRS 2004 je zjavne možné takéto ich fungovanie definovať aj pre TRS 2004, ale trocha iným spôsobom. Keďže ale každý script a rovnako aj animácia zaťažuje jadro TRS, hlavne ak je script zložitý či animácia dlhá, a naviac pri jazde vlakom vždy keď vlak míňa prejazd sú závory aj tak spustené a svetlá blikajú, sa teda aj tak nedá vychutnať takáto aj keď efektná a reálna funkcia závor.