1. Dashboard
  2. Forum
  3. Filebase
  4. Lexikon
  5. Artikel
  6. Spieletest
  7. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  8. Zur Transport Fever Community
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Forum
  • Filebase-Eintrag
  • Lexikon
  • Artikel (Bewertungssystem)
  • Erweiterte Suche
  1. WiSim Welt
  2. Forum
  3. Spiele
  4. Cities in Motion
  5. Modding und Erweiterungen
  6. Modding-Hilfen

Modding Objekte, Verkehrswege und andere Props

  • ArkenbergeJoe
  • 5. September 2011 um 22:27
  • ArkenbergeJoe
    Gast
    • 14. Oktober 2011 um 00:18
    • #21

    Hab mich mal mit den Alphas der DDS-Texturen (vor allem bei der _n.dds) bei GIMP auseinander gesetzt. Diese werden unter anderem gebraucht, wenn Teile eines Gebäudes farblich anders abgesetzt sein sollen (Aussenfassade), aber andere Teile nicht eingefärbt werden sollen (Türen, Fenster)
    Da funktioniert es so:

    • Reiter Ebene anklicken und dann im Auswahlmenü Maske > Ebenenmaske hinzufügen...
    • Im neuen Fenster Ebenenmaske initialisieren den Punkt Schwarz (volle Transparenz) anwählen und hinzufügen
    • Nun gibt es im Ebenenreiter neben der bläulichen Textur noch eine schwarze. Auf dem Bearbeitungsfenster ist die Textur verschwunden.
    • Wenn man die ursprüngliche Textur wiedersehen will, muß man beim Reiter Ebene wieder Maske > Ebenenmaske deaktivieren klicken.
    • Will man die Alpha in Rohformat sehen, dann bei Reiter Ebene > Maske > Ebenenmaske anzeigen
    • Um sie zu bearbeiten, schliesslich ....> Ebenenmaske bearbeiten. Jetzt lassen sich schwarze Teilflächen entfernen. Diese freien Stellen in der Alpha generieren später mal die Color.bmp
    • Vor dem Speichern unbedingt ....> Ebenenmaske anwenden
    • Nun ist auf dem Bearbeitungsbildschirm nur noch der Teil der ursprünglichen Textur zu sehen, welcher vorher von der Alpha nicht mehr überdeckt wurde. Der Rest ist aber für das Spiel immer noch vorhanden.
    • Nun im DXT3-Format abspeichern, Mipmaps generieren nicht vergessen.

    2 Mal editiert, zuletzt von ArkenbergeJoe (14. Oktober 2011 um 17:11) aus folgendem Grund: Tutorial hierher verschoben

    • Zitieren
  • ArkenbergeJoe
    Gast
    • 3. Januar 2012 um 01:09
    • #22

    Bevor es in Vergessenheit gerät:
    Da ich mich heute mit den Raucheffekten auseinander gesetzt habe, will ich meine Erkenntnisse nicht geheim halten.
    Die Anweisungen und ihre Bedeutung

    Zitat

    with ($effects[$i] = new_particleEmitter(this)) {
    .direction = vector(0.0, 1.0, 0.0);
    .minParticleSpeed = 12.0; //Säule wird höher
    .maxParticleSpeed = 35.0; //Rauch wird schneller
    .minParticleAngle = 0.0; //geschlossene Rauchsäule
    .maxParticleAngle = 0.85; //verteilt den Qualm
    .minParticleLife = 1.0; //?
    .maxParticleLife = 8.0; //?
    .maxDistance = 750.0; //Entfernung der Sichtbarkeit am Bildschirm
    .particleSize = 1.4; //Ausdehnung des Rauchs
    .setParticleScale(0.6, 0.0, 8.0); //Zerfleddert den Rauch in allen Richtungen
    .particleAirResist = 2.0; //Rauch verteilt sich nicht so
    .gravitation = vector(0.0, 0.2, 0.0); //Zerfleddert den Rauch
    .density = 30.0; //Dichte des Qualms
    .addColorRange(0x50222222, 0x00222222); // Wert1=Beginn des Rauchs, Wert2=Ende dito, Stelle 1 und 2 Transparenz, 3 bis 6 Farbe
    .setTexture("effects/particles/lightsmoke.dds");
    .sortParticles = true;
    .autoemit = true;
    .visible = true;

    Alles anzeigen
    • Zitieren
  • TheGagaPrestige
    Fortgeschrittener
    Reaktionen
    1
    Beiträge
    394
    • 3. Januar 2012 um 14:46
    • #23
    Zitat

    Heute, 01:09
    Von ArkenbergeJoe

    .minParticleLife = 1.0; //?
    .maxParticleLife = 8.0; //?

    Da klingt für mich irgendwie danach als würde damit entschieden werden wie lange der aufgegangen Qualm sichtbar bleibt bis er verschwindet.
    Kannst du ja vllt mal probieren. ^^

    • Zitieren
  • ArkenbergeJoe
    Gast
    • 5. Februar 2012 um 21:56
    • #24

    TheGagaPrestige: Ja, ich hab es aber nicht weiter probiert, die wichtigen Parameter habe ich ja aufgeführt.

    Nun zu den Diagonalen. Da ich gerade selber dabei bin, mich damit auseinander zu setzen.
    Da gibts nämlich einiges zu beachten, erstens, dass die Sockel nicht ineinander überkreuzen bzw das Haus zu groß oder zu klein wird.
    Grundsätzlich gibt es zuerst in der Hausb.script (im object-Ordner) 2 Anweisungsblöcke
    Anweisung 1

    Zitat

    this.width = 6;
    this.height = 7;
    this.length = 6;

    Hieraus ergibt sich ein Grundstück von (this.width; this length) 6x6 Feldern. Die Anweisung this.heigth ist dafür zuständig:

    Zitat von Micha1982

    Zu der Height Angabe kann ich was erzählen. Also ein Objekt belegt halt Platz auf der Map. Auf dem Boden natürlich, aber auch in der Höhe. Die Seitenlänge eines Feldes entspricht dabei einer Höheneinheit. Bei Häusern ist das ziemlich unwichtig, aber bei stapelbaren Objekten wirds interessant. Macht man ein 1 Feld hohes Objekt und schreibt bei height 5 rein, so könnte man nur mit 4 Feldern Abstand in der Höhe das nächste oben drüber platzieren.

    Häuser stellt man ja selten übereinander, aber height definiert ganz einfach ab welcher Höhe das nächste Objekt oben drüber platziert werden kann.

    Rechteckige Häuser erfordern in der Diagonalen stets ein quadratisches Grundstück. Bei 45° Eckhäusern und anderen Objekten siehts freilich anders aus.
    Nun müssen die Ecken verschwinden. Um ein völlig diagonales Grundstück zu erhalten, gibt es dazu eine weitere Scriptzeile
    Anweisung 2

    Zitat

    this.diagonals = 0x2424;

    Hierbei wird linksoben 2 Felder tief diagonal geschnitten, und rechtsoben 4 Felder. Unten ists genau umgekehrt. Das sieht dann so aus:

    Grundsätzlich kann die Summe der Zahlen der 2. Anweisung niemals mehr ergeben als die Summe der 1. Anweisung (ohne height) Sonst siehts so aus!


    Die Sockelmauer wird laut eben genau so nach Anweisung ausgebildet. Dies kann u.U. hässliche Grafikfehler ergeben.
    Übrigens wäre das größtmögliche diagonale Grundstück dann 32 Felder groß (this.diagonals = ffff)

    Nun passt der Sockel, aber bekanntlich haben diagonale Strecken in orthogonalen Felder naturgemäß andere Abmessungen. Das würde eine Vielzahl von -b.objects erforden, was bei völliger Baugleichheit ja nicht erforderlich ist. Also skaliert das Spiel die Häuser selber passend, es muß nur wissen, um welchen Faktor. Dazu ist erst einmal in dem scrips-Ordner in der environment.script folgende Anweisung erforderlich:

    Zitat

    $BasePath = extractFilePath(extractFileDir(this.scriptFilename));
    $ObjectPath = $BasePath + "objects/";

    function loadBuilding($category, $name, $model, $w = 0, $l = 0, $targetW = 0, $targetL = 0) 
    {
    if (file_exists($model+"b.object")) {
    MAIN.$grid.loadGridObject($name+"b", $model+"b.object");
    } else if ($w != 0 && $l != 0) {
    if ($targetW == 0) $targetW = int(float($w) / 1.414213562373095 + 0.5);
    if ($targetL == 0) $targetL = int(float($l) / 1.414213562373095 + 0.5);
    MAIN.$grid.loadGridObject($name+"b", $model+"b.object", $model+".object", $targetW * 1.414213562373095 / $w, $targetL * 1.414213562373095 / $l);
    }
    MAIN.$grid.loadGridObject($name, $model+".object");
    if (defined MAIN.$level.$buildings[$category]) {
    MAIN.$level.$buildings[$category][] = $name;
    } else {
    MAIN.$level.$buildings[$category] = [$name];
    }
    <Var. 1>
    loadBuilding("Mietshaus", "blockhs_AJ01", $ObjectPath+"blockhs_AJ01", 9, 9);
    loadBuilding("Mietshaus", "blockhs_AJ02", $ObjectPath+"blockhs_AJ02", 6, 6);
    <Var. 2>
    loadBuilding("AJ-Objects", "blockhs_AJ01", "addons/AJ_Objekte/Mietshaus/objects/blockhs_AJ01", 9, 9);
    loadBuilding("AJ-Objects", "blockhs_AJ02", "addons/AJ_Objekte/Mietshaus/objects/blockhs_AJ02", 6, 6);
    <Var. 3>
    loadBuilding("AJ-Objects", "blockhs_AJ01", "userdata/addons/AJ_Objekte/Mietshaus/objects/blockhs_AJ01", 9, 9);
    loadBuilding("AJ-Objects", "blockhs_AJ02", "userdata/addons/AJ_Objekte/Mietshaus/objects/blockhs_AJ02", 6, 6);

    Alles anzeigen

    Orange Anweisung wird nicht geschrieben, danach folgen nur die möglichen Varianten einer Anweisung, nur eine wird verwendet.
    <Var. 1> funktioniert sowohl im Spieleaddon- als auch im Benutzeraddonordner.
    <Var. 2> funktioniert mit erweiterter Unterordnerstruktur im Gameaddonordner.
    <Var. 3> -dito- nur im Benutzeraddonordner.
    Die grün hinterlegten Zeilen sind für die Tätigkeit der Skalierung notwendig, die blauen Zahlen ergeben den Skalierungsfaktor. Während die "grünen" Anweisungen für Buildings immer gleich bleiben, lassen sich die "blauen" Ziffern beliebig ändern.



    Hier ist noch Arbeit nötig!

    Übrigens:
    Folgende Anweisung ist nicht für diagonale Objekt anwendbar! Selbst wenn load.building-Zeile um die Skalierungsziffern erweitert wird, diese werden nicht erkannt.

    Zitat

    $grid = MAIN.$grid;
    $level = MAIN.$level;

    $level.loadBuilding("industry", "powerp_AJ1", "/userdata/addons/AJ_Powerplant/objects/powerp_AJ1");

    Wenn dann alles passt, sollte es so aussehen:

    An dieser Böschung lässt sich die Sockelausbildung und Gebäudepassung perfekt prüfen und testen, nur die CIManer haben so ein paar Probleme mit dem Verlassen ihrer Wohnhäuser.....

    2 Mal editiert, zuletzt von ArkenbergeJoe (16. Februar 2012 um 18:36) aus folgendem Grund: 2.Ergänzung

    • Zitieren
  • Mengi12
    Schüler
    Beiträge
    89
    • 6. Februar 2012 um 17:24
    • #25

    Hi Joe

    Deine Anleitungen und die damit verbundene Arbeit sind einfach nur absolute Spitze. :thumbup: Dafür erst mal vielen Dank. Ich hoffe auch das dir der Spass nicht vergeht und du noch einige Objekte zusammen bauen wirst. Das ein oder andere kann man sicherlich noch zusätzlich beim Mappen gebrauchen. Jetzt die alles entscheidende Frage: Wo und wann kann man sich die neuen Gebäude downloaden? Bin schon ganz heiß drauf.

    Gruß Mengi12

    • Zitieren
  • ArkenbergeJoe
    Gast
    • 6. Februar 2012 um 18:01
    • #26

    Ich habe noch vor, weitere Häuser (45° Eckhaus, spitze Ecke, usw) in diesem Style zu bauen. Aber ich kann ja eine Version 0.1 rausbringen, welche später geupdatet werden kann.

    • Zitieren
  • Mengi12
    Schüler
    Beiträge
    89
    • 6. Februar 2012 um 19:06
    • #27

    Jaaaaaaaa! Geile Idee. Wann?????

    • Zitieren
  • ArkenbergeJoe
    Gast
    • 6. Februar 2012 um 19:40
    • #28

    Wenns zeitlich gut geht, noch diese Woche. Aber versprochen ist nix.....

    • Zitieren
  • Mengi12
    Schüler
    Beiträge
    89
    • 7. Februar 2012 um 14:09
    • #29

    Hi Joe,

    sorry das ich mich gestern nicht mehr gemeldet habe, aber trotzdem vielen Dank für Deine Info. Also gut ich werde geduldig warten und hoffen das Dir nichts dazwischen kommt. Bin gerade dabei eine neue Map zu erstellen und da wären natürlich die neuen Blockhäuser ein Genuß. Also viel Erfolg beim Modden und die nötige Zeit dafür.

    Gruß Mengi

    • Zitieren
  • Micha1982
    Anfänger
    Beiträge
    43
    Filebase Einträge
    3
    • 15. Februar 2012 um 22:23
    • #30

    Zu der Height Angabe kann ich was erzählen. Also ein Objekt belegt halt Platz auf der Map. Auf dem Boden natürlich, aber auch in der Höhe. Die Seitenlänge eines Feldes entspricht dabei einer Höheneinheit. Bei Häusern ist das ziemlich unwichtig, aber bei stapelbaren Objekten wirds interessant. Macht man ein 1 Feld hohes Objekt und schreibt bei height 5 rein, so könnte man nur mit 4 Feldern Abstand in der Höhe das nächste oben drüber platzieren.

    Häuser stellt man ja selten übereinander, aber height definiert ganz einfach ab welcher Höhe das nächste Objekt oben drüber platziert werden kann.

    • Zitieren
  • ArkenbergeJoe
    Gast
    • 16. Februar 2012 um 18:40
    • #31

    Das ist ja super, bei den Props hätte ich es irgendwann auch mal rausgefunden. Ob bei Häusern es auch Auswirkung für Props haben kann (Dachdeko), und bei einer falschen heigth man nichts aufs Haus stellen kann? :wacko:

    • Zitieren
  • Micha1982
    Anfänger
    Beiträge
    43
    Filebase Einträge
    3
    • 6. April 2012 um 14:12
    • #32

    Lang ists her, aber du hast natürlich Recht Joe. Wenn die Height Angabe vom Haus nicht stimmt, kann man nichts aufs Dach stellen. Das ist dann so lange blockiert, bis man über die definierte Höhe hinaus ist.

    • Zitieren
  • ArkenbergeJoe
    Gast
    • 23. Dezember 2012 um 16:27
    • #33

    So kurz vor Weihnachten fallen mir schon wieder ein paar neue Sachen ein, welche aber auch in Bewegung sein könnten. Nun hab ich aber folgendes Problem:
    Ein Objekt, welches bewegte Teile beinhaltet, besitzt innerhalb des Objektes weitere Anweisungen (Animationskoordinaten?), welche beim Konvertieren in ein blender.Objekt und nach deren Bearbeitung wieder zurück schlichtweg verloren gehen. Einzig und allein bei den Bäumen wird eine Gesamtanimation über das Gasamtobjekt gelegt. Meine Blenderpappeln bewegen sich genauso im (fiktiven) Wind wie die Original-CIM-Bäume. Allerdings ist es möglich, mehrere Objekte vom Spiel fertig zusammensetzen zu lassen. Somit könnte ich u. A. ein rotierendes Gesamtobjekt per Script auf ein anderes setzen. Ist sowas möglich, was hätte ich bei den Anweisungen zu beachten?

    Als Beispiel:
    Bei CIM besteht der Kran aus einem Objekt. Der obere Teil besitzt im Objekt eine Anweisung, die Effect-datei zu verarbeiten.
    Bei mir gedacht:
    Der Mast ist ein festsehendes Objekt; der Ausleger ist ein gesamt rotierendes Objekt. Hierbei sollte es auch ohne objektinterne Anweisung, so wie bei den Bäumen funktionieren. Auf jeden Fall funktioniert bei Zusammensetzungen die Bewegung bei einem Objekt. Das habe ich schon rausbekommen.

    • Zitieren
  • eis_os
    Profi
    Beiträge
    1.025
    Filebase Einträge
    2
    • 23. Dezember 2012 um 17:06
    • #34

    Bäumen werden per Vertex Shader bewegt, sonst sind sie fest... Daher sind Bäume keine Grundlage...


    -edit-
    Der rotierende Vertex Shader könnte vielleicht durch die Vertex Color bestimmt werden, aber Wavefront kennt kein Vertex Color.
    Wenn jemand einen Vertex Color Patch für Blender import_obj, export_obj schreibt könnten wir das testen...

    (Das sind dann aber immer noch keine Animationen wie das Öffnen einer Tür)

    Einmal editiert, zuletzt von eis_os (23. Dezember 2012 um 19:22)

    • Zitieren
  • ArkenbergeJoe
    Gast
    • 23. Dezember 2012 um 22:57
    • #35

    Ja, für Türen wäre es wohl unbrauchbar. Aber sowas wie ein Turmdrehkran sollte möglich sein. Da gibt es ja auch einen festen Punkt, um das das restliche Objekt rotiert. Also dass der Vertex shader nicht ein Objekt hin und her bewegen lässt, sondern rundherum. Und vielleicht findet sich ja noch mehr. Muß aber nicht gleich sein.

    • Zitieren
  • eis_os
    Profi
    Beiträge
    1.025
    Filebase Einträge
    2
    • 23. Dezember 2012 um 23:13
    • #36

    Der Turmdrehkran, die Casino Werbung, Litfaßsäule benutzen den selben Shader, siehe die jeweiligen Scripte.

    • Zitieren
  • ArkenbergeJoe
    Gast
    • 28. Dezember 2012 um 16:15
    • #37

    Für Animationen habe ich jetzt hier was gefunden: CitiesInMotion, Türanimationen?
    Werde mal da den Stand der Dinge anfragen.

    Einmal editiert, zuletzt von ArkenbergeJoe (28. Dezember 2012 um 16:17)

    • Zitieren
  • mediziner
    Administrator
    Reaktionen
    2
    Beiträge
    1.924
    Filebase Einträge
    10
    Einträge
    4
    • 20. Januar 2013 um 23:02
    • Offizieller Beitrag
    • #38

    Könnten wir aus den gesammelten Erkenntnissen einen (oder mehrere) Wiki-Einträge erarbeiten?
    (Nicht nur an ArkenbergeJoe gerichtet, sondern an alle ;) )

    • Nächster offizieller Beitrag
    • Zitieren
  • robinH
    Erleuchteter
    Beiträge
    3.183
    Filebase Einträge
    61
    • 29. September 2013 um 09:04
    • #39

    Da ich nichts richtig dazu finde, aber hier sehr viel auch über die Texturen geschrieben wird eine Anmerkung zu den N-Maps. Es handelt sich hier nicht um eine bläuliche Textur wie geschrieben sondern das Ganze ist Vergleichbar mit einer art Bumpmap wie sie in 3D Programmen als Bitmap meist genutz wird.

    In Games wie Fallout, Oblivion oder Skyrim und bestimmt auch noch anderen werden damit die Erhebungen erzeugt.
    Normalerweise ist eine Textur immer Flach mit der n- Map werden dem Betrachter aber Erhebungen sueggeriert die gar nicht da sind.

    CIM nutz diese Möglichkeit zB bei den Zuggleisen, U-Bahngleisen, Clippengelände und dem Wasser.

    Ohne N-Map wären die alle Flach und nicht so schön.

    Hier mal ein paar schöne Darstellungen was mit n-Maps möglich ist und auch Erklärungen wie sie sich erstellen lassen

    Normal Mapping Tutorial: Part II - page 4: Tips for Editing Normal Maps


    Allerdings gelingt es mir auch bei den normalen DDS Texturen nicht so recht für CIM das richtige Format zu finden.

    DXT1 geht zwar ist aber sehr unscharf und ausserdem wirds pixelig und der Alphakanal ist hässlich.

    DXT3 geht auch, jedoch ist wie bei DX1 auch beim Rauszoomen eine seltsame Vermischung von Pixeln zu bemerken.

    DXT5 geht gar nicht. Da wird alles scharz.

    Die Midmaps erkennt CIM wohl nicht, jedenfalls wird dann auch bei DX1 und DX3 alles schwarz. Doch hier wird geschrieben, das man Midpaps generieren soll.
    Siehe Thread ganz oben.

    Soviel ich weiss braucht es aber Midmaps, sonst hat man ja beim Rauszoomen Texturfehler. Eventuell ist das ja die seltsame Vermisschung von Pixeln die ich da sehe. Zusehen in der Mod, die noch freigeschaltet werden muss.

    Wie ist bloss der Sky komprimiert. Da klappts mit keiner der drei Varianten. Der Sky ist immer Schwarz. Dabei ist die Textur so mies, das die unbedingt einer Bearbeitung bedarf.

    Grüße an alle

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

    8 Mal editiert, zuletzt von robinH (29. September 2013 um 09:16)

    • Zitieren
  • eis_os
    Profi
    Beiträge
    1.025
    Filebase Einträge
    2
    • 29. September 2013 um 09:34
    • #40

    Mit gs_dump die Material Daten analysieren.
    In die mtl Dateien können für die AlphaBits und Co bestimmte Einstellungen verändert werden:

    gsflags
    map_Kd_alpha
    map_Ks_alpha
    map_bump_alpha

    Siehe dazu auch den Source Code...

    (Stimmen die Kanäle und Bits nicht, kann CIM1 die Daten nur schlecht oder nur falsch nutzen)

    -edit-
    Und erst die map_* nutzen und dann map_*_alpha sonst wird es nicht funktionieren

    2 Mal editiert, zuletzt von eis_os (29. September 2013 um 09:40)

    • Zitieren

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Twitch

  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™